Le test t est utilisé pour comparer deux moyennes.
Ce chapitre décrit les différents types de tests t, notamment:
- tests t pour échantillon unique,
- t-test pour échantillons indépendants : Test t de Student et test t de Welch
- T test pour échantillons appariés.
Vous apprendrez à:
- Calculez les différents t-tests dans R. La fonction
t_test()
[paquet rstatix], qui est compatible avec les pipes, sera utilisée. - Vérifier les hypothèses du test t
- Calculez et rapportez la taille de l’effet du test t en utilisant le d de Cohen. La statistique “d” redéfinit la différence de moyennes comme le nombre d’écarts-types qui sépare ces moyennes. Les tailles d’effet conventionnelles des tests T, proposées par Cohen, sont : 0,2 (petit effet), 0,5 (effet modéré) et 0,8 (effet important) (Cohen 1998).
Sommaire:
Livre Apparenté
Pratique des Statistiques dans R II - Comparaison de Groupes: Variables NumériquesPrérequis
Assurez-vous d’avoir installé les paquets R suivants:
tidyverse
pour la manipulation et la visualisation des donnéesggpubr
pour créer facilement des graphiques prêts à la publicationrstatix
offre des fonctions R conviviales pour des analyses statistiques faciles à réaliser.datarium
: contient les jeux de données requis pour ce chapitre.
Commencez par charger les packages requis suivants:
library(tidyverse)
library(ggpubr)
library(rstatix)
Tests t pour échantillon unique
Le test t pour échantillon unique, également connu sous le nom de test t pour une seule moyenne , est utilisé pour comparer la moyenne d’un échantillon à une moyenne standard connue (ou théorique / hypothétique).
Généralement, la moyenne théorique provient de:
- une expérience précédente. Par exemple, en comparant si le poids moyen des souris diffère de 200 mg, une valeur déterminée dans une étude précédente.
- ou d’une expérience où vous avez des conditions contrôles et de traitements. Si vous exprimez vos données en “pourcentage de contrôle”, vous pouvez tester si la valeur moyenne de la condition de traitement diffère significativement de 100.
Données de démonstration
Jeu de données de démonstration : mice
[package datarium]. Contient le poids de 10 souris:
# Charger et inspecter les données
data(mice, package = "datarium")
head(mice, 3)
## # A tibble: 3 x 2
## name weight
## <chr> <dbl>
## 1 M_1 18.9
## 2 M_2 19.5
## 3 M_3 23.1
Statistiques descriptives
Calculer quelques statistiques sommaires : nombre de sujets, moyenne et sd (écart-type)
mice %>% get_summary_stats(weight, type = "mean_sd")
## # A tibble: 1 x 4
## variable n mean sd
## <chr> <dbl> <dbl> <dbl>
## 1 weight 10 20.1 1.90
Visualisation
Créer un boxplot pour visualiser la distribution du poids des souris. Ajoutez également des points jitter pour montrer les observations individuelles. Le gros point représente le point moyen.
bxp <- ggboxplot(
mice$weight, width = 0.5, add = c("mean", "jitter"),
ylab = "Weight (g)", xlab = FALSE
)
bxp
Hypothèses et tests préliminaires
Le test t pour échantillon unique suppose les caractéristiques suivantes au sujet des données:
- Aucune valeur aberrante significative dans les données
- Normalité. les données devraient être distribuées approximativement normalement
Dans cette section, nous effectuerons quelques tests préliminaires pour vérifier si ces hypothèses sont respectées.
Identifier les valeurs aberrantes
Les valeurs aberrantes peuvent être facilement identifiées à l’aide des méthodes boxplot, implémentées dans la fonction R identify_outliers()
[paquet rstatix].
mice %>% identify_outliers(weight)
## [1] name weight is.outlier is.extreme
## <0 rows> (or 0-length row.names)
Il n’y avait pas de valeurs extrêmes aberrantes.
Notez que, dans le cas où vous avez des valeurs extrêmes aberrantes, cela peut être dû à : 1) erreurs de saisie de données, erreurs de mesure ou valeurs inhabituelles.
Dans ce cas, vous pourriez envisager d’exécuter le test de Wilcoxon non paramétrique.
Vérifier l’hypothèse de normalité
L’hypothèse de normalité peut être vérifiée en calculant le test Shapiro-Wilk. Si les données sont normalement distribuées, la p-value doit être supérieure à 0,05.
mice %>% shapiro_test(weight)
## # A tibble: 1 x 3
## variable statistic p
## <chr> <dbl> <dbl>
## 1 weight 0.923 0.382
Selon le résultat, la p-value est supérieure au niveau de significativité 0,05 indiquant que la distribution des données n’est pas significativement différente de la distribution normale. En d’autres termes, nous pouvons supposer que la normalité.
Vous pouvez également créer un QQ plot des données de weight
. Le graphique QQ plot dessine la corrélation entre une donnée définie et la distribution normale.
ggqqplot(mice, x = "weight")
Tous les points se situent approximativement le long de la ligne de référence (45 degrés), pour chaque groupe. Nous pouvons donc supposer la normalité des données.
Notez que, si la taille de votre échantillon est supérieure à 50, le graphique de normalité QQ plot est préféré parce qu’avec des échantillons de plus grande taille, le test de Shapiro-Wilk devient très sensible même à un écart mineur par rapport à la normale.
Si les données ne sont pas normalement distribuées, il est recommandé d’utiliser un test non paramétrique tel que le test de Wilcoxon à échantillon unique. Ce test est semblable au test t pour échantillon unique, mais il est axé sur la médiane plutôt que sur la moyenne.
Calculs
Nous voulons savoir si le poids moyen des souris diffère du 25g (test bilatéral) ?
stat.test <- mice %>% t_test(weight ~ 1, mu = 25)
stat.test
## # A tibble: 1 x 7
## .y. group1 group2 n statistic df p
## * <chr> <chr> <chr> <int> <dbl> <dbl> <dbl>
## 1 weight 1 null model 10 -8.10 9 0.00002
Les résultats ci-dessus montrent les composantes suivantes:
.y.
: la variable-réponse utilisée dans le test.group1,group2
: en général, les groupes comparés dans les tests par paires. Ici, nous avons le modèle nul (test pour échantillon unique).statistic
: statistique du test (valeur t) utilisée pour calculer la p-value.df
: degrés de liberté.p
: p-value.
Vous pouvez obtenir un résultat détaillé en spécifiant l’option detailed = TRUE
dans la fonction t_test()
.
Taille de l’effet
Pour calculer la taille de l’effet, appelée d de Cohen
, du test t pour échantillon unique, vous devez diviser la différence moyenne par l’écart type de la différence, comme indiqué ci-dessous. Notez que, ici: sd(x-mu) = sd(x)
.
La formule du d de Cohen:
d = abs(mean(x) - mu)/sd(x)
, où:
x
est un vecteur numérique contenant les données.mu
est la moyenne contre laquelle la moyenne de x est comparée (la valeur par défaut est mu = 0).
Calculs:
mice %>% cohens_d(weight ~ 1, mu = 25)
## # A tibble: 1 x 6
## .y. group1 group2 effsize n magnitude
## * <chr> <chr> <chr> <dbl> <int> <ord>
## 1 weight 1 null model 10.6 10 large
Rappelons que les taille de l’effet conventionnelles du test t, proposé par Cohen J. (1998), sont : 0,2 (petit effet), 0,5 (effet modéré) et 0,8 (effet important) (Cohen 1998). Comme la taille de l’effet, d, est de 2,56, vous pouvez conclure qu’il y a un effet important.
Rapporter
Nous pourrions rapporter le résultat comme suit:
Un test t pour échantillon unique a été calculé pour déterminer si le poids moyen des souris incluses était différent du poids moyen normal de la population (25 g).
La valeur du poids des souris était normalement distribuée, telle qu’évaluée par le test de Shapiro-Wilk (p > 0,05) et il n’y avait pas de valeurs extrêmes aberrantes dans les données, telles qu’évaluées par la méthode boxplot.
Le poids moyen mesuré des souris (20,14 +/- 1,94) était statistiquement significativement inférieur au poids moyen normal de la population 25 (t(9) = -8,1, p < 0,0001, d = 2,56
) ; où t(9) est une notation courte pour une statistique t qui a 9 degrés de liberté.
Créer un box plot avec p-value:
bxp + labs(
subtitle = get_test_label(stat.test, detailed = TRUE)
)
Créer un graphe de densité avec p-value:
- La ligne rouge correspond à la moyenne observée
- La ligne bleue correspond à la moyenne théorique
ggdensity(mice, x = "weight", rug = TRUE, fill = "lightgray") +
scale_x_continuous(limits = c(15, 27)) +
stat_central_tendency(type = "mean", color = "red", linetype = "dashed") +
geom_vline(xintercept = 25, color = "blue", linetype = "dashed") +
labs(subtitle = get_test_label(stat.test, detailed = TRUE))
T-test pour échantillons indépendants
Le test t pour échantillons indépendants (ou le test t pour échantillons non appariés) est utilisé pour comparer la moyenne de deux groupes indépendants.
Par exemple, vous pourriez vouloir comparer les poids moyens des individus regroupés par sexe : les groupes d’hommes et de femmes, qui sont deux groupes non apparentés ou indépendants.
Le t-test pour échantillons indépendants se présente sous deux formes différentes:
- le test t standard de Student, qui suppose que la variance des deux groupes est égale.
- le test t de Welch, qui est moins restrictif que le test original de Student. Il s’agit du test où vous ne présumez pas que la variance est la même dans les deux groupes, ce qui donne les degrés de liberté fractionnaires suivants.
Par défaut, R calcule le test t de Weltch, qui est le plus prudent. Les deux méthodes donnent des résultats très semblables, à moins que la taille des groupes et les écarts-types ne soient très différents.
Données de démonstration
Jeu de données de démonstration : genderweight
[package datarium] contenant le poids de 40 individus (20 femmes et 20 hommes).
Charger les données et afficher quelques lignes aléatoires par groupes:
# Charger les données
data("genderweight", package = "datarium")
# Afficher un échantillon des données par groupe
set.seed(123)
genderweight %>% sample_n_by(group, size = 2)
## # A tibble: 4 x 3
## id group weight
## <fct> <fct> <dbl>
## 1 6 F 65.0
## 2 15 F 65.9
## 3 29 M 88.9
## 4 37 M 77.0
Statistiques descriptives
Calculer quelques statistiques descriptives par groupe : moyenne et sd (écart-type)
genderweight %>%
group_by(group) %>%
get_summary_stats(weight, type = "mean_sd")
## # A tibble: 2 x 5
## group variable n mean sd
## <fct> <chr> <dbl> <dbl> <dbl>
## 1 F weight 20 63.5 2.03
## 2 M weight 20 85.8 4.35
Visualisation
Visualiser les données à l’aide de box plots. Graphique du poids par groupes.
bxp <- ggboxplot(
genderweight, x = "group", y = "weight",
ylab = "Weight", xlab = "Groups", add = "jitter"
)
bxp
Hypothèses et tests préliminaires
Le test t pour échantillons indépendant assume les caractéristiques suivantes au sujet des données:
- Indépendance des observations. Chaque sujet ne doit appartenir qu’à un seul groupe. Il n’y a aucun lien entre les observations de chaque groupe.
- Aucune valeur aberrante significative dans les deux groupes
- Normalité. les données pour chaque groupe devraient être distribuées approximativement normalement.
- Homogénéité des variances. la variance de la variable-réponse devrait être égale dans chaque groupe.
Dans cette section, nous effectuerons quelques tests préliminaires pour vérifier si ces hypothèses sont respectées.
Identifier les valeurs aberrantes par groupe
genderweight %>%
group_by(group) %>%
identify_outliers(weight)
## # A tibble: 2 x 5
## group id weight is.outlier is.extreme
## <fct> <fct> <dbl> <lgl> <lgl>
## 1 F 20 68.8 TRUE FALSE
## 2 M 31 95.1 TRUE FALSE
Il n’y avait pas de valeurs extrêmes aberrantes.
Vérifier la normalité par groupes
# Calculer le test d de Shapiro-Wilk par groupes
data(genderweight, package = "datarium")
genderweight %>%
group_by(group) %>%
shapiro_test(weight)
## # A tibble: 2 x 4
## group variable statistic p
## <fct> <chr> <dbl> <dbl>
## 1 F weight 0.938 0.224
## 2 M weight 0.986 0.989
# Dessiner un qq plot par groupe
ggqqplot(genderweight, x = "weight", facet.by = "group")
D’après les résultats ci-dessus, nous pouvons conclure que les données des deux groupes sont normalement distribuées.
Vérifier l’égalité des variances
Ceci peut être fait à l’aide du test de Levene. Si les variances des groupes sont égales, la p-value doit être supérieure à 0,05.
genderweight %>% levene_test(weight ~ group)
## # A tibble: 1 x 4
## df1 df2 statistic p
## <int> <int> <dbl> <dbl>
## 1 1 38 6.12 0.0180
La p-value du test de Levene est significative, ce qui suggère qu’il existe une différence significative entre les variances des deux groupes. Par conséquent, nous utiliserons le test t de Weltch, qui ne suppose pas l’égalité des deux variances.
Calculs
Nous voulons savoir si les poids moyens sont différents d’un groupe à l’autre.
Rappelons que, par défaut, R calcule le test t de Weltch, qui est le plus prudent:
stat.test <- genderweight %>%
t_test(weight ~ group) %>%
add_significance()
stat.test
## # A tibble: 1 x 9
## .y. group1 group2 n1 n2 statistic df p p.signif
## <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <chr>
## 1 weight F M 20 20 -20.8 26.9 4.30e-18 ****
Si vous voulez supposer l’égalité des variances (test t de Student), spécifiez l’option var.equal = TRUE
:
stat.test2 <- genderweight %>%
t_test(weight ~ group, var.equal = TRUE) %>%
add_significance()
stat.test2
Le résultat est similaire au résultat d’un test pour échantillon unique. Rappelons que plus de détails peuvent être obtenus en spécifiant l’option detailed = TRUE
in the function t_test()
. La p-value de la comparaison est significative (p < 0,0001).
Taille de l’effet
d de Cohen pour le test t de Student
Cette valeur de l’effet est calculée en divisant la différence moyenne entre les groupes par l’écart-type regroupé.
La formule du d de Cohen:
d = (mean1 - mean2)/pooled.sd
, où:
pooled.sd
est l’écart-type commun des deux groupes.pooled.sd = sqrt([var1*(n1-1) + var2*(n2-1)]/[n1 + n2 -2])
;var1
etvar2
sont les variances (écart-type au carré) du groupe 1 et du groupe 2, respectivement.n1
etn2
sont les nombres d’échantillons pour les groupes 1 et 2, respectivement.mean1
etmean2
sont les moyennes de chaque groupe, respectivement.
Calculs:
genderweight %>% cohens_d(weight ~ group, var.equal = TRUE)
## # A tibble: 1 x 7
## .y. group1 group2 effsize n1 n2 magnitude
## * <chr> <chr> <chr> <dbl> <int> <int> <ord>
## 1 weight F M 6.57 20 20 large
L’ampleur de l’effet est importante, d = 6,57.
Le d de Cohen pour le test t de Welch
Le test de Welch est une variante du test t utilisé lorsque l’égalité de variance ne peut être présumée. La valeur de l’effet peut être calculée en divisant la différence moyenne entre les groupes par l’écart type “moyen”.
La formule du d de Cohen:
d = (mean1 - mean2)/sqrt((var1 + var2)/2)
, où:
mean1
etmean2
sont les moyennes de chaque groupe, respectivementvar1
etvar2
sont la variance des deux groupes.
Calculs:
genderweight %>% cohens_d(weight ~ group, var.equal = FALSE)
## # A tibble: 1 x 7
## .y. group1 group2 effsize n1 n2 magnitude
## * <chr> <chr> <chr> <dbl> <int> <int> <ord>
## 1 weight F M 6.57 20 20 large
Notez que, lorsque la taille des groupes est égale et que les variances des groupes sont homogènes, le d de Cohen pour les tests t standard de Student et de Welch sont identiques.
Rapporter
Nous pourrions rapporter le résultat comme suit:
Le poids moyen dans le groupe des femmes était de 63,5 (SD = 2,03), alors que la moyenne dans le groupe des hommes était de 85,8 (SD = 4,3). Le test t de Welch a montré que la différence était statistiquement significative, t(26.9) = -20.8, p < 0.0001, d = 6.57 ; où, t(26.9) est une notation abrégée pour une statistique t de Welch qui a 26.9 degrés de liberté.
stat.test <- stat.test %>% add_xy_position(x = "group")
bxp +
stat_pvalue_manual(stat.test, tip.length = 0) +
labs(subtitle = get_test_label(stat.test, detailed = TRUE))
T-test pour échantillons appariés
Le test t pour échantillons appariés est utilisé pour comparer les moyennes de deux groupes d’échantillons appariés. En d’autres termes, il est utilisé dans une situation où vous avez deux paires de valeurs mesurées pour les mêmes échantillons.
Par exemple, vous pouvez comparer le poids moyen de 20 souris avant et après le traitement. Les données contiennent 20 ensembles de valeurs avant traitement et 20 ensembles de valeurs après traitement provenant de la double mesure du poids d’une même souris. Dans de telles situations, le test t-test par paires peut être utilisé pour comparer les poids moyens avant et après le traitement.
Données de démonstration
Ici, nous utiliserons un jeu de données de démonstration mice2
[package datarium], qui contient le poids de 10 souris avant et après le traitement.
# Format large
data("mice2", package = "datarium")
head(mice2, 3)
## id before after
## 1 1 187 430
## 2 2 194 404
## 3 3 232 406
# Transformez en données longues :
# rassembler les valeurs de `before` (avant) et `after` (après) dans la même colonne
mice2.long <- mice2 %>%
gather(key = "group", value = "weight", before, after)
head(mice2.long, 3)
## id group weight
## 1 1 before 187
## 2 2 before 194
## 3 3 before 232
Statistiques descriptives
Calculer quelques statistiques descriptives (moyenne et sd) par groupe:
mice2.long %>%
group_by(group) %>%
get_summary_stats(weight, type = "mean_sd")
## # A tibble: 2 x 5
## group variable n mean sd
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 after weight 10 400. 30.1
## 2 before weight 10 201. 20.0
Visualisation
bxp <- ggpaired(mice2.long, x = "group", y = "weight",
order = c("before", "after"),
ylab = "Weight", xlab = "Groups")
bxp
Hypothèses et tests préliminaires
Le test t des échantillons appariés suppose les caractéristiques suivantes au sujet des données:
- les deux groupes sont appariés. Dans notre exemple, c’est le cas puisque les données ont été recueillies en mesurant deux fois le poids des mêmes souris.
- Aucune valeur aberrante significative dans la différence entre les deux groupes appariés
- Normalité. la différence des paires suit une distribution normale.
Dans cette section, nous effectuerons quelques tests préliminaires pour vérifier si ces hypothèses sont respectées.
Tout d’abord, commencez par calculer la différence entre les groupes:
mice2 <- mice2 %>% mutate(differences = before - after)
head(mice2, 3)
## id before after differences
## 1 1 187 430 -242
## 2 2 194 404 -210
## 3 3 232 406 -174
Identifier les valeurs aberrantes
mice2 %>% identify_outliers(differences)
## [1] id before after differences is.outlier is.extreme
## <0 rows> (or 0-length row.names)
Il n’y avait pas de valeurs extrêmes aberrantes.
Vérifier l’hypothèse de normalité
# Test de normalité de Shapiro-Wilk test pour les différences
mice2 %>% shapiro_test(differences)
## # A tibble: 1 x 3
## variable statistic p
## <chr> <dbl> <dbl>
## 1 differences 0.968 0.867
# QQ plot de la différence
ggqqplot(mice2, "differences")
D’après les données de sortie ci-dessus, on peut supposer que les différences sont normalement distribuées.
Calculs
Nous voulons savoir s’il y a une différence significative dans les poids moyens après le traitement ?
stat.test <- mice2.long %>%
t_test(weight ~ group, paired = TRUE) %>%
add_significance()
stat.test
## # A tibble: 1 x 9
## .y. group1 group2 n1 n2 statistic df p p.signif
## <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <chr>
## 1 weight after before 10 10 25.5 9 0.00000000104 ****
Le résultat est similaire à celui d’un test t pour échantillon unique. Encore une fois, plus de détails peuvent être obtenus en spécifiant l’option detailed = TRUE
dans la fonction t_test()
.
Taille de l’effet
La taille de l’effet d’un test t pour échantillons appariés peut être calculée en divisant la différence moyenne par l’écart-type de la différence, comme indiqué ci-dessous.
La formule de Cohen:
d = mean(D)/sd(D)
, où D
est la différence entre les valeurs des échantillons appariés.
Calculs:
mice2.long %>% cohens_d(weight ~ group, paired = TRUE)
## # A tibble: 1 x 7
## .y. group1 group2 effsize n1 n2 magnitude
## * <chr> <chr> <chr> <dbl> <int> <int> <ord>
## 1 weight after before 8.08 10 10 large
La taille de l’effet est importante, d de Cohen = 8,07.
Rapporter
Nous pourrions rapporter les résultats comme suit : Le poids moyen des souris a augmenté de façon significative après le traitement, t(9) = 25,5, p < 0,0001, d = 8,07.
stat.test <- stat.test %>% add_xy_position(x = "group")
bxp +
stat_pvalue_manual(stat.test, tip.length = 0) +
labs(subtitle = get_test_label(stat.test, detailed= TRUE))
Résumé
Ce chapitre décrit comment comparer deux moyennes dans R en utilisant le test t. Les codes R à démarrage rapide, pour calculer les différents t-tests, sont les suivants:
# Test t pour échantillon unique
mice %>% t_test(weight ~ 1, mu = 25)
# T-test pour échantillons indépendants
genderweight %>% t_test(weight ~ group)
# T-test pour échantillons appariés
mice2.long %>% t_test(weight ~ group, paired = TRUE)
Notez que, pour calculer des t-tests unilatéraux, vous pouvez spécifier l’option alternative
, dont les valeurs possibles peuvent être “greater”, “less” ou “two.sided”.
Nous expliquons également les hypothèses faites par le test t et fournissons des exemples pratiques de codes R pour vérifier si les hypothèses du test sont respectées.
Les hypothèses du test t peuvent être résumées comme suit:
- Test t pour échantillon unique:
- Aucune valeur aberrante significative dans les données
- les données doivent être normalement distribuées.
- T-test pour échantillon indépendant:
- Aucune valeur aberrante significative dans les groupes
- les deux groupes d’échantillons (A et B) comparés doivent être distribués normalement.
- les variances des deux groupes ne devraient pas être significativement différentes. Cette hypothèse n’est faite que par le test t originel de Student. Elle est relaxée dans le test t du Welch.
- T-test pour échantillons appariés:
- Aucune valeur aberrante significative dans les différences entre les groupes
- la différence des paires doit suivre une distribution normale.
Évaluer la normalité. Avec des échantillons suffisamment grands (n > 30), la violation de l’hypothèse de normalité ne devrait pas poser de problèmes majeurs (selon le théorème central limite). Cela implique que nous pouvons ignorer la distribution des données et utiliser des tests paramétriques. Cependant, par souci de logique, le test de Shapiro-Wilk peut être utilisé pour déterminer si les données montrent ou non un écart important par rapport à la normalité (voir Chapitre @ref(normalité-test-in-r)).
Évaluer l’égalité des variances. L’homogénéité des variances peut être vérifiée à l’aide du test de Levene. Notez que, par défaut, la fonction t_test()
n’assume pas l’égalité des variances ; au lieu du test t standard de Student, elle utilise le test t de Welch par défaut, qui est le plus prudent. Pour utiliser le test t de Student, définissez var.equal = TRUE
. Les deux méthodes donnent des résultats très semblables, à moins que la taille des groupes et les écarts-types ne soient très différents.
Dans les cas où les hypothèses ne sont pas respectées, des tests non paramétriques, comme le test de Wilcoxon, sont recommandés.
References
Cohen, J. 1998. Statistical Power Analysis for the Behavioral Sciences. 2nd ed. Hillsdale, NJ: Lawrence Erlbaum Associates.
Version: English
No Comments