Le test de normalité de D’Agostino-Pearson

Il s’agit d’un test de normalité adapté aux variables comprenant de nombreux ex aequo.

Position du problème

Les tests classiques de normalité, tels que Kolmogorov-Smirnov, Lilliefors, Shapiro-Wilk, etc sont très sensibles à la présence d’ex aequo. Considérons par exemple une variable statistique obtenue à partir d’une échelle de Likert en 5 ou 7 points. Si on estime que l’échelle de Likert fournit une variable purement ordinale, les questions de normalité ne se posent pas, car il n’y a pas lieu de chercher une approximation de cette variable par une loi continue. Mais il n’est alors pas pertinent non plus de chercher à définir une variable donnant un score de synthèse en calculant une somme ou une moyenne de telles variables. En revanche, on peut aussi juger que l’échelle de Likert fournit une mesure relativement imprécise d’une variable continue. Ainsi :
X = 1 correspond en fait à X ≤ 1,5
X = 2 correspond en fait à 1,5 < X ≤ 2,5 etc. Dans ce cas, le problème de la normalité de X dans la population parente a un sens. Mais les tests tels que Kolmogorov-Smirnov, Lilliefors, Shapiro-Wilk, Anderson-Darling ont l’inconvénient d’être très sensibles à la présence d’ex aequo, comme le montrent les manipulations ci-dessous.

Exemple 1

X est la série statistique des réponses de 48 sujets sur une échelle de Likert en 5 points : X : 3 5 5 3 2 4 5 2 3 1 2 1 2 4 2 2 3 3 3 4 3 3 4 5 4 3 4 3 2 1 3 5 3 4 3 1 3 2 3 4 3 2 1 3 2 1 3 2 Seul le test de Kolmogorov-Smirnov (dont l’usage n’est pas véritablement correct ici) conduit à une p-value supérieure à 5%. Les autres tests concluent tous sur un défaut de normalité. >library(nortest)
> ks.test(X, »pnorm »,mean=mean(X),sd=sd(as.vector(X)))
One-sample Kolmogorov-Smirnov test
data: X
D = 0.1932, p-value = 0.05562
alternative hypothesis: two-sided
Message d’avis :
In ks.test(X, « pnorm », mean = mean(X), sd = sd(as.vector(X))) :
impossible de calculer les p-values correctes avec des ex-aequos
> lillie.test(X)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X
D = 0.1932, p-value = 0.0001105
> shapiro.test(X)
Shapiro-Wilk normality test
data: X
W = 0.914, p-value = 0.001842
> ad.test(X)
Anderson-Darling normality test
data: X
A = 1.6241, p-value = 0.0003092
En revanche, si on ajoute à chacune des 48 valeurs entières de la série statistique X une partie décimale aléatoire comprise entre -0,5 et 0,5 (X représente alors l’arrondi entier des valeurs X1 générées), ces différents tests concluent sur la normalité de la série ainsi obtenue :
> X1 <- X+runif(48)-.5 > ks.test(X1, »pnorm »,mean=mean(X1),sd=sd(as.vector(X1)))
One-sample Kolmogorov-Smirnov test
data: X1
D = 0.0709, p-value = 0.955
alternative hypothesis: two-sided
> lillie.test(X1)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X1
D = 0.0709, p-value = 0.7893

> shapiro.test(X1)
Shapiro-Wilk normality test
data: X1
W = 0.9772, p-value = 0.4677

> ad.test(X1)
Anderson-Darling normality test
data: X1
A = 0.2523, p-value = 0.7232

Exemple 2

