T-test en R : à un échantillon, indépendant (Student & Welch) & apparié
Comparez deux moyennes en R — t-tests à un échantillon, indépendant (Student & Welch) et apparié, rstatix la manière moderne et base R pour les classiques, avec la p-value tracée sur le graphique — en direct dans votre navigateur
Apprenez à exécuter un t-test en R de trois manières : à un échantillon (par rapport à une moyenne connue), indépendant à deux échantillons (Student et Welch) et apparié. Utilisez rstatix t_test() pour un résultat propre et base R t.test() pour la sortie classique, vérifiez les hypothèses de normalité et d’égalité des variances, rapportez la taille d’effet Cohen’s d, et tracez-le avec une boîte à moustaches ggpubr qui affiche la p-value. Modifiez et exécutez chaque exemple en direct.
- Un t-test compare des moyennes — un échantillon par rapport à une valeur connue, ou deux groupes l’un par rapport à l’autre — et indique si la différence est statistiquement significative.
- Il existe trois formes : à un échantillon (
mu =), indépendant (deux groupes non reliés) et apparié (les mêmes sujets mesurés deux fois). Le test indépendant se décline en versions Student (variances égales) et Welch (variances inégales — la valeur par défaut, plus sûre, de R). - Utilisez
t_test()de rstatix pour un résultat propre, out.test()de base R pour l’affichage classique — les deux encapsulent les mêmes statistiques. - Vérifiez d’abord les hypothèses : la normalité (
shapiro_test()+ Q-Q plot) et, pour le test de Student, l’égalité des variances (levene_test()/var.test()). Si la normalité échoue, passez au test de Wilcoxon. - Rapportez la p-value (est-elle significative ?) et la taille d’effet Cohen’s d (de quelle ampleur ?), et visualisez le tout avec
ggpubr::ggboxplot()+stat_pvalue_manual().
Introduction
Pressé ? Aller au calculateur de t-test ↓ — collez vos propres chiffres et obtenez le résultat.
Un t-test répond à l’une des questions les plus courantes de l’analyse de données : deux moyennes diffèrent-elles, et la différence est-elle réelle ou simplement du bruit ? Il se décline en trois formes, choisies selon la structure de vos données :
| Test | Compare | Exemple |
|---|---|---|
| À un échantillon | la moyenne d’un groupe vs. une valeur connue | Le poids moyen des souris diffère-t-il de 25 g ? |
| Indépendant (non apparié) | les moyennes de deux groupes non reliés | Les hommes et les femmes diffèrent-ils en poids ? |
| Apparié | les mêmes sujets mesurés deux fois | Le poids des souris a-t-il changé avant vs. après traitement ? |
Cette leçon exécute les trois tests de la manière moderne et compatible avec le pipe de rstatix avec t_test(), montre l’équivalent classique en base R t.test(), vérifie les hypothèses qui déterminent quel test mérite confiance, rapporte la taille d’effet Cohen’s d, et visualise le résultat avec une boîte à moustaches ggpubr qui affiche la p-value sur le panneau. Chaque test utilise son jeu de données de démonstration canonique du paquet datarium — mice (à un échantillon), genderweight (indépendant) et mice2 (apparié).
Les hypothèses, en une ligne. Un t-test oppose une hypothèse nulle (les moyennes sont égales) à une alternative (elles diffèrent). Pour deux groupes : \(H_0: m_A = m_B\) vs. \(H_a: m_A \ne m_B\) (le test bilatéral par défaut). Pour tester plutôt une direction — \(m_A < m_B\) ou \(m_A > m_B\) — passez alternative = "less" ou "greater" (un test unilatéral).
Calculateur de t-test — collez vos propres données
Vous avez vos propres chiffres ? Lancez un t-test ici même — le calcul se fait dans votre navigateur, donc rien n’est envoyé à un serveur. Choisissez l’onglet correspondant à votre plan, collez vos valeurs et appuyez sur Run.
Comment l’utiliser. (1) Choisissez l’onglet : un échantillon (comparer un groupe à une valeur connue), deux groupes indépendants, ou apparié (deux mesures sur les mêmes sujets). (2) Collez vos chiffres entre les guillemets — une valeur par ligne (directement depuis une colonne Excel) ; un point décimal (.) ou une virgule décimale française (,) fonctionnent tous les deux. (3) Réglez les options, bien en vue. (4) Appuyez sur Run pour obtenir la statistique, les degrés de liberté, la p-value, l’intervalle de confiance, la taille d’effet Cohen’s d et une boîte à moustaches. Pour deux échantillons, gardez welch = TRUE sauf si les groupes ont vraiment des variances égales ; pour un échantillon, réglez mu sur la valeur de référence que vous testez.
En coulisses, le calculateur appelle run_t_test() — un petit utilitaire léger (base R + ggpubr). Vous préférez l’appel t.test() brut, étape par étape ? Il se trouve dans le tutoriel ci-dessous. Vous pouvez aussi voir / télécharger le moteur ▸ et le réutiliser dans votre propre code R.
Vous travaillez avec votre vrai jeu de données ? Ce calculateur prend les chiffres que vous collez. Pour lancer le test sur un fichier de données complet — groupé, nettoyé, avec le résultat expliqué en langage clair et un rapport enregistré et partageable — apportez vos données à Prova : the runtime is the judge.
T-test à deux échantillons indépendants
Le t-test indépendant (ou non apparié) compare les moyennes de deux groupes non reliés — chaque sujet appartient à exactement un groupe, et il n’existe aucune relation entre les observations d’un groupe à l’autre. Nous commençons ici car c’est le cas le plus courant et il nous donne le graphique vedette.
Nous utilisons le jeu de données genderweight — le weight de 40 individus, 20 femmes et 20 hommes (la colonne group, F/M). La question de recherche : le poids moyen diffère-t-il entre les deux groupes ?
library(rstatix)
set.seed(123)
data("genderweight", package = "datarium")
# a couple of random rows per group
genderweight %>% sample_n_by(group, size = 2)# A tibble: 4 × 3
id group weight
<fct> <fct> <dbl>
1 15 F 65.9
2 19 F 62.3
3 34 M 86.2
4 23 M 86.6
Résumez chaque groupe avec get_summary_stats() — l’effectif, la moyenne et l’écart-type que vous rapporterez aux côtés du test :
library(rstatix)
data("genderweight", package = "datarium")
genderweight %>%
group_by(group) %>%
get_summary_stats(weight, type = "mean_sd")# A tibble: 2 × 5
group variable n mean sd
<fct> <fct> <dbl> <dbl> <dbl>
1 F weight 20 63.5 2.03
2 M weight 20 85.8 4.35
Le poids des femmes est en moyenne d’environ 63,5 (SD 2,03) et celui des hommes d’environ 85,8 (SD 4,3) — mais regardez toujours avant de tester.
Regardez d’abord les données
ggpubr::ggboxplot() dessine les boîtes et les points dispersés pour que vous puissiez voir les deux distributions côte à côte :
library(ggpubr)
data("genderweight", package = "datarium")
ggboxplot(
genderweight, x = "group", y = "weight",
color = "group", palette = c("#3a86d4", "#8338ec"),
add = "jitter", xlab = "Group", ylab = "Weight"
)
Le groupe des hommes se situe nettement au-dessus de celui des femmes avec peu de chevauchement — mais c’est le test qui rend la différence défendable.
Student vs. Welch. Le t-test de Student suppose que les deux groupes ont des variances égales et les met en commun ; le t-test de Welch ne le fait pas — il utilise la variance propre de chaque groupe et ajuste les degrés de liberté (c’est pourquoi Welch rapporte un df fractionnaire). R utilise Welch par défaut car c’est le choix le plus sûr, et les deux donnent des résultats très similaires sauf si à la fois les tailles des groupes et les dispersions diffèrent beaucoup.
Avec rstatix (recommandé)
Par défaut, t_test(weight ~ group) exécute le test de Welch. add_significance() ajoute les étoiles de signification familières :
library(rstatix)
data("genderweight", package = "datarium")
# Welch t-test (the default — does NOT assume equal variances)
stat.test <- genderweight %>%
t_test(weight ~ group) %>%
add_significance()
stat.test# A tibble: 1 × 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 ****
Le tibble propre nomme les groupes comparés dans group1/group2, avec statistic (la valeur t), df, p et l’indicateur de signification. La p-value est très en dessous de 0,05 — les poids moyens des hommes et des femmes diffèrent significativement. Pour le tableau complet (intervalle de confiance et estimations de groupe) ajoutez detailed = TRUE :
library(rstatix)
data("genderweight", package = "datarium")
genderweight %>%
t_test(weight ~ group, detailed = TRUE)# A tibble: 1 × 15
estimate estimate1 estimate2 .y. group1 group2 n1 n2 statistic
* <dbl> <dbl> <dbl> <chr> <chr> <chr> <int> <int> <dbl>
1 -22.3 63.5 85.8 weight F M 20 20 -20.8
# ℹ 6 more variables: p <dbl>, df <dbl>, conf.low <dbl>, conf.high <dbl>,
# method <chr>, alternative <chr>
Pour exécuter à la place le test Student classique — en supposant des variances égales — ajoutez var.equal = TRUE :
library(rstatix)
data("genderweight", package = "datarium")
# Student t-test (assumes equal variances)
genderweight %>% t_test(weight ~ group, var.equal = TRUE)# A tibble: 1 × 8
.y. group1 group2 n1 n2 statistic df p
* <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl>
1 weight F M 20 20 -20.8 38 2.33e-22
Exécutez-le sur vos propres données. Chargez d’abord votre fichier — mydata <- read.csv("my-file.csv") — puis injectez-le dans le pipe avec vos propres noms de colonnes : mydata %>% t_test(outcome ~ group). La formule est toujours outcome ~ grouping_variable.
Avec base R
t.test() avec la formule outcome ~ group calcule le même test. Il utilise Welch par défaut ; mettez var.equal = TRUE pour Student :
data("genderweight", package = "datarium")
# Welch (default)
t.test(weight ~ group, data = genderweight)
Welch Two Sample t-test
data: weight by group
t = -20.791, df = 26.872, p-value < 2.2e-16
alternative hypothesis: true difference in means between group F and group M is not equal to 0
95 percent confidence interval:
-24.53135 -20.12353
sample estimates:
mean in group F mean in group M
63.49867 85.82612
Lisez la sortie : t et df sont la statistique de test et les degrés de liberté (fractionnaires, pour Welch), p-value est la signification, l’95 percent confidence interval encadre la différence des moyennes, et les deux valeurs mean sous sample estimates sont les moyennes des groupes. Les deux fonctions concordent chiffre pour chiffre — rstatix renvoie simplement un tibble propre. Récupérez des valeurs individuelles directement sur un résultat de base R avec res$p.value, res$statistic et res$conf.int.
Tracez-le avec la p-value dessus
La figure prête à publier met le résultat du test sur le graphique — add_xy_position() calcule l’emplacement du crochet, stat_pvalue_manual() le dessine, et get_test_label() affiche la ligne complète t, df, p et taille d’effet en sous-titre. C’est la figure à rapporter :
library(rstatix)
library(ggpubr)
data("genderweight", package = "datarium")
stat.test <- genderweight %>%
t_test(weight ~ group) %>%
add_significance() %>%
add_xy_position(x = "group")
ggboxplot(
genderweight, x = "group", y = "weight",
color = "group", palette = c("#3a86d4", "#8338ec"),
add = c("jitter", "mean"), xlab = "Group", ylab = "Weight"
) +
stat_pvalue_manual(stat.test, tip.length = 0) +
labs(subtitle = get_test_label(stat.test, detailed = TRUE))
La statistique t n’est qu’un rapport signal/bruit — la différence des moyennes divisée par son erreur standard :
\[t = \frac{\bar{x}_A - \bar{x}_B}{SE_d}\]
Un écart plus grand (ou une erreur standard plus petite et plus précise) donne un \(t\) plus grand, et une p-value plus petite.
Les deux versions diffèrent dans leur manière de gérer la dispersion et les degrés de liberté. Le test de Student met en commun les deux groupes en une seule variance et utilise \(df = n_A + n_B - 2\). Le test de Welch utilise la variance propre de chaque groupe et approxime \(df\) avec la formule de Satterthwaite — un nombre fractionnaire (ici ~26,9) plus petit que le \(df\) mis en commun, ce qui explique pourquoi Welch est plus conservateur.
Cohen’s d répond à une question différente — non pas la différence est-elle réelle ? mais de quelle ampleur est-elle ? C’est la différence de moyennes standardisée : l’écart entre les moyennes exprimé en unités d’écart-type, \(d = (\bar{x}_A - \bar{x}_B) / SD\). Cela la rend comparable d’une étude et d’une échelle à l’autre, contrairement à la différence brute ou à la p-value.
T-test à un échantillon
Le t-test à un échantillon compare la moyenne d’un groupe à une valeur connue ou théorique mu. La moyenne théorique provient généralement d’une étude antérieure, ou d’une référence « pourcentage du contrôle » de 100.
Nous utilisons le jeu de données mice — le weight de 10 souris — et demandons : le poids moyen diffère-t-il de 25 g ?
library(rstatix)
data("mice", package = "datarium")
mice %>% get_summary_stats(weight, type = "mean_sd")# A tibble: 1 × 4
variable n mean sd
<fct> <dbl> <dbl> <dbl>
1 weight 10 20.1 1.90
Les souris pèsent en moyenne environ 20,1 g (SD 1,94) — visiblement en dessous de 25, mais le test nous dit si cet écart est significatif compte tenu du petit échantillon.
Avec rstatix (recommandé)
Dans rstatix, un test à un échantillon s’écrit t_test(y ~ 1, mu = ...) — le ~ 1 signifie « comparer cette unique variable à une constante » :
library(rstatix)
data("mice", package = "datarium")
stat.test <- mice %>% t_test(weight ~ 1, mu = 25)
stat.test# A tibble: 1 × 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.0000200
Le tibble propre donne statistic (la valeur t), df et p. Ici p est bien en dessous de 0,05, donc le poids moyen des souris est significativement différent de 25 g. L’option detailed = TRUE ajoute l’intervalle de confiance et la moyenne observée.
Avec base R
t.test() prend le vecteur et l’argument mu, et affiche le rapport classique, plus complet :
data("mice", package = "datarium")
t.test(mice$weight, mu = 25)
One Sample t-test
data: mice$weight
t = -8.1045, df = 9, p-value = 1.995e-05
alternative hypothesis: true mean is not equal to 25
95 percent confidence interval:
18.78346 21.49654
sample estimates:
mean of x
20.14
Lisez la sortie : t et df sont la statistique de test et les degrés de liberté (df = n − 1 = 9), p-value est la signification, l’95 percent confidence interval encadre la vraie moyenne, et mean of x est la moyenne observée (~20,1). Pour tester une hypothèse unilatérale — « la moyenne est-elle inférieure à 25 ? » — ajoutez alternative = "less" (ou "greater").
Une boîte à moustaches de la variable unique, avec la valeur de référence mu = 25 tracée, montre ce que le test compare — la dispersion observée par rapport à la moyenne hypothétique :
library(rstatix)
library(ggpubr)
data("mice", package = "datarium")
stat.test <- mice %>% t_test(weight ~ 1, mu = 25)
ggboxplot(
mice$weight, width = 0.5, add = c("mean", "jitter"),
ylab = "Weight (g)", xlab = FALSE, color = "#3a86d4"
) +
geom_hline(yintercept = 25, linetype = "dashed", color = "#8338ec") +
labs(subtitle = get_test_label(stat.test, detailed = TRUE))
T-test apparié
Le t-test apparié compare deux mesures effectuées sur les mêmes sujets — avant/après, ou deux conditions sur chaque unité. Il travaille sur les différences : on calcule pour chaque sujet après − avant, puis on teste si la différence moyenne est nulle.
Nous utilisons le jeu de données mice2 — le weight de 10 souris avant et après un traitement, en format large. Un test apparié veut les deux mesures dans une seule colonne, alors remodelons-le en format long avec base R (en empilant before et after dans une seule colonne weight avec un facteur group) :
library(rstatix)
data("mice2", package = "datarium")
head(mice2, 3) id before after
1 1 187.2 429.5
2 2 194.2 404.4
3 3 231.7 405.6
# wide → long: gather the before and after values into one column
mice2.long <- data.frame(
id = factor(rep(mice2$id, times = 2)),
group = factor(rep(c("before", "after"), each = nrow(mice2)), levels = c("before", "after")),
weight = c(mice2$before, mice2$after)
)
head(mice2.long, 3) id group weight
1 1 before 187.2
2 2 before 194.2
3 3 before 231.7
library(rstatix)
data("mice2", package = "datarium")
mice2.long <- data.frame(
id = factor(rep(mice2$id, times = 2)),
group = factor(rep(c("before", "after"), each = nrow(mice2)), levels = c("before", "after")),
weight = c(mice2$before, mice2$after)
)
mice2.long %>%
group_by(group) %>%
get_summary_stats(weight, type = "mean_sd")# A tibble: 2 × 5
group variable n mean sd
<fct> <fct> <dbl> <dbl> <dbl>
1 before weight 10 201. 20.0
2 after weight 10 400. 30.1
Avec rstatix (recommandé)
Définir paired = TRUE bascule le test vers la forme appariée :
library(rstatix)
data("mice2", package = "datarium")
mice2.long <- data.frame(
id = factor(rep(mice2$id, times = 2)),
group = factor(rep(c("before", "after"), each = nrow(mice2)), levels = c("before", "after")),
weight = c(mice2$before, mice2$after)
)
stat.test <- mice2.long %>%
t_test(weight ~ group, paired = TRUE) %>%
add_significance()
stat.test# A tibble: 1 × 9
.y. group1 group2 n1 n2 statistic df p p.signif
<chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <chr>
1 weight before after 10 10 -25.5 9 0.00000000104 ****
La p-value est très en dessous de 0,05 — le poids moyen après traitement diffère significativement du poids avant. (df = n − 1 = 9, soit un de moins que le nombre de paires.)
Avec base R
L’équivalent en base R utilise la même formule avec paired = TRUE :
data("mice2", package = "datarium")
# base R pairs by position — pass the two columns as vectors (the formula
# interface does not accept paired = TRUE)
t.test(mice2$before, mice2$after, paired = TRUE)
Paired t-test
data: mice2$before and mice2$after
t = -25.546, df = 9, p-value = 1.039e-09
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
-217.1442 -181.8158
sample estimates:
mean difference
-199.48
Ici sample estimates est la moyenne des différences, et l’intervalle de confiance encadre cette différence — les deux nombres correspondent au résultat de rstatix.
Tracez-le avec la p-value dessus
ggpubr::ggpaired() est le graphique naturel pour les données appariées : il dessine les deux boîtes et relie les deux mesures de chaque sujet par une ligne, de sorte que le changement intra-sujet est visible. Ajoutez la p-value de la même façon que pour le graphique indépendant — add_xy_position() puis stat_pvalue_manual() :
library(rstatix)
library(ggpubr)
data("mice2", package = "datarium")
mice2.long <- data.frame(
id = factor(rep(mice2$id, times = 2)),
group = factor(rep(c("before", "after"), each = nrow(mice2)), levels = c("before", "after")),
weight = c(mice2$before, mice2$after)
)
stat.test <- mice2.long %>%
t_test(weight ~ group, paired = TRUE) %>%
add_significance() %>%
add_xy_position(x = "group")
ggpaired(
mice2.long, x = "group", y = "weight",
order = c("before", "after"),
color = "group", palette = c("#3a86d4", "#8338ec"),
line.color = "gray", line.size = 0.4,
xlab = "Group", ylab = "Weight"
) +
stat_pvalue_manual(stat.test, tip.length = 0) +
labs(subtitle = get_test_label(stat.test, detailed = TRUE))
Le test apparié est plus puissant que le test indépendant lorsque l’appariement est réel, car il élimine la variation d’un sujet à l’autre — chaque souris est son propre contrôle.
L’appariement est une propriété des données, pas une option que l’on choisit. N’utilisez paired = TRUE que lorsque chaque valeur du groupe 1 correspond à une valeur précise du groupe 2 (même sujet, paire appariée). L’appliquer à des groupes véritablement indépendants est une erreur qui gonfle la significativité.
Vérifiez les hypothèses
Le t-test est un test paramétrique. Au-delà de l’indépendance des observations, il suppose que les données (ou, pour le test apparié, les différences) sont approximativement normales, la version de Student suppose en outre des variances égales, et il ne devrait y avoir aucune valeur aberrante significative dans l’un ou l’autre groupe.
Avec de grands échantillons (n > 30), la normalité importe moins — le théorème central limite maintient le test valide même lorsque les données brutes s’écartent de la normale. Les vérifications ci-dessous importent surtout pour les petits échantillons (n = 10) des exemples mice/mice2.
Valeurs aberrantes
rstatix::identify_outliers() signale les valeurs extrêmes par groupe — un résultat vide (ou is.extreme tout FALSE) signifie qu’aucune valeur ne fausserait les moyennes que le test compare :
library(rstatix)
data("genderweight", package = "datarium")
genderweight %>%
group_by(group) %>%
identify_outliers(weight)# A tibble: 2 × 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 aucune valeur aberrante extrême.
Normalité — Shapiro-Wilk + Q-Q
Testez-la avec le test de Shapiro-Wilk (p > 0.05 → aucun écart significatif à la normale). Avec rstatix, shapiro_test() vérifie chaque groupe d’un coup via group_by() :
library(rstatix)
data("genderweight", package = "datarium")
genderweight %>%
group_by(group) %>%
shapiro_test(weight)# A tibble: 2 × 4
group variable statistic p
<fct> <chr> <dbl> <dbl>
1 F weight 0.938 0.224
2 M weight 0.986 0.989
Les deux p-values sont au-dessus de 0,05, donc nous ne pouvons pas rejeter la normalité. Confirmez-le avec ggpubr::ggqqplot(), qui trace un Q-Q plot — les points devraient épouser la ligne de référence à l’intérieur de la bande de confiance :
library(ggpubr)
data("genderweight", package = "datarium")
ggqqplot(genderweight, x = "weight", facet.by = "group")
Pour un test à un échantillon, vérifiez la variable directement (mice %>% shapiro_test(weight)) ; pour un test apparié, vérifiez les différences — shapiro_test() sur before − after — car ce sont les différences qui doivent être normales, pas chaque mesure brute.
Égalité des variances (pour le test de Student)
Le test de Student suppose que les deux groupes ont des variances égales. Vérifiez-la avec le test de Levene (p > 0.05 → les variances ne diffèrent pas significativement, donc Student convient) :
library(rstatix)
data("genderweight", package = "datarium")
genderweight %>% levene_test(weight ~ group)# A tibble: 1 × 4
df1 df2 statistic p
<int> <int> <dbl> <dbl>
1 1 38 6.12 0.0180
L’équivalent en base R est le F-test var.test(weight ~ group, data = genderweight). Quel que soit le verdict, Welch (la valeur par défaut) est toujours le choix le plus sûr — il reste valide que les variances correspondent ou non, ce qui est exactement la raison pour laquelle R l’utilise par défaut.
Si la normalité échoue (un shapiro_test() significatif, ou un Q-Q plot qui s’écarte de la ligne), utilisez plutôt le test non paramétrique de Wilcoxon — remplacez t_test() par wilcox_test(), la formule est identique :
genderweight %>% wilcox_test(weight ~ group)Voir la leçon sur le test de normalité pour le flux complet de vérification des hypothèses.
Rapportez la taille d’effet (Cohen’s d)
Une p-value significative vous dit que la différence est réelle ; elle ne vous dit pas quelle est son ampleur. Pour cela, rapportez Cohen’s d — la différence des moyennes exprimée en unités d’écart-type. rstatix le calcule avec cohens_d(), qui reflète l’appel à t_test() :
library(rstatix)
data("genderweight", package = "datarium")
# Effect size for the two-group comparison (Welch version)
genderweight %>% cohens_d(weight ~ group, var.equal = FALSE)# A tibble: 1 × 7
.y. group1 group2 effsize n1 n2 magnitude
* <chr> <chr> <chr> <dbl> <int> <int> <ord>
1 weight F M -6.57 20 20 large
cohens_d() reflète exactement t_test() : passez var.equal = TRUE pour la version à SD mis en commun (Student), mu = 25 pour la version à un échantillon (cohens_d(weight ~ 1, mu = 25) sur mice), ou paired = TRUE pour la version appariée (cohens_d(weight ~ group, paired = TRUE) sur mice2.long).
Les seuils conventionnels de Cohen sont 0,2 (petit), 0,5 (modéré) et 0,8 (grand) — donc le d ici correspond à un très grand effet. Associez toujours la p-value à la taille d’effet : une différence minime et triviale peut être « significative » dans un grand échantillon, tandis qu’un grand effet peut manquer la signification dans un petit. La taille d’effet a sa propre leçon dédiée — la taille de l’effet de Cohen (d) — couvrant en profondeur les variantes à un échantillon, indépendante et appariée.
Pour les petits échantillons (< 50), le Cohen’s d a tendance à surestimer. La version corrigée de Hedges (hedges_g() dans rstatix) le réduit de quelques pour cent pour compenser.
Interprétez le résultat
Lisez trois choses sur n’importe quel t-test, dans cet ordre :
- La p-value — la différence est-elle statistiquement significative (typiquement
p < 0.05) ? - La direction et l’intervalle de confiance — quel groupe est le plus élevé, et avec quelle précision (l’IC de la différence exclut-il 0) ?
- La taille d’effet (Cohen’s d) — la différence est-elle pratiquement notable, et pas seulement détectable ?
Un rapport complet se lit comme : « Le poids moyen dans le groupe des femmes était de 63,5 (SD = 2,03), contre 85,8 (SD = 4,3) dans le groupe des hommes. Un t-test de Welch à deux échantillons a montré que la différence était statistiquement significative, t(26.9) = −20.8, p < 0.0001, d = 6.57. »
Essayez en direct
Exécutez le déroulé complet sur une autre comparaison — la consommation de carburant de mtcars (mpg) selon le type de transmission (am : 0 = automatique, 1 = manuelle). Modifiez les variables ou la méthode et réexécutez ; le bac à sable démarre au premier Run.
Demandez à Prova « devrais-je utiliser un t-test apparié ou non apparié pour mes données, et la différence est-elle significative ? » — elle répond avec du code rstatix que vous pouvez exécuter sur vos propres données, puis vous aide à lire la p-value et la taille d’effet. The runtime is the judge. Demander à Prova →
Problèmes courants
t_test() ne trouve pas la fonction / l’objet. Chargez d’abord rstatix — library(rstatix) — qui fournit aussi le pipe %>% utilisé dans ces exemples ; et data("genderweight", package = "datarium") pour rendre le jeu de données disponible.
Ma p-value diffère de celle d’un collègue. Vérifiez var.equal. R (et rstatix) utilisent par défaut le test de Welch, tandis que certains manuels et d’autres logiciels utilisent par défaut le test de Student (var.equal = TRUE). Les deux diffèrent par leurs degrés de liberté (celui de Welch est fractionnaire) et donc par la p-value.
Un test apparié donne un résultat radicalement différent d’un test non apparié. C’est attendu quand l’appariement est fort — le test apparié élimine la variation d’un sujet à l’autre. Assurez-vous que paired = TRUE est correct pour votre plan : chaque valeur d’un groupe doit correspondre à une valeur précise de l’autre, et les deux colonnes doivent être dans le même ordre de sujets après le remodelage en format long.
Questions fréquentes
Oui — le calculateur de cette page réalise un t-test à un échantillon, à deux échantillons (Student ou Welch) ou apparié sur les chiffres que vous collez. Il calcule entièrement dans votre navigateur avec du vrai R, donc vos données ne sont jamais envoyées à un serveur, et il renvoie la statistique t, les degrés de liberté, la p-value, l’intervalle de confiance, la taille d’effet Cohen’s d et une boîte à moustaches — gratuit, sans inscription.
Un t-test compare des moyennes — un groupe par rapport à une valeur connue, ou deux groupes l’un par rapport à l’autre. Il vous dit si une différence observée est réelle ou simplement le genre de différence que l’on attendrait du bruit aléatoire dans votre échantillon.
Utilisez t_test() de rstatix (sortie propre) ou t.test() de base R (affichage classique). Pour deux groupes : data %>% t_test(outcome ~ group). Pour un échantillon par rapport à une valeur connue : data %>% t_test(outcome ~ 1, mu = 25). Pour des données appariées, ajoutez paired = TRUE. Les deux fonctions encapsulent les mêmes statistiques — rstatix renvoie simplement un tibble propre que vous pouvez déposer directement sur un graphique ggpubr.
Un t-test non apparié (indépendant) compare deux groupes distincts de sujets (p. ex. hommes vs. femmes). Un t-test apparié compare deux mesures sur les mêmes sujets (p. ex. le poids d’une souris avant vs. après traitement) et teste la moyenne des différences intra-sujets. N’utilisez l’apparié que lorsque chaque valeur d’un groupe est appariée à une valeur précise de l’autre ; sinon utilisez le non apparié.
Les deux sont des t-tests à deux échantillons indépendants. Le test de Student suppose que les deux groupes ont des variances égales et les met en commun ; le test de Welch ne le fait pas — il utilise la variance propre de chaque groupe et ajuste les degrés de liberté (c’est pourquoi son df est fractionnaire). R utilise Welch par défaut car c’est plus sûr — définissez var.equal = TRUE pour obtenir le test de Student. Les deux donnent des résultats très similaires sauf si les tailles des groupes et les dispersions diffèrent substantiellement.
Un test bilatéral (alternative = "two.sided", la valeur par défaut) demande seulement les moyennes diffèrent-elles ? — dans un sens ou l’autre. Un test unilatéral pose une question directionnelle : alternative = "less" teste si la moyenne du groupe A est inférieure à celle du groupe B, et alternative = "greater" si elle est supérieure. N’utilisez un test unilatéral que lorsque vous avez une véritable raison préalable d’attendre une direction (et que vous vous y engagez avant de voir les données) ; en cas de doute, conservez le test bilatéral par défaut.
Les données (ou, pour un test apparié, les différences par paires) doivent être approximativement distribuées normalement — vérifiez avec shapiro_test() et un Q-Q plot. Le test Student indépendant suppose aussi des variances égales (vérifiez avec levene_test() ou var.test()) ; le test de Welch relâche cela. Il ne devrait y avoir aucune valeur aberrante extrême (identify_outliers()). Avec des échantillons de plus de ~30, la normalité importe moins, grâce au théorème central limite.
Utilisez le test non paramétrique de Wilcoxon (Mann-Whitney pour deux groupes indépendants, rang signé pour un échantillon ou apparié) lorsque la normalité échoue — par exemple un shapiro_test() significatif, un Q-Q plot qui s’écarte de la ligne, un petit échantillon avec des valeurs aberrantes extrêmes, ou des données ordinales. Le test de Wilcoxon compare les rangs (en pratique les médianes) plutôt que les moyennes.
Testez vos connaissances
- Exécutez-le. Dans la cellule interactive ci-dessous, calculez un t-test indépendant de
weightpargroupdansgenderweight, puis ajoutezvar.equal = TRUE. La p-value change-t-elle beaucoup ? Pourquoi ? - Conceptuel. Vous avez mesuré le poids de chaque souris avant et après un traitement, sur les mêmes animaux. Quel t-test devriez-vous utiliser — et que vérifieriez-vous avant de lui faire confiance ?
La variable de groupement est group, donc la formule est weight ~ group. Le premier appel (sans var.equal) est le test de Welch ; pour le test de Student, définissez var.equal = TRUE. Pour la question 2, « les mêmes animaux mesurés deux fois » est la signature d’un plan apparié.
library(rstatix)
library(datarium)
data("genderweight", package = "datarium")
genderweight %>% t_test(weight ~ group) # Welch (default)
genderweight %>% t_test(weight ~ group, var.equal = TRUE) # Student
#> Both are highly significant (p < 0.0001); the df differs (Welch's is fractional, ~26.9).Les deux p-values sont toutes deux très en dessous de 0,05 — la différence est grande et évidente dans les deux cas. Les df de Welch et de Student diffèrent (celui de Welch est fractionnaire) parce que Welch ne met pas en commun les variances.
Pour la question 2 : utilisez un t-test apparié (paired = TRUE), car chaque valeur « après » appartient à la même souris que sa valeur « avant ». Avant de lui faire confiance, calculez les différences (après − avant) et vérifiez que celles-ci sont approximativement normales avec shapiro_test() et un Q-Q plot ; si la normalité échoue, utilisez plutôt le test de Wilcoxon des rangs signés apparié.
Conclusion
Vous savez maintenant exécuter et interpréter un t-test en R sous ses trois formes — à un échantillon (t_test(y ~ 1, mu =)), indépendant (Student vs. Welch, la valeur par défaut plus sûre de R) et apparié (paired = TRUE) — de la manière propre de rstatix et de la manière classique de base R. Vérifiez la normalité (et, pour Student, l’égalité des variances) avant de faire confiance au résultat, lisez la p-value pour la signification, et rapportez le Cohen’s d pour l’ampleur de l’effet — toujours avec la boîte à moustaches, p-value sur le panneau, sous les yeux.
Leçons connexes
- Wilcoxon test in R — l’alternative non paramétrique quand la normalité échoue. · ANOVA in R — comparer 3 groupes ou plus. · Normality test in R — la vérification d’hypothèses Shapiro-Wilk + Q-Q.
- Pour aller plus loin : Comparing Two Groups · Biostatistics
Vous préférez un livre ? Comparing Groups: Numerical Variables est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.
Prouvez que vous savez le faire. Maîtrisez toute la série Comparaison de deux groupes en R — suivez votre parcours, construisez des projets et obtenez un certificat.
Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.
dès 15 $/mois facturé annuellement
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.
Réutilisation
Citation
@online{2026,
author = {},
title = {T-test en R : à un échantillon, indépendant (Student \&
Welch) \& apparié},
date = {2026-06-23},
url = {https://www.datanovia.com/learn/biostatistics/two-groups/t-test-in-r},
langid = {fr}
}