14  Tests de comparaison de deux moyennes

Il existe plusieurs façons différentes de comparer la moyenne de deux échantillons pour savoir si ceux-ci proviennent de populations ayant des moyennes différentes. Nous en verrons trois dans ce chapitre, soit le test de T à deux échantillons (lorsque les variances sont égales), le test de T de Welch (lorsque les variances sont inégales) et le test de T pairé. Ce chapitre peut paraître un peu long puisqu’il présente trois tests un après l’autre, mais leur principe de fonctionnement étant le même, cela devrait demeurer relativement digeste.

14.1 Le test de T à deux échantillons

Le test de T à deux échantillons s’utilise pour comparer la moyenne de deux échantillons pour savoir si elles sont significativement différentes, lorsque la variance de ces deux échantillons est égale. On pourrait par exemple l’utiliser pour savoir si les oiseaux en milieu urbain sont en moyenne plus gros que les oiseaux en milieu naturel. On pourrait appliquer ce test avec les mêmes données qu’au Chapitre 13, c’est-à-dire par exemple si nous avions capturé 20 oiseaux en milieu urbain et mesuré leur poids, puis 40 en milieu naturel et aussi mesuré leur poids.

Étape 1 : Définir les hypothèses

Les hypothèses statistiques du test de T sont pour l’hypothèse nulle (H0) que les moyennes sont égales entre les groupes et l’hypothèse alternative (H1) est qu’il existe une différence de moyenne entre les deux groupes.

Pour notre exemple sur les oiseaux, nos hypothèses statistiques seraient donc les suivantes : \[ \begin{aligned} H_0 : \mu_{urbain} = \mu_{naturel}\\ H_1 : \mu_{urbain} \ne \mu_{naturel} \end{aligned} \]

Étape 2 : Explorer visuellement les données

Le test de T à deux échantillons comporte trois assomptions importantes. La première concerne l’égalité des variances. Avant de procéder à l’application d’un test de T à deux échantillons, il faut impérativement déterminer si les variances sont égales ou non à l’aide d’un test de F. Si les variances sont significativement différentes, on devra plutôt utiliser le test de Welch (voir Section 14.2) Comme nous venons de faire ce test au Chapitre 13, nous ne le ré-appliquerons pas ici, mais dans tous vos exercices et toutes vos analyses, vous devrez le faire !

La deuxième assomption importante du test de T à deux échantillons est que les observations sont indépendantes les unes des autres. Un cas classique où cette assomption ne serait PAS respectée serait si vous avez mesuré des individus à deux dates différentes et vous voudriez savoir si leur poids a diminué ou non. Dans ce cas, les observations ne sont pas indépendantes, puisque le même individu est mesuré plusieurs fois. Il faudrait alors appliquer le test de T pairé (voir Section 14.4).

La troisième assomption du test de T à deux échantillons est que les données proviennent d’une distribution normale. Comme le test est relativement robuste par rapport à cette assomption, on peut tolérer une certaine non-normalité. Il n’est pas nécessaire d’utiliser un test de normalité (i.e. Shapiro-Wilk), puisque beaucoup de distributions que ce test considéreraient comme non-normales seraient tout de même appropriées pour le test de T.

On peut donc se contenter d’une exploration visuelle de nos deux groupes à l’aide d’un histogramme, comme ceci :

Enfin, une fois les assomptions vérifiées, il importe aussi d’aller voir à quoi ressemble la moyenne des deux échantillons, pour se faire une idée avant de commencer, si l’on pense trouver une différence moyenne ou non entre les groupes. La façon idéale d’inspecter une différence de moyenne entre deux groupes et de tracer un diagramme à moustaches de ces données :

Au premier coup d’oeil, on voit une différence de près de 2 g entre nos deux groupes, et cette différence paraît assez claire par rapport à la variabilité pour être statistiquement significative.

Étape 3 : Calculer la statistique de test

Je vous inscris ici les formules pour que vous les ayez sous la main si vous en avez besoin un jour, mais vous n’aurez probablement jamais besoin de les calculer manuellement :

