Cursus
L'écart-type est l'une des façons les plus courantes de résumer la dispersion de vos données. Dans R, la fonction sd()
vous permet de calculer rapidement cette mesure de variabilité, que vous travailliez avec des vecteurs, des cadres de données ou des données groupées.
Dans cet article, je vous présenterai les bases de l'utilisation de sd()
dans R, j'étudierai comment gérer les valeurs manquantes et je vous montrerai comment calculer les écarts types entre les groupes à l'aide de fonctions telles que tapply()
et de packages tels que dplyr
.
Que fait sd() dans R ?
En R, la fonction sd()
de la base R calcule l'écart-type d'un tableau numérique ou d'une colonne d'une base de données. Elle mesure l'écart entre les valeurs de vos données et la moyenne, ce qui vous donne une idée de la variabilité ou de la dispersion.
Si vous êtes familier avec la notion de variance, l'écart-type est simplement sa racine carrée et, en raison de son mode de calcul (racine carrée de l'écart quadratique moyen), l'écart-type reste sur la même échelle que les données d'origine. Il est ainsi plus facile à interpréter en termes pratiques.
Un exemple simple de sd()
Supposons que vous disposiez d'un ensemble de nombres et que vous souhaitiez connaître leur écart par rapport à la moyenne.
Voici comment vous pouvez le faire en R :
exam_scores <- c(75, 80, 85, 90, 95)
sd(exam_scores)
Le résultat vous indique l'écart-type, qui quantifie la distance moyenne de chaque score par rapport à la moyenne.
Vous pouvez utiliser sd()
avec n'importe quel tableau numérique, y compris les entiers, les doubles ou les résultats de calculs. Vous savez peut-être que R traite les vecteurs logiques comme des vecteurs numériques (TRUE
comme 1
, FALSE
comme 0
), de sorte que la fonction sd()
fonctionnerait techniquement sur des vecteurs logiques (vous pouvez l'essayer si vous le souhaitez), mais l'idée de l'écart-type est plus significative pour les données numériques continues.
Traitement des valeurs manquantes avec sd()
Les ensembles de données du monde réel contiennent souvent des valeurs manquantes, ce qui mérite d'être mentionné : Si vos données comprennent des valeurs NA
, sd()
renverra NA
par défaut.
Prenons l'exemple suivant :
heights <- c(170, 175, NA, 180, 185)
sd(heights)
Le résultat est NA
.
Pour ignorer les valeurs manquantes et calculer l'écart-type des nombres disponibles, utilisez l'argument na.rm = TRUE
. Vous pouvez également supprimer les valeurs de NA
de votre ensemble de données, mais je ne vous conseille de le faire que si cela a un sens.
sd(heights, na.rm = TRUE)
Vous obtiendrez maintenant l'écart-type pour 170, 175, 180 et 185.
Calcul de l'écart-type pour les blocs de données dans R
Vous pouvez facilement calculer l'écart-type d'une colonne spécifique dans un cadre de données en utilisant l'opérateur $
. Supposons que vous disposiez d'un cadre de données sur les poids des produits :
product_data <- data.frame( weight = c(1.2, 1.5, 1.3, 1.7, 1.4), price = c(10, 12, 11, 13, 12) )
sd(product_data$weight)
Vous obtenez ainsi l'écart-type de la colonne weight
. N'oubliez pas que sd()
est conçu pour les vecteurs numériques, et non pour les cadres de données entiers. Sélectionnez toujours la colonne appropriée.
sd() et écarts types groupés
Souvent, vous voudrez mesurer la variabilité au sein des groupes, par exemple par catégorie, par région ou par un autre facteur. R propose plusieurs méthodes pour calculer les écarts types groupés. J'en montrerai trois :
Utilisation de tapply() pour les écarts types groupés
Supposons que vous disposiez de données sur les ventes pour différentes régions et que vous souhaitiez connaître l'écart-type pour chaque région :
sales_amount <- c(200, 220, 210, 250, 240, 230)
region <- c("North", "North", "South", "South", "North", "South")
tapply(sales_amount, region, sd)
tapply()
applique sd()
à chaque groupe défini par région.
Utilisation de aggregate() pour les écarts types groupés
Si vous préférez que vos résultats soient présentés dans un cadre de données ordonné, aggregate()
fonctionne :
sales_data <- data.frame( region = c("North", "North", "South", "South", "North", "South"), amount = c(200, 220, 210, 250, 240, 230) )
aggregate(amount ~ region, data = sales_data, sd)
Cette opération permet d'obtenir un cadre de données récapitulatif avec l'écart-type pour chaque région.
Utilisation de dplyr pour les écarts types groupés
Avec le paquet dplyr
, les calculs groupés sont encore plus lisibles. Utilisez summarize()
après le regroupement :
library(dplyr)
sales_data %>%
group_by(region) %>%
summarize(sd_amount = sd(amount))
Cette approche est particulièrement utile pour les grands ensembles de données ou lorsque vous enchaînez plusieurs transformations de données. (Ou si vous préférez simplement utiliser l'opérateur pipe, comme moi).
Erreurs courantes et conseils
Même une fonction simple comme sd() peut poser des problèmes si vous ne faites pas attention. Voici quelques pièges courants :
-
Données non numériques:
sd()
ne fonctionne qu'avec des vecteurs numériques. Si vos données comprennent des caractères ou des facteurs, vous obtiendrez une erreur. Utilisezis.numeric()
pour vérifier vos données. -
Valeurs manquantes: Un seul
NA
entraîne le retour desd()
àNA
. Utilisez toujoursna.rm = TRUE
si vous souhaitez ignorer les valeurs manquantes. -
Petites tailles d'échantillon:
sd()
utilise n-1 au dénominateur (écart-type de l'échantillon). Pour les vecteurs de longueur 1,sd()
renvoieNA
et non0
.
Cette dernière erreur en particulier me semble intéressante. Il s'agit d'une différence moins connue, qui peut vous faire trébucher si vous passez de Python à R, car Python divise par l'écart type de la population, et non par celui de l'échantillon.
Variations utiles et fonctions connexes dans R
R offre plusieurs fonctions connexes pour mesurer la variabilité et résumer les données :
-
var()
: Calcule la variance, qui est le carré de l'écart-type. -
apply()
,sapply()
,lapply()
: Utile pour appliquersd()
sur des lignes ou des colonnes de matrices et de cadres de données. mad()
: Calcule l'écart absolu médian, qui est une autre mesure intéressante et plus robuste de la variabilité.
Permettez-moi de vous montrer sd()
utilisé avec apply()
, puisque je l'ai mentionné : Voici comment utiliser apply()
pour obtenir l'écart-type de chaque colonne d'une matrice. Comme précédemment, je vais créer cette matrice à la volée.
measurement_matrix <- matrix(1:9, nrow = 3)
apply(measurement_matrix, 2, sd)
Cette fonction renvoie l'écart-type pour chaque colonne, ce qui vous permet d'avoir un aperçu rapide de la variabilité de plusieurs variables.
Conclusion
La fonction sd()
de R est relativement simple (une seule ligne de code). Mais si vous vous retrouvez à l'utiliser pour des rapports ou des présentations et que vous vous sentez un peu perdu dans les détails, inscrivez-vous à notre cursus de statisticien en R. Les statistiques et l'analyse des données sont très nuancées ; assurez-vous donc de bien les connaître.

Je suis rédacteur et éditeur dans le domaine de la science des données. Je suis particulièrement intéressé par l'algèbre linéaire, les statistiques, R, etc. Je joue également beaucoup aux échecs !