Vous êtes sur la page 1sur 4

Tests de normalité avec R

Tests de normalité avec R


Tests abordés dans cette page : Kolmogorov-Smirnov, Lilliefors, Shapiro-Wilk, Anderson-Darling

Les tests de Kolmogorov-Smirnov et de Lilliefors

Un exemple utilisant le test de Kolmogorov-Smirnov

Un test a été étalonné sur une population A de manière que sa distribution suive une loi normale de
moyenne 13 et d'écart type 3. sur un échantillon de taille 10 issu d'une population B, on a observé les
valeurs suivantes :

8.43 8.70 11.27 12.92 13.05 13.05 13.17 13.44 13.89 18.90

Ces valeurs sont-elles compatibles avec l'hypothèse selon laquelle la variable sous-jacente est distribuée
selon une loi normale de moyenne 13 et d'écart type 3 ?

On peut utiliser la commande ks.test du package "stats" :


> X1 <- c(8.43, 8.70, 11.27, 12.92, 13.05, 13.05, 13.17, 13.44, 13.89, 18.90)
> ks.test(X1,"pnorm",mean=13, sd=3)

One-sample Kolmogorov-Smirnov testdata: X1


D = 0.2834, p-value = 0.3982
alternative hypothesis: two-sided
Warning message:
cannot compute correct p-values with ties in: ks.test(X1, "pnorm", mean = 13, sd = 3)

On peut éviter le message d'avertissement concernant les ex aequo en modifiant légèrement l'une des
valeurs 13.05 :
> X1 <- c(8.43, 8.70, 11.27, 12.92, 13.05, 13.050001, 13.17, 13.44, 13.89, 18.90)
> ks.test(X1,"pnorm",mean=13, sd=3)

One-sample Kolmogorov-Smirnov test


data: X1
D = 0.2834, p-value = 0.3326
alternative hypothesis: two-sided

On observe effectivement une valeur du niveau de significativité assez différente de la précédente.

Calcul à la main : On calcule, pour chaque valeur observée Xi, les fréquences cumulées F(X < Xi) et F(X
<= Xi).
On calcule également les fréquences cumulées théoriques aux points Xi pour la loi normale de paramètres
m=13 et s=3. On calcule enfin les écarts entre les fréquences cumulées expérimentales et les fréquences
cumulées théoriques. La valeur de D est le maximum de ces écarts :

X F(X < Xi) F(X <= Xi) Theo Ecart - Ecart +


8,43 0 0,1 0,0638 0,0638 0,0362
8,7 0,1 0,2 0,0759 0,0241 0,1241
11,27 0,2 0,3 0,2821 0,0821 0,0179
12,92 0,3 0,4 0,4894 0,1894 0,0894
13,05 0,4 0,6 0,5066 0,1066 0,0934
13,17 0,6 0,7 0,5226 0,0774 0,1774
13,44 0,7 0,8 0,5583 0,1417 0,2417
13,89 0,8 0,9 0,6166 0,1834 0,2834
18,9 0,9 1 0,9754 0,0754 0,0246

http://geai.univ-brest.fr/carpentier/2007-2008/Documents-R/normalite.html[21/04/2018 11:32:28]
Tests de normalité avec R

On retrouve ainsi D = 0.2834

Un exemple utilisant le test de Lilliefors

Sur un échantillon de taille 10, on a observé les valeurs suivantes d'une VD numérique :

8, 9, 9, 10, 10, 10, 11, 13, 14, 14.

Est-il légitime de supposer que la distribution de la VD dans la population parente suit une loi normale ?

Ici, la moyenne et l'écart type de la distribution théorique sont estimés à partir des 10 observations. Le test
de Lilliefors est donc préférable au test de Kolmogorov-Smirnov.

Ce test n'est pas disponible "en standard" avec R, mais il se trouve dans le package "nortest" :
> library(nortest)
> X2 <- c(8, 9, 9, 10, 10, 10, 11, 13, 14, 14)
> lillie.test(X2)

Lilliefors (Kolmogorov-Smirnov) normality test


data: X2
D = 0.2451, p-value = 0.0903

Calcul à la main : la statistique de test se calcule de la même façon que celle du test de Kolmogorov-
Smirnov.

Un autre exemple d'utilisation de ces deux tests

> X3 <- c(5,5.5,5.5,6,14,16,16,17)


> ks.test(X3,"pnorm",mean=mean(X3),sd=sd(X3))

One-sample Kolmogorov-Smirnov test

data: X3
D = 0.2978, p-value = 0.4771
alternative hypothesis: two-sided

Warning message:
cannot compute correct p-values with ties in: ks.test(X3, "pnorm", mean = mean(X3), sd = sd(X3))
> lillie.test(X3)

Lilliefors (Kolmogorov-Smirnov) normality test

data: X3
D = 0.2978, p-value = 0.03534

> X3 <- c(5,5.5001,5.5002,6,14,16,16.0001,17)


> ks.test(X3,"pnorm",mean=mean(X3),sd=sd(X3))

One-sample Kolmogorov-Smirnov test

data: X3
D = 0.2978, p-value = 0.399
alternative hypothesis: two-sided

On constate, comme précédemment, que le niveau de significativité indiqué pour le test de Kolmogorov-
Smirnov est très sensible à la présence d'ex aequo.

Le test de Shapiro-Wilk
On reprend l'exemple illustrant le test de Lilliefors.

Sur un échantillon de taille 10, on a observé les valeurs suivantes d'une VD numérique :

http://geai.univ-brest.fr/carpentier/2007-2008/Documents-R/normalite.html[21/04/2018 11:32:28]
Tests de normalité avec R

8, 9, 9, 10, 10, 10, 11, 13, 14, 14.

Est-il légitime de supposer que la distribution de la VD dans la population parente suit une loi normale ?

Le test de Shapiro-Wilk est disponible dans le package "stats". La fonction correspondante est shapiro.test.
> X2 <- c(8, 9, 9, 10, 10, 10, 11, 13, 14, 14)
> shapiro.test(X2)

Shapiro-Wilk normality test


data: X2
W = 0.8849, p-value = 0.1485

Le test d'Anderson-Darling
On reprend l'exemple illustrant le test de Lilliefors.

Sur un échantillon de taille 10, on a observé les valeurs suivantes d'une VD numérique :

8, 9, 9, 10, 10, 10, 11, 13, 14, 14.

Est-il légitime de supposer que la distribution de la VD dans la population parente suit une loi normale ?

Le test d'Anderson-Darling est disponible dans le package "nortest". La fonction correspondante est ad.test.
> library(nortest)
> X2 <- c(8, 9, 9, 10, 10, 10, 11, 13, 14, 14)
> ad.test(X2)

Anderson-Darling normality test


data: X2
A = 0.5347, p-value = 0.1264

Un graphique de normalité
L'écart à la normalité peut être représenté par le graphique suivant :
> qqnorm(X2,datax=TRUE)
> qqline(X2,datax=TRUE)

http://geai.univ-brest.fr/carpentier/2007-2008/Documents-R/normalite.html[21/04/2018 11:32:28]
Tests de normalité avec R

http://geai.univ-brest.fr/carpentier/2007-2008/Documents-R/normalite.html[21/04/2018 11:32:28]