\[ T = \frac{\bar{x_1}-\bar{x_1}}{\sqrt{s^2(\frac{1}{n_1}+\frac{1}{n_2})}} \]

Où ni est le nombre d’observations, xi la moyenne de l’échantillon i et s2 est l’estimé de variance commun (pooled) calculé comme ceci : \[ s^2 = \frac{ (n_1-1)s_1^2 + (n_2-1)s_2^2 }{ n_1+n_2-2 } \]

L’important est surtout de comprendre que plus la différence entre les moyennes sera grande, plus la valeur de T sera grande aussi (en valeur absolue). À l’inverse, plus la variabilité des données sera grande, plus la statistique de T sera près de zéro. Les deux ingrédients pour trouver un test de T significatif sont donc une grande différence de moyenne entre les groupes et une petite variabilité entre les individus.

Pour notre exemple, x1 est 19,27 g et x2 est 18,03 g. La taille de nos échantillons n1 et n2 est respectivement de 40 et 20 individus et la variance de chaque groupe était de 2,10 g2 et de 0,886 g2. La valeur de notre statistique de T est donc de 4,01.

Étape 4 : Obtenir la valeur de p

Comme pour le test de T à un échantillon (voir Chapitre 12), la statistique de T calculée ici suit une distribution de T, mais avec n1+n2-2 degrés de liberté.

Pour notre exemple, les degrés de liberté sont donc de 58 et la valeur de p est de 0,00017.

Étape 5 : Rejeter ou non l’hypothèse nulle

Nous pouvons maintenant prendre notre décision statistique. Puisqu’une telle valeur de statistique de T est très rarement observée dans de telles circonstances si les moyennes des populations étaient égales (0,00017 est vraiment plus petit que 0,05), alors on peut rejeter notre hypothèse nulle d’aucune différence de moyenne entre les populations. Les moyennes des deux groupes sont significativement différentes.

Étape 6 : Citer la taille de l’effet et son intervalle de confiance

Je vous le rappelle encore une fois, il est très important, après avoir déterminé si notre test est significatif ou non de rapporter la taille de l’effet trouvé (ici la différence entre les deux moyennes) et son intervalle de confiance.

Notre taille d’effet est une simple soustraction des deux moyennes, soit 19,27 g - 18,03 g = 1,24 g.

L’intervalle de confiance de cette différence de moyenne quant à lui se calcule à l’aide de l’erreur-type de la différence et d’une valeur extraite de la distribution de T, soit :

\[ (\bar{x_1}-\bar{x_2}) \pm t_{0,05} \sqrt{s^2(\frac{1}{n_1}+\frac{1}{n_2})} \]

Encore une fois, vous n’aurez pas à calculer manuellement cet intervalle de confiance, mais comprenez que plus l’erreur-type sera grand, plus l’intervalle de confiance sera large.

Dans un rapport, vous pourriez écrire ce résultat comme ceci :

«Les oiseaux présentaient une différence significative de poids entre les milieux naturels et urbains (Test de T pour variances égales, T58 = 4,01, p = 0,00017) L’intervalle de confiance de cette différence se situait entre 0,62 et 1,87 g supplémentaires chez les oiseaux de milieu naturel (IC 95 %).»

14.2 Le test de Welch

Le test de Welch (ou le test de T de Welch ou le test de T à deux échantillons pour variance inégales) s’applique exactement comme le test de T à deux échantillons, à l’exception de la formule de la statistique de T à l’étape 3 qui serait plutôt comme ceci : \[ T = \frac{\bar{x_1}-\bar{x_2}} {\sqrt{ \frac{s^2_1}{n_1} + \frac{s^2_2}{n_2} }} \]

Autrement dit, plutôt que d’utiliser un estimé de la variance commun aux deux échantillons, on utilise chacune des deux valeurs individuellement.