A l’inverse, on génère une série statistique de 48 valeurs tirées d’une loi normale dont les paramètres sont ceux de la variable X ci-dessus.
> Y <- rnorm(48, mean=mean(X),sd=sd(as.vector(X))) > Y
[1] 2.3178870 3.7099003 1.4615044 1.7937996 2.8787223 3.6629975 3.0464251 2.2819286 2.6065499 3.4581155 2.8317473 4.6929409 1.0392315 4.0965538
[15] 2.7516116 2.1332957 4.1547208 2.1597656 3.3326866 0.4377083 3.6537238 3.6942626 2.6554317 3.4626125 4.3065276 3.1518447 0.4154250 3.5626645
[29] 3.2156494 0.9715125 3.9933763 2.7724458 2.8450445 2.7503986 1.0119739 4.2808468 2.5277786 3.4208558 3.6717145 2.5735135 2.6232302 3.1563150
[43] 2.6783873 1.4663685 4.7654520 1.7376890 2.8591073 4.7457353
Sans surprise, aucun des 4 tests précédents ne met en évidence de défaut de normalité de cette série.
> ks.test(Y, « pnorm »,mean=mean(Y), sd=sd(Y))
One-sample Kolmogorov-Smirnov test
data: Y
D = 0.1047, p-value = 0.6307
alternative hypothesis: two-sided
> lillie.test(Y)
Lilliefors (Kolmogorov-Smirnov) normality test
data: Y
D = 0.1047, p-value = 0.2089
> shapiro.test(Y)
Shapiro-Wilk normality test
data: Y
W = 0.9696, p-value = 0.2447
> ad.test(Y)
Anderson-Darling normality test
data: Y
A = 0.4167, p-value = 0.319
Formons alors la série des arrondis entiers des 48 valeurs précédentes.
> Y1 <- as.integer(Y+.5) > Y1
[1] 2 4 1 2 3 4 3 2 3 3 3 5 1 4 3 2 4 2 3 0 4 4 3 3 4 3 0 4 3 1 4 3 3 3 1 4 3 3 4 3 3 3 3 1 5 2 3 5
Les quatre tests précédents indiquent alors un défaut de normalité de Y1
> ks.test(Y1, « pnorm »,mean=mean(Y1), sd=sd(Y1))
One-sample Kolmogorov-Smirnov test
data: Y1
D = 0.2641, p-value = 0.002477
alternative hypothesis: two-sided
Message d’avis :
In ks.test(Y1, « pnorm », mean = mean(Y1), sd = sd(Y1)) :
impossible de calculer les p-values correctes avec des ex-aequos

> lillie.test(Y1)
Lilliefors (Kolmogorov-Smirnov) normality test
data: Y1
D = 0.2641, p-value = 4.872e-09
> shapiro.test(Y1)
Shapiro-Wilk normality test
data: Y1
W = 0.9018, p-value = 0.0007196
> ad.test(Y1)
Anderson-Darling normality test
data: Y1
A = 2.2048, p-value = 1.109e-05
N.B. Les séries statistiques utilisées dans les exemples ci-dessus sont enregistrées dans la feuille de données Dago-Ex1.csv.

Le test de normalité de D’Agostino

L’hypothèse nulle est alors la normalité de la distribution parente, l’hypothèse alternative est le défaut de normalité.La statistique de test (souvent notée K2) proposée par D’Agostino est :
Sous H0, cette statistique suit approximativement une loi du khi-2 à 2 degrés de liberté.
Une critique faite au test de D’Agostino : les statistiques et ne sont pas indépendantes. La loi suivie par la statistique de D’Agostino n’est donc qu’approximativement un khi-2.Pour appliquer ce test, on exige généralement que l’effectif de l’échantillon soit supérieur ou égal à 20.Les différents calculs décrits ci-dessus sont réalisés, pour la série statistique X et pour deux autres séries données par Sheskin, dans le classeur Excel Dagostino.xls .Le test de normalité de D’Agostino avec le package fBasics de R.Le test de D’Agostino est disponible dans le package fBasics de R. Ce test, appliqué aux séries X, X1, Y, Y1 précédentes, produit les résultats suivants. X est la série de valeurs entières comprises entre 1 et 5 fournies par une échelle de Likert soumise à 48 sujets.
> library(fBasics)
> dagoTest(X)
Title:
D’Agostino Normality Test
Test Results:
STATISTIC:
Chi2 | Omnibus: 0.8705
Z3 | Skewness: 0.3799
Z4 | Kurtosis: -0.8521
P VALUE:
Omnibus Test: 0.6471
Skewness Test: 0.704
Kurtosis Test: 0.3941
Description:
Wed Dec 7 17:59:15 2011 by user:
Ainsi, la procédure calcule les statistiques sur l’asymétrie et l’aplatissement (nommées ici Z3 et Z4), puis la statistique de D’Agostino, nommée Chi2 omnibus.
On voit que, contrairement aux tests utilisés en introduction, le test de D’Agostino permet de conclure à la normalité de la distribution parente de l’échantillon.
Pour la série X1, obtenue en introduisant des décimales aléatoires à la série X, on obtient :
> dagoTest(X1)
Title:
D’Agostino Normality Test
Test Results:
STATISTIC:
Chi2 | Omnibus: 1.7505
Z3 | Skewness: -0.2867
Z4 | Kurtosis: -1.2916
P VALUE:
Omnibus Test: 0.4168
Skewness Test: 0.7743
Kurtosis Test: 0.1965
Description:
Wed Dec 7 18:00:27 2011 by user:
La normalité est aussi acceptée, en accord cette fois avec les autres tests de normalité.
La série Y est une série de 48 valeurs aléatoires générées selon une loi normale. Sans surprise, le test de D’Agostino conclut sur la normalité de cette série :
> library(fBasics)
> dagoTest(Y)
Title:
D’Agostino Normality Test
Test Results:
STATISTIC:
Chi2 | Omnibus: 1.5632

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

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