Bonnes pratiques du test de Student dans R : Comparaison de moyennes et conditions d'application

 


Conditions d’applications du test de Student

Le test de Student est généralement utilisé pour comparer les moyennes de deux groupes d’échantillons independents ou appariés. C’est un test dit paramétrique car il dépend de la distribution des données. Il n’est donc applicable que dans certaines conditions.

Avant de faire le test de Student, il faut s’assurer que les deux groupes d’échantillons à comparer suivent des lois normales et que leurs variances sont homogènes (homocédacité).

Que faire lorsque les conditions ne sont pas remplies?

Lorsque les échantillons à comparer ne sont pas distribués selon la loi normale, un test de type wilcoxon est préconisé. Le test de wilcoxon est un test non paramétrique qui ne dépend pas de la distribution des échantillons.

D’autres parts, lorsque les deux échantillons suivent la loi normale mais cette fois-ci de variances différentes, le test t de Welch peut être utilisé.

Objectif

L’objectif de cet article est de vous montrer comment faire le test de Student avec R en respectant bien les conditions d’application du test. Pour cela nous allons utiliser une fonction personnalisée décrite ci-après. Il s’agit de la fonction rquery.t.test().

Fonction rquery.t.test

Cette fonction est une amélioration de la fonction t.test() de base de R. Elle permet de faire le test de Student pour échantillon unique ainsi que le test de Student de comparaison de moyennes de deux séries indépendentes ou appariées. Son avantage par rapport à la fonction t.test() de R est qu’elle vérifie automatiquement la distribution et l’homogénéité des variances des échantillons à comparer.

Avant de calculer la statistique t de Student, la fonction rquery.t.test effectue les étapes ci-dessous:

  1. Tout d’abord, le test de Shapiro-Wilk est utilisé pour effectuer un test de normalité. Si les échantillons ne sont pas distribués selon une loi normale, la fonction rquery.t.test vous averti et vous suggère de de faire un test de Wilcoxon.

  2. Un test de comparaison de variances est également fait automatiquement :
  • Si les variances sont considérées égales : le test de Student classique est effectué
  • Si les variances sont significativement différentes : le test t de Welch est appliqué.

Le code R de la fonction est la suivante :

#++++++++++++++++++++++++
#rquery.t.test
#++++++++++++++++++++++++
# x : un vecteur de type numeric
# y : Un vecteur de type numeric (optionnel)
# paired : Indique si vous voulez faire
  # un test de Student apparié ou non
# ... : D'autres arguments à passer à la fonction basique t.test() de R

# 1. Le test de normalité de Shapiro est utilisé
# 2. Le test F de comparaison des variances est utilisé
  # pour vérifier l'égalité des variances
  #Si les variances sont différentes le test t de Welch est utilisé 
rquery.t.test<-function(x, y = NULL, paired = FALSE, ...)
{
  # 1. Test de normalité des échantillons
  shapiro.px<-signif(shapiro.test(x)$p.value,4)
  if(shapiro.px < 0.05)
    warning("x is not normally distributed :",
            " Shapiro test p-value = ", shapiro.px, 
            ".\n Use a non parametric test like wilcoxon test.")
  
  if(!is.null(y)){
    shapiro.py<-signif(shapiro.test(y)$p.value,4)
    if(shapiro.py < 0.05)
      warning("y is not normally distributed :",
              " Shapiro test p-value = ", shapiro.py, 
              ".\n Use a non parametric test like wilcoxon test.")
    
    # 2. Test de comparaison des variances
    var.equal=FALSE # by default
    if(!paired & var.test(x,y)$p.value>=0.05) var.equal=TRUE
  }
  
  # 3. Test t de Student
  res <- t.test(x, y, paired=paired, var.equal=var.equal, ...)
  return(res)
}

Le résultat de la fonction rquery.t.test() est identique à celle donnée par la fonction native t.test de R. Il contient, entre autres, les éléments suivants :

  • statistic : La valeur de la statistique t
  • parameter : Le degré de liberté
  • p.value : p-value du test
    Pour plus détails voir le chapitre : test de student avec R.

Test de Student pour échantillon unique : Comparaison d’une moyenne observée à une moyenne théorique

rquery.t.test(1:10)

    One Sample t-test

data:  x
t = 5.745, df = 9, p-value = 0.0002782
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 3.334 7.666
sample estimates:
mean of x 
      5.5 

Test de Student non apparié : Comparaison de moyennes de deux groupes d’échantillons indépendents

Cas 1 - Les deux groupes d’échantillons suivent des lois normales de variances égales:

rquery.t.test(1:10, 7:20)

    Two Sample t-test

data:  x and y
t = -5.147, df = 22, p-value = 3.691e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -11.223  -4.777
sample estimates:
mean of x mean of y 
      5.5      13.5 

Le test de Student classique est utilisé automatiquement.

Cas 2 - Les échantillons suivent des lois normales mais de variances différentes:

x<-1:10
y<-seq(from=100, to=1000, by=100)
rquery.t.test(x, y)

    Welch Two Sample t-test

data:  x and y
t = -5.687, df = 9.002, p-value = 0.000299
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -761.1 -327.9
sample estimates:
mean of x mean of y 
      5.5     550.0 

Le test t de Welch est utilisé automatiquement.

Cas 3 - Les échantillons ne sont pas distribués selon une loi normale:

x<-c(1:10, 50, 200)
y<-c(7:20)
rquery.t.test(x, y)
Warning: x is not normally distributed : Shapiro test p-value = 9.672e-06.
 Use a non parametric test like wilcoxon test.

    Welch Two Sample t-test

data:  x and y
t = 0.7287, df = 11.1, p-value = 0.4813
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -24.03  47.87
sample estimates:
mean of x mean of y 
    25.42     13.50 

Un message d’avertissement est affiché et la fonction rquery.t.test vous suggère de faire un test non-paramétrique de type Wilcoxon.

Test de Student apparié : Compararaison de moyennes de deux séries dependantes

x<-rnorm(10, mean=10, sd=2)
y<-rnorm(10, mean=50, sd=3)
rquery.t.test(x, y, paired=TRUE)

    Paired t-test

data:  x and y
t = -52.98, df = 9, p-value = 1.529e-12
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -42.39 -38.92
sample estimates:
mean of the differences 
                 -40.65 

Test de Student en ligne


Noter qu’un logiciel web est disponible ici pour faire le test de Student en ligne sans aucune installation.


Infos

Cette analyse a été faite avec R (ver. 3.1.0).

 
Cette page a été vue 73 fois
Licence - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions
Licence Creative Commons