Puisque les variances doivent être estimées individuellement, avec potentiellement des degrés de liberté différents pour chacune, les degrés de liberté effectifs du test doivent être calculés avec une formule un peu compliquée1, qui donnera un nombre réel plutôt qu’un entier.

Notez qu’il n’est pas incorrect de toujours utiliser le test de Welch, que nos variances soient inégales ou non. Mais le test de T à deux échantillons (i.e. pour variances égales) a plus de puissance statistique, donc plus de chances de trouver un effet significatif. Il est donc avantageux d’utiliser ce dernier lorsque les circonstances le permettent.

14.3 Labo : Le test de T à deux échantillons et le test de Welch

Pour ce laboratoire, nous tenterons de répondre à la question : est-ce que le relief de l’habitat affecte la taille des ailes chez les manchots Adélie. Pour les besoins de l’expérience, nous assumerons que les îles Torgersen et Biscoe ont des reliefs très différents, nous permettant de tester notre hypothèse.

Étape 1 :

\[ \begin{aligned} H_0 = \mu_{Torgersen} = \mu_{Biscoe}\\ H_1 = \mu_{Torgersen} \ne \mu_{Biscoe} \end{aligned} \]

Étape 2 :

Comme pour le laboratoire du Chapitre 13, nous commencerons par activer les librairies nécessaires et préparer deux mini-tableaux de données contenant uniquement les observations nécessaires pour appliquer notre test :

library(tidyverse)
── Attaching core tidyverse packages ──────────────────
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ───────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(palmerpenguins)

adelie <- 
  penguins |> 
  filter(species == "Adelie") |> 
  filter(island %in% c("Torgersen", "Biscoe")) |> 
  drop_na(flipper_length_mm)
  
torgersen <- adelie |> filter(island == "Torgersen")
biscoe <- adelie |> filter(island == "Biscoe")

D’abord effectuer un test de F

Avant de savoir quel test de T utiliser, il faut regarer si la variance est égale ou non entre nos deux échantillons, pour se faire, il faut appliquer un test de F.

Notre première étape consiste donc à explorer les données avant d’appliquer le test de F :

adelie |> 
  group_by(island) |> 
  summarize(
    n = n(),
    moyenne = mean(flipper_length_mm),
    variance = var(flipper_length_mm)
  )
# A tibble: 2 × 4
  island        n moyenne variance
  <fct>     <int>   <dbl>    <dbl>
1 Biscoe       44    189.     45.3
2 Torgersen    51    191.     38.8

Donc, on a un n raisonnable pour chacune des îles. La variance n’est pas trop différente, mais la moyenne non plus.

Il est important d’explorer aussi visuellement nos données.

biscoe |> 
  ggplot() + 
  geom_histogram(aes(x = flipper_length_mm), bins = 20)
torgersen |> 
  ggplot() + 
  geom_histogram(aes(x = flipper_length_mm), bins = 20)

Donc, les distributions sont sufisamment normales pour appliquer un test de F et un test de T.

adelie |> 
  ggplot(aes(island, flipper_length_mm)) +
  geom_boxplot()

Visuellement, on ne s’attend pas à trouver de différence de variance (la taille des boîtes et des moustaches est très semblable). Comme vu dans les résumé numérique, la taille des ailes de manchots sur Torgersen est légèrement plus grande, mais visuellement, elle ne se distingue pas particulièrement.

var.test(biscoe$flipper_length_mm, torgersen$flipper_length_mm)

    F test to compare two variances

data:  biscoe$flipper_length_mm and torgersen$flipper_length_mm
F = 1.1659, num df = 43, denom df = 50, p-value
= 0.5981
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.6545884 2.1035135
sample estimates:
ratio of variances 
          1.165856 

Comme notre valeur de p est vraiment plus grande que 0,05, on peut appliquer un test de T à deux échantillons pour variances égales : il n’y a pas de différence de variance entre les deux îles.

Étapes 3 et 4

