RStatistiqueTests d'hypothèses

Test t de Student avec R

Dans un précédent billet, un test de Student a été utilisé pour vérifier que le niveau de présence d’un polluant était en moyenne plus élevé dans une zone de l’agglomération de Tours que dans une autre. L’analyse a été menée directement avec les fonctions statistiques SQL d’Oracle 12c.

Dans ce billet, nous allons reproduire les mêmes opérations en utilisant R. Les étapes sont très similaires.

Chargement des données

> air <- read.csv2("C:/RTI/Stats/lig-air-derniere-semaine.csv", dec=".")  
> names(air) <- c("Date","Bruyere","Pompidou") 
> summary(air)
               Date        Bruyere         Pompidou    
 19/05/2015 17:00:  1   Min.   :-0.20   Min.   : 1.80  
 19/05/2015 18:00:  1   1st Qu.: 6.95   1st Qu.: 9.10  
 19/05/2015 19:00:  1   Median :10.30   Median :12.60  
 19/05/2015 20:00:  1   Mean   :10.76   Mean   :12.77  
 19/05/2015 21:00:  1   3rd Qu.:14.15   3rd Qu.:16.70  
 19/05/2015 22:00:  1   Max.   :24.30   Max.   :28.80  
 (Other)         :160                   NA's   :1      
>

Vérification des conditions d’application du test de Student

  • Normalité des échantillons

Les capacités graphiques de R permettent d’utiliser la technique de la droite de Henry pour estimer visuellement si la distribution des échantillons suit approximativement une loi normale:

> par(mfrow=c(2,1))
> qqnorm(air[,2], main="Bruyere");qqline(air[,2]);
> qqnorm(air[,3], main="Pompidou");qqline(air[,3]);
>

droite-de-Henry

On voit bien ici que sur une échelle Gausso-Arithmétique, les points sont globalement alignés.

Néanmoins, à l’instar de ce que nous avions réalisé en SQL, on peut aussi réaliser les tests de Shapiro-Wilk et Kolmogorov-Smirnov pour valider l’hypothèse de normalité:

> shapiro.test(air[,3])

	Shapiro-Wilk normality test

data:  air[, 3]
W = 0.9889, p-value = 0.2197

>

On retrouve les mêmes valeurs W et p que lors du test mené sous Oracle.

L’utilisation du test de Kolmogorov-Smirnov sous R pour valider la normalité nécessite une opération de centrage/réduction des valeurs étudiées (dans la mesure ou pnorm correspond à une loi normale centrée-réduite):

> ks.test((air[,2]-mean(air[,2]))/sd(air[,2]), "pnorm")

	One-sample Kolmogorov-Smirnov test

data:  (air[, 2] - mean(air[, 2]))/sd(air[, 2])
D = 0.0834, p-value = 0.198
alternative hypothesis: two-sided

Warning message:
In ks.test((air[, 2] - mean(air[, 2]))/sd(air[, 2]), "pnorm") :
  aucun ex-aequo ne devrait être présent pour le test de Kolmogorov-Smirnov
>

On retrouve à nouveau les mêmes valeurs D et p que lors du test mené sous Oracle.

  • Homoscédasticité

On réalise un test de Fisher:

> var.test(air[,2],air[,3])

	F test to compare two variances

data:  air[, 2] and air[, 3]
F = 0.9494, num df = 165, denom df = 164, p-value = 0.7393
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.6985702 1.2900302
sample estimates:
ratio of variances 
          0.949372 

>

Les valeurs W et p correspondent au test mené sous Oracle.

Réalisation du test de Student

Finalement, le test t de Student est réalisé (sans l’option var.equal=TRUE, c’est un test de Welch qui est réalisé).

L’argument alternative= »less » permet d’indiquer qu’il s’agit d’un test unilatéral avec un premier vecteur d’espérance inférieure au second.

> t.test(air[,2], air[,3], var.equal=TRUE, alternative="less")

	Two Sample t-test

data:  air[, 2] and air[, 3]
t = -3.5688, df = 329, p-value = 0.000206
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
      -Inf -1.079376
sample estimates:
mean of x mean of y 
 10.75904  12.76606 

>

Là encore, on retrouve précisément les mêmes valeurs que lors de l’analyse menée sous Oracle.

2 réflexions sur “Test t de Student avec R

  • Birba Bali Jean-Jacques

    Salut !
    j’ai également fait le ks.test sous R mais je me suis interrogé
    Comment dois-je interpréter le Warning message du ks.test ?
    Dois-je conclure qu’il est sans importance ?
    Dois-je refaire le test en traitant les ex-æquo? si oui, comment ?
    Existe-t-il un test alternatif pour la prise en compte des ex-æquo ?
    Merci
    Cordialement

    Répondre
    • rtiranAuteur de l’article

      Bonjour,

      effectivement, l’implémentation du test de Kolmogorov-Smirnov sous R est sensible à la présence d’ex-aequos (?ks.test):

      « The presence of ties always generates a warning, since continuous distributions do not generate them. If the ties arose from rounding the tests may be approximately valid, but even modest amounts of rounding can have a significant effect on the calculated statistic. »

      Dans le cas présent, mon objectif était de valider que les valeurs obtenues avec R étaient similaires à celles renvoyées par DBMS_STAT_FUNCS.NORMAL_DIST_FIT. C’était bien le cas, j’ai donc ignoré le message d’avertissement. En contexte opérationnel, il vaudrait sans doute mieux recourir à une alternative comme le test de Shapiro-Wilk (utilisé aussi dans le billet).

      A+
      Raphaël

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *