Chapitre 6 Statistiques descriptives
️ Objectifs spécifiques:
6.1 Sommaire des données
Nous avons vu comment générer des statistiques sommaires en R avec la fonction summary()
. Reprenons les données d’iris.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
6.2 Moyenne et écart-type
Pour précisément effectuer une moyenne et un écart-type sur un vecteur, passons par les fonctions mean()
et sd()
.
## [1] 5.843333
## [1] 0.8280661
Pour effectuer un sommaire de tableau piloté par une fonction, nous passons par la gamme de fonctions summarise()
, de dplyr
. Dans ce cas, avec group_by()
, nous fragmentons le tableau par espèce pour effectuer un sommaire sur toutes les variables.
## # A tibble: 3 x 5
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versicolor 5.94 2.77 4.26 1.33
## 3 virginica 6.59 2.97 5.55 2.03
6.3 Quartiles
Vous pourriez être intéressé par les quartiles à 25%, 50% et 75%. Mais la fonction summarise()
n’autorise que les fonctions dont la sortie est d’un seul objet, alors faisons de sorte que l’objet soit une liste - lorsque l’on imbrique une fonction funs
, le tableau à insérer dans la fonction est indiqué par un .
.
## # A tibble: 3 x 9
## Species Sepal.Length_me~ Sepal.Width_mean Petal.Length_me~ Petal.Width_mean
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versic~ 5.94 2.77 4.26 1.33
## 3 virgin~ 6.59 2.97 5.55 2.03
## # ... with 4 more variables: Sepal.Length_median <dbl>,
## # Sepal.Width_median <dbl>, Petal.Length_median <dbl>,
## # Petal.Width_median <dbl>
En mode programmation classique de R, on pourra générer les quartiles à la pièce.
## 0% 25% 50% 75% 100%
## 4.3 4.8 5.0 5.2 5.8
## 0% 25% 50% 75% 100%
## 4.9 5.6 5.9 6.3 7.0
## 0% 25% 50% 75% 100%
## 4.900 6.225 6.500 6.900 7.900
6.4 Décomptes et proportions
La fonction table()
permettra d’obtenir des décomptes par catégorie, ici par plages de longueurs de sépales.
tableau_croise <- table(iris$Species,
cut(iris$Sepal.Length, breaks = quantile(iris$Sepal.Length)))
tableau_croise
##
## (4.3,5.1] (5.1,5.8] (5.8,6.4] (6.4,7.9]
## setosa 35 14 0 0
## versicolor 4 20 17 9
## virginica 1 5 18 26
Pour obtenir les proportions du nombre total, il s’agit d’encapsuler le tableau croisé dans la fonction prop.table()
.
##
## (4.3,5.1] (5.1,5.8] (5.8,6.4] (6.4,7.9]
## setosa 0.234899329 0.093959732 0.000000000 0.000000000
## versicolor 0.026845638 0.134228188 0.114093960 0.060402685
## virginica 0.006711409 0.033557047 0.120805369 0.174496644
6.5 Tests d’hypothèses à 1 et 2 échantillons
Un test d’hypothèse permet de décider si une hypothèse est confirmée ou rejetée à un seuil de probabilité prédéterminé.
En statistiques, un test d’hypothèses (ou test statistique) est une procédure de décision entre deux hypothèses. IC’est une démarche consistant à rejeter ou à ne pas rejeter une hypothèse statistique, appelée hypothèse nulle, en fonction d’un jeu de données.
Cette section est inspirée du chapitre 5 de Dalgaard, 2008.
6.5.1 L’hypothèse nulle
Les tests d’hypothèse évalue des effets statistiques (qui ne sont pas nécessairement des effets de causalité). L’effet à évaluer peut être celui d’un traitement, d’indicateurs météorologiques (e.g. précipitations totales, degré-jour, etc.), de techniques de gestion des paysages, etc. Une recherche est menée pour évaluer l’hypothèse que l’on retrouve des différences entre des unités expérimentales. Par convention, l’hypothèse nulle (écrite \(H_0\)) est l’hypothèse qu’il n’y ait pas d’effet (c’est l’hypothèse de l’avocat du diable 😈) à l’échelle de la population (et non pas à l’échelle de l’échantillon). À l’inverse, l’hypothèse alternative (écrite \(H_1\)) est l’hypothèse qu’il y ait un effet à l’échelle de la population.
À titre d’exercice en stats, on débute souvent par en testant si deux vecteurs de valeurs continues proviennent de populations à moyennes différentes ou si un vecteur de valeurs a été généré à partir d’une population ayant une moyenne donner. Dans cette section, nous utiliserons la fonction t.test()
pour les tests de t et la fonction wilcox.test()
pour les tests de Wilcoxon (aussi appelé de Mann-Whitney).
6.5.2 Test de t à un seul échantillon
Nous devons assumer, pour ce test, que l’échantillon est recueillit d’une population dont la distribution est normale, \(\mathcal{N} \sim \left( \mu, \sigma^2 \right)\), et que chaque échantillon est indépendant l’un de l’autre. L’hypothèse nulle est souvent celle de l’avocat du diable, que la moyenne soit égale à une valeur donnée (donc la différence entre la moyenne de la population et une moyenne donnée est de zéro): ici, que \(\mu = \bar{x}\). L’erreur standard sur la moyenne (ESM) de l’échantillon, \(\bar{x}\) est calculée comme suit.
\[ESM = \frac{s}{\sqrt{n}}\]
où \(s\) est l’écart-type de l’échantillon et \(n\) est le nombre d’échantillons.
6.5.3 Intervalle de confiance
Pour tester l’intervalle de confiance de l’échantillon, on multiplie l’ESM par l’aire sous la courbe de densité couvrant une certaine proportion de part et d’autre de l’échantillon. Pour un niveau de confiance de 95%, on retranche 2.5% de part et d’autre.
set.seed(33746)
x <- rnorm(20, 16, 4)
level <- 0.95
alpha <- 1-level
x_bar <- mean(x)
s <- sd(x)
n <- length(x)
error <- qnorm(1 - alpha/2) * s / sqrt(n)
error
## [1] 1.483253
L’intervalle de confiance est l’erreur de par et d’autre de la moyenne.
## [1] 14.35630 17.32281
Si la moyenne de la population est de 16, un nombre qui se situe dans l’intervalle de confiance on accepte l’hypothèse nulle au seuil 0.05. Si le nombre d’échantillon est réduit (généralement < 30), on passera plutôt par une distribution de t, avec \(n-1\) degrés de liberté.
## [1] 14.25561 17.42351
Plus simplement, on pourra utiliser la fonction t.test()
en spécifiant la moyenne de la population. Nous avons généré 20 données avec une moyenne de 16 et un écart-type de 4. Nous savons donc que la vraie moyenne de l’échantillon est de 16. Mais disons que nous testons l’hypothèse que ces données sont tirées d’une population dont la moyenne est 18 (et implicitement que sont écart-type est de 4).
##
## One Sample t-test
##
## data: x
## t = -2.8548, df = 19, p-value = 0.01014
## alternative hypothesis: true mean is not equal to 18
## 95 percent confidence interval:
## 14.25561 17.42351
## sample estimates:
## mean of x
## 15.83956
La fonction retourne la valeur de t (t-value), le nombre de degrés de liberté (\(n-1 = 19\)), une description de l’hypothèse alternative (alternative hypothesis: true mean is not equal to 18
), ainsi que l’intervalle de confiance au niveau de 95%. Le test contient aussi la p-value. Bien que la p-value soit largement utilisée en science
6.5.4 La p-value
La p-value, ou valeur-p ou p-valeur, est utilisée pour trancher si, oui ou non, un résultat est significatif (en langage scientifique, le mot significatif ne devrait être utilisé que lorsque l’on réfère à un test d’hypothèse statistique). Vous retrouverez des p-value partout en stats. Les p-values indiquent la confiance que l’hypothèse nulle soit vraie, selon les données et le modèle statistique utilisées.
La p-value est la probabilité que les données aient été générées pour obtenir un effet équivalent ou plus prononcé si l’hypothèse nulle est vraie.
Une p-value élevée indique que le modèle appliqué à vos données concordent avec la conclusion que l’hypothèse nulle est vraie, et inversement si la p-value est faible. Le seuil arbitraire utilisée en écologie et en agriculture, comme dans plusieurs domaines, est 0.05.
Les six principes de l’American Statistical Association guident l’interprétation des p-values. [ma traduction]
- Les p-values indique l’ampleur de l’incompatibilité des données avec le modèle statistique
- Les p-values ne mesurent pas la probabilité que l’hypothèse étudiée soit vraie, ni la probabilité que les données ont été générées uniquement par la chance.
- Les conclusions scientifiques et décisions d’affaire ou politiques ne devraient pas être basées sur si une p-value atteint un seuil spécifique.
- Une inférence appropriée demande un rapport complet et transparent.
- Une p-value, ou une signification statistique, ne mesure pas l’ampleur d’un effet ou l’importance d’un résultat.
- En tant que tel, une p-value n’offre pas une bonne mesure des évidences d’un modèle ou d’une hypothèse.
Cet encadré est inspiré d’un billet de blogue de Jim Frost et d’un rapport de l’American Statistical Association.
Dans le cas précédent, la p-value était de 0.01014. Pour aider notre interprétation, prenons l’hypothèse alternative: true mean is not equal to 18
. L’hypothèse nulle était bien que la vraie moyenne est égale à 18. Insérons la p-value dans la définition: la probabilité que les données aient été générées pour obtenir un effet équivalent ou plus prononcé si l’hypothèse nulle est vraie est de 0.01014. Il est donc très peu probable que les données soient tirées d’un échantillon dont la moyenne est de 18. Au seuil de signification de 0.05, on rejette l’hypothèse nulle et l’on conclut qu’à ce seuil de confiance, l’échantillon ne provient pas d’une population ayant une moyenne de 18.
6.5.4.1 Attention aux mauvaises interprétations des p-values
“La p-value n’a jamais été conçue comme substitut au raisonnement scientifique” Ron Wasserstein, directeur de l’American Statistical Association [ma traduction].
Un résultat montrant une p-value plus élevée que 0.05 est-il pertinent?
Lors d’une conférence, Dr Evil ne présentent que les résultats significatifs de ses essais au seuil de 0.05. Certains essais ne sont pas significatifs, mais bon, ceux-ci ne sont pas importants… En écartant ces résultats, Dr Evil commet 3 erreurs:
La p-value n’est pas un bon indicateur de l’importance d’un test statistique. L’importance d’une variable dans un modèle devrait être évaluée par la valeur de son coefficient. Son incertitude devrait être évaluée par sa variance. Une manière d’évaluer plus intuitive la variance est l’écart-type ou l’intervalle de confiance. À un certain seuil d’intervalle de confiance, la p-value traduira la probabilité qu’un coefficient soit réellement nul ait pu générer des données démontrant un coefficient égal ou supérieur.
Il est tout aussi important de savoir que le traitement fonctionne que de savoir qu’il ne fonctionne pas. Les résultats démontrant des effets sont malheureusement davantage soumis aux journaux et davantage publiés que ceux ne démontrant pas d’effets (Decullier et al., 2005).
Le seuil de 0.05 est arbitraire.
6.5.4.2 Attention au p-hacking
Le p-hacking (ou data dredging) consiste à manipuler les données et les modèles pour faire en sorte d’obtenir des p-values favorables à l’hypothèse testée et, éventuellement, aux conclusions recherchées. À éviter dans tous les cas. Toujours. Toujours. Toujours.
Vidéo suggérée (en anglais).
6.5.5 Test de Wilcoxon à un seul échantillon
Le test de t suppose que la distribution des données est normale… ce qui est rarement le cas, surtout lorsque les échantillons sont peu nombreux. Le test de Wilcoxon ne demande aucune supposition sur la distribution: c’est un test non-paramétrique basé sur le tri des valeurs.
##
## Wilcoxon signed rank exact test
##
## data: x
## V = 39, p-value = 0.01208
## alternative hypothesis: true location is not equal to 18
Le V
est la somme des rangs positifs. Dans ce cas, la p-value est semblable à celle du test de t, et les mêmes conclusions s’appliquent.
6.5.6 Tests de t à deux échantillons
Les tests à un échantillon servent plutôt à s’exercer: rarement en aura-t-on besoin en recherche, où plus souvent, on voudra comparer les moyennes de deux unités expérimentales. L’expérience comprend donc deux séries de données continues, \(x_1\) et \(x_2\), issus de lois de distribution normale \(\mathcal{N} \left( \mu_1, \sigma_1^2 \right)\) et \(\mathcal{N} \left( \mu_2, \sigma_2^2 \right)\), et nous testons l’hypothèse nulle que \(\mu_1 = \mu_2\). La statistique t est calculée comme suit.
\[t = \frac{\bar{x_1} - \bar{x_2}}{ESDM}\]
L’ESDM est l’erreur standard de la différence des moyennes:
\[ESDM = \sqrt{ESM_1^2 + ESM_2^2}\]
Si vous supposez que les variances sont identiques, l’erreur standard (s) est calculée pour les échantillons des deux groupes, puis insérée dans le calcul des ESM. La statistique t sera alors évaluée à \(n_1 + n_2 - 2\) degrés de liberté. Si vous supposez que la variance est différente (procédure de Welch), vous calculez les ESM avec les erreurs standards respectives, et la statistique t devient une approximation de la distribution de t avec un nombre de degrés de liberté calculé à partir des erreurs standards et du nombre d’échantillon dans les groupes: cette procédure est considérée comme plus prudente (Dalgaard, 2008, page 101).
Prenons les données d’iris pour l’exemple en excluant l’iris setosa étant donnée que les tests de t se restreignent à deux groupes. Nous allons tester la longueur des pétales.
iris_pl <- iris %>%
filter(Species != "setosa") %>%
select(Species, Petal.Length)
sample_n(iris_pl, 5)
## Species Petal.Length
## 1 virginica 5.1
## 2 versicolor 4.0
## 3 virginica 5.0
## 4 versicolor 4.6
## 5 versicolor 4.1
Dans la prochaine cellule, nous introduisons l’interface-formule de R, où l’on retrouve typiquement le ~
, entre les variables de sortie à gauche et les variables d’entrée à droite. Dans notre cas, la variable de sortie est la variable testée, Petal.Length
, qui varie en fonction du groupe Species
, qui est la variable d’entrée (variable explicative) - nous verrons les types de variables plus en détails dans la section Les modèles statistiques, plus bas.
##
## Welch Two Sample t-test
##
## data: Petal.Length by Species
## t = -12.604, df = 95.57, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1.49549 -1.08851
## sample estimates:
## mean in group versicolor mean in group virginica
## 4.260 5.552
Nous obtenons une sortie similaire aux précédentes. L’intervalle de confiance à 95% exclu le zéro, ce qui est cohérent avec la p-value très faible, qui nous indique le rejet de l’hypothèse nulle au seuil 0.05. Les groupes ont donc des moyennes de longueurs de pétale significativement différentes.
6.5.7 Enregistrer les résultats d’un test
Il est possible d’enregistrer un test dans un objet.
## Length Class Mode
## statistic 1 -none- numeric
## parameter 1 -none- numeric
## p.value 1 -none- numeric
## conf.int 2 -none- numeric
## estimate 2 -none- numeric
## null.value 1 -none- numeric
## stderr 1 -none- numeric
## alternative 1 -none- character
## method 1 -none- character
## data.name 1 -none- character
## List of 10
## $ statistic : Named num -12.6
## ..- attr(*, "names")= chr "t"
## $ parameter : Named num 95.6
## ..- attr(*, "names")= chr "df"
## $ p.value : num 4.9e-22
## $ conf.int : num [1:2] -1.5 -1.09
## ..- attr(*, "conf.level")= num 0.95
## $ estimate : Named num [1:2] 4.26 5.55
## ..- attr(*, "names")= chr [1:2] "mean in group versicolor" "mean in group virginica"
## $ null.value : Named num 0
## ..- attr(*, "names")= chr "difference in means"
## $ stderr : num 0.103
## $ alternative: chr "two.sided"
## $ method : chr "Welch Two Sample t-test"
## $ data.name : chr "Petal.Length by Species"
## - attr(*, "class")= chr "htest"
6.5.8 Comparaison des variances
Pour comparer les variances, on a recours au test de F (F pour Fisher).
##
## F test to compare two variances
##
## data: Petal.Length by Species
## F = 0.72497, num df = 49, denom df = 49, p-value = 0.2637
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.411402 1.277530
## sample estimates:
## ratio of variances
## 0.7249678
Il semble que l’on pourrait relancer le test de t sans la procédure Welch, avec var.equal = TRUE
.
6.5.9 Tests de Wilcoxon à deux échantillons
Cela ressemble au test de t!
##
## Wilcoxon rank sum test with continuity correction
##
## data: Petal.Length by Species
## W = 44.5, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
6.5.10 Les tests pairés
Les tests pairés sont utilisés lorsque deux échantillons proviennent d’une même unité expérimentale: il s’agit en fait de tests sur la différence entre deux observations.
Il est important de spécifier que le test est pairé, la valeur par défaut de paired
étant FALSE
.
##
## Paired t-test
##
## data: avant and apres
## t = -1.5168, df = 19, p-value = 0.1458
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -4.5804586 0.7311427
## sample estimates:
## mean of the differences
## -1.924658
L’hypothèse nulle qu’il n’y ait pas de différence entre l’avant et l’après traitement est acceptée au seuil 0.05.
Exercice. Effectuer un test de Wilcoxon pairé.
6.6 L’analyse de variance
L’analyse de variance consiste à comparer des moyennes de plusieurs groupe distribués normalement et de même variance. Cette section sera élaborée prochainement plus en profondeur. Considérons-la pour le moment comme une régression sur une variable catégorielle.
## Df Sum Sq Mean Sq F value Pr(>F)
## Species 2 437.1 218.55 1180 <2e-16 ***
## Residuals 147 27.2 0.19
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La prochaine section, justement, est vouée aux modèles statistiques explicatifs, qui incluent la régression.