La fonction pour effectuer le test est la même que le test de T à un échantillon, mais cette fois-ci, il faut lui fournir deux échantillons (eh oui!). Il faut aussi mentionner si on veut que le test s’applique pour des variances égales ou non, avec l’argument var.equal que l’on peut mentionner comme TRUE ou FALSE. Si on indique TRUE, R applique le test de T pour variances égales, si on indique FALSE, R applique le test de Welch.

t.test(torgersen$flipper_length_mm, biscoe$flipper_length_mm, var.equal = TRUE)

    Two Sample t-test

data:  torgersen$flipper_length_mm and biscoe$flipper_length_mm
t = 1.8042, df = 93, p-value = 0.07444
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2416318  5.0428796
sample estimates:
mean of x mean of y 
 191.1961  188.7955 

La première ligne nous informe d’abord de quel test a été utilisé. Comme la fonction t.test peut être utilisée pour plusieurs tests différents selon les arguments utilisés, vous comprenez maintenant l’utilité de cette première ligne. La ligne suivante nous rappelle les données utilisées pour le test. La troisième nous fournit la statistique de test (T) ainsi que ses degrés de liberté (df) et la valeur de p associée (ici p=0,074). La ligne suivante nous rappelle quelle est l’hypothèse alternative du test de T. Ensuite, R nous fournit l’intervalle de confiance de la différence de moyenne entre nos deux groupes, soit de -3,66 à 1,93. Autrement dit, l’intervalle de confiance de la différence n’exclut pas la valeur de zéro. Enfin, la dernière ligne nous donne la moyenne de chacun de nos groupes.

Étape 5 :

Comme la valeur de p est plus grande que le seuil de signification (0,07 vs 0,05), notre résultat n’est pas significatif. Il est relativement commun de trouver une telle différence lorsque les moyennes des deux populations sont égales

Étape 6 :

Nous aurions donc pu écrire ce résultat comme ceci : « Il n’y a pas de différence significative dans la taille des ailes des manchots Adélie entre les îles Torgersen et Biscoe (Test de T pour variance égales, T93 = 1,80, p = 0,074). L’intervalle de confiance à 95% de la différence entre les deux îles allait de -0,24 à +5,04 mm. ».

14.4 Le test de T pairé

Comme son nom le suggère, le test de T pairé est utilisé lorsque notre expérience est structurée de manière à ce que chacune des mesures dans le premier échantillon corresponde à une mesure dans le deuxième échantillon. Vous verrez aussi parfois le terme “données appariées”, ce qui est équivalent.

Ce test est approprié, par exemple, lorsque l’on fait un suivi du poids des individus dans une population, la mesure de départ de chaque individu étant le premier échantillon et la mesure finale devenant le deuxième échantillon. Il peut être aussi utile pour évaluer le résultat d’une expérience où l’on veut voir si un traitement a fonctionné ou non. On pourrait par exemple avoir mesuré le nombre d’insectes sur une série de plantes (n=22), avoir appliqué un traitement insecticide, et vérifié une semaine plus tard le nombre d’insectes présents sur chacune des plantes.

On peut donc s’imaginer, pour chacune des plantes son évolution en nombre d’insectes avant et après le traitement, un peu comme ceci :

Par contre, au moment de calculer le test, on ne s’intéresse pas directement aux valeurs mesurées avant ou après, mais plutôt à la différence entre les deux moments pour chacune des plantes. On aurait donc des valeurs comme -1, 0, -3, +1, etc. pour la différence de nombre d’insectes avant et après. Le test de T pairé regarde si la moyenne de ces différences est différente de zéro ou non. Il faut donc plutôt s’imaginer un graphique comme celui-ci lors que l’on réfléchit au test de T pairé :

On effectue donc essentiellement un test de T à un échantillon basé sur la différence avant-après.

Voyons comment appliquer ce test en se basant sur notre exemple d’insecticide.

Étape 1 : Définir les hypothèses

Comme le test de T pairé s’intéresse à la différence entre le premier et le deuxième échantillon (en pairant les données…), les hypothèses sont aussi structurées de cette façon.

L’hypothèse nulle étant que la différence moyenne est de zéro, et l’hypothèse alternative étant que cette différence est différente de zéro : \[ \begin{aligned} H_0 : \mu_0 = 0\\ H_1 : \mu_0 \ne 0 \end{aligned} \]

On utilise ici une valeur de référence de zéro par simplicité, mais notez qu’il est souvent plus intéressant d’utiliser une valeur différente, basée sur votre connaissance scientifique du phénomène à l’étude. Si on avait trouvé une étude qui disait qu’il fallait diminuer d’au moins 10 insectes par plante pour avoir un effet sur sa croissance, il aurait été beaucoup plus intéressant d’utiliser cette valeur comme référence plutôt que zéro. On aurait donc testé si l’insecticide diminue suffisamment le nombre d’insectes pour affecter la croissance de la plante.

Étape 2 : Explorer visuellement les données

La principale assomption du test de T pairé est que la distribution des différences suit une distribution normale. Il faut donc tracer l’histogramme de cette différence pour avoir une idée de la forme de la distribution. Comme nous avons tracé ce graphique à la section précédente, nous ne le retracerons pas ici. En observant rapidement le graphique, on réalise que la moyenne des différences semble bien différente de zéro. On devrait s’attendre à trouver un effet significatif du traitement insecticide, qui ferait diminuer le nombre d’insectes sur les plantes.

Étape 3 : Calculer la statistique de test

Le calcul de la statistique de test est identique à celui du test de T à un échantillon (voir Chapitre 12). Ici la moyenne des différences est de -1,91 insectes, l’écart type est de 1,34 et n=22, donc la statistique de T sera de 6,686 insectes.

Étape 4 : Obtenir la valeur de p Comme pour le test de T à un échantillon, la distribution de la statistique de T devrait suivre une distribution de T de Student avec n-1 degrés de liberté. C’est donc dans cette distribution qu’il faut aller déterminer la valeur de p. Dans notre cas, p= 0,00000012.

Étape 5 : Rejeter ou non l’hypothèse nulle

Comme observer une telle différence est très rare lorsque l’on échantillonne des données telles que stipulées avec l’hypothèse nulle (0,00000012 est vraiment plus petit que 0,05), on rejette l’hypothèse nulle d’une différence de zéro. On peut donc dire que l’insecticide a un effet significatif sur le nombre d’insectes.

Étape 6 : Citer la taille de l’effet et son intervalle de confiance.

Pour le test de T pairé, la taille de l’effet est l’ampleur de la différence entre nos deux échantillons. Ici, nous avons calculé que cette différence est en moyenne de -1,91 insectes. Avec le même calcul que pour le test de T à un échantillon, on peut calculer l’intervalle de confiance à 95 % de cette différence, qui se situera entre -2,50 et -1,31 insectes.

On peut enfin écrire notre résultat comme ceci : « L’effet moyen de l’insecticide était de -1,91 insecte par plante ± 0,59 (I.C. 95 %), ce qui en fait une différence significativement différente de zéro (t22 = 36,686, p = 0,00000012). »

Labo : Le test de T pairé

Puisque le tableau de données penguins ne contient pas de données pairées, nous allons devoir, pour cet exemple, se créer un petit tableau permettant d’étudier le gain de poids d’une espèce de bruant à la fin de l’été en préparation pour la migration. Notre question écologique étant de savoir si les bruants prennent effectivement du poids avant la migration ou non.

Nous allons donc activer nos librairies, puis créer manuellement notre tableau de données, à l’aide du code suivant :

engraissement <- data.frame(
  poids_debut_g = c(7.1, 3.0, 6.0, 4.0, 4.2),
  poids_fin_g =   c(8.2, 3.5, 5.6, 4.5, 6.1)
) |>
  mutate(difference = poids_fin_g - poids_debut_g)

engraissement
  poids_debut_g poids_fin_g difference
1           7.1         8.2        1.1
2           3.0         3.5        0.5
3           6.0         5.6       -0.4
4           4.0         4.5        0.5
5           4.2         6.1        1.9

Remarquez que dans la même étape où nous créons notre tableau de données, nous créons immédiatement une colonne de différence. Cela facilitera notre travail plus tard.

Étape 1 : \[ \begin{aligned} H_0 : \mu_{preparation} = 0 \\ H_1 : \mu_{preparation} \ne 0 \end{aligned} \]

Autrement dit, est-ce que la moyenne de gain de poids durant la préparation à la migration est différente de zéro.

Étape 2 :

Pour le test de T pairé, on peut en un seul graphique valider l’assomption de normalité de la différence, et aussi visualiser la taille de l’effet. Pour se faire, nous créons un histogramme, auquel nous ajoutons une couche de ligne verticale, permettant de voir la valeur de référence (dans notre cas, zéro) :

engraissement |>
  ggplot(aes(x = difference)) +
  geom_histogram() +
  geom_vline(xintercept = 0, color = "blue", linetype = "dashed")
`stat_bin()` using `bins = 30`. Pick better value with
`binwidth`.

On peut donc constater d’un seul coup d’oeil que nos données semblent normales (pour le peu que l’on en a) et que le poids des bruants, à une exception près, semble avoir augmenté durant la période étudiée.

Étapes 3 et 4 :

Pour calculer le test de T pairé dans R, on utilise la fonction t.test exactement comme pour le test de T à un échantillon :

t.test(engraissement$difference)

    One Sample t-test

data:  engraissement$difference
t = 1.8947, df = 4, p-value = 0.131
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 -0.3350491  1.7750491
sample estimates:
mean of x 
     0.72 

R nous mentionne qu’il a effectué un test de T à un échantillon. C’est correct, c’est ce que nous voulions. Il nous fournit ensuite les mêmes informations qu’au Chapitre 12, mais c’est à nous de les interpréter comme étant la moyenne des différences. Le test nous informe donc que la moyenne des différences de poids pendant la préparation à la migration est de 0,72 g.

Étape 5 :

La sortie de R nous informe aussi que cette différence n’est pas significative au seuil de 0,05 (p=0,131). Il important de nuancer ici le fait que bien l’on trouve une différence claire dans nos données, notre taille d’échantillon est tellement faible (n=5) qu’il serait à peu près impossible de trouver une valeur de p significative comme tel : nous manquons clairement de puissance statistique.

Étape 6 : Nous pourrions donc écrire ce résultat comme ceci : « Le gain de poids moyen des bruants en préparation de la migration était en moyenne de 0,72 g ± 1,06 (I.C. 95 %). Cette différence n’était pas significativement différente de zéro (t4=1,894, p = 0,131 ) »

Notez qu’il existe aussi une façon de calculer le test de T pairé sans calculer à l’avance une colonne de différence. Il faut à ce moment passer les deux colonnes à la fonction t.test et lui mentionner de nous calculer un test pairé :

t.test(engraissement$poids_debut_g, engraissement$poids_fin_g, paired = TRUE)

On obtient alors exactement le même résultat :


    Paired t-test

data:  engraissement$poids_debut_g and engraissement$poids_fin_g
t = -1.8947, df = 4, p-value = 0.131
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 -1.7750491  0.3350491
sample estimates:
mean difference 
          -0.72 

14.5 Récapitulatif

Si on fait un petit récapitulatif des tests vus jusqu’à présent, vous êtes maintenant en mesure de gérer les situations suivantes :

  • Pour comparer une moyenne à une valeur cible : Test de T à un échantillon
  • Pour comparer deux moyennes entre-elles : Test de T à deux échantillons ou test de Welch, selon que la variance est égale ou non.
  • Pour comparer la moyenne de données pairées : Test de T pairé
  • Pour comparer la variance de deux échantillons : Test de F.

  1. https://wikimedia.org/api/rest_v1/media/math/render/svg/2108692a7e5ce58c5bbbc3a34720411b64a1922e↩︎