Pourquoi tous les tests de normalité rejetteraient-ils l'hypothèse nulle?

12

Le test de Kolgomorov-Smirnov, le test de Shapiro, etc. rejettent tous l'hypothèse qu'une distribution est normale. Pourtant, lorsque je trace les quantiles normaux et l'histogramme, les données sont clairement normales. Peut-être parce que la puissance des tests est élevée?

La taille de l'échantillon est d'environ 650. Donc, au moins un de ces tests ne devrait-il pas échouer à rejeter l'hypothèse nulle?

Résultats:

           Kolmogorov-Smirnov    D          0.05031          Pr > D       <0.010
           Cramer-von Mises      W-Sq       0.30003          Pr > W-Sq    <0.005
           Anderson-Darling      A-Sq       1.66965          Pr > A-Sq    <0.005
           Chi-Square            Chi-Sq  3250.43596     18   Pr > Chi-Sq  <0.001
Robbie
la source
1
Bienvenue sur le site. Le pouvoir peut en effet être un problème. Pouvez-vous publier vos résultats, afin que nous puissions être plus précis?
StasK
1
Il est presque impossible d'évaluer la normalité avec beaucoup de précision en regardant un histogramme ou les quantiles. Les trois premiers de ces tests mesurent les écarts dans un graphique de probabilité (graphique qq normal), alors à quoi ressemble ce graphique?
whuber

Réponses:

13

Les tests de normalité sont une perte de temps et votre exemple illustre pourquoi. Avec de petits échantillons, le test de normalité a une faible puissance, donc les décisions sur les modèles statistiques à utiliser doivent être basées sur des connaissances a priori . Dans ces cas, le fait de ne pas rejeter le null ne prouve pas que le null soit même approximativement vrai au niveau de la population.

Lorsque vous avez de grands échantillons, les tests de normalité deviennent ridiculement puissants, mais ils ne vous disent rien que vous ne saviez pas déjà. Aucune quantité réelle n'est distribuée exactement normalement. La distribution normale n'est qu'une abstraction mathématique qui est une assez bonne approximation dans de nombreux cas. La preuve la plus simple de cela est qu'il n'y a pas de quantité réelle (du moins aucune à laquelle je puisse penser) qui pourrait prendre n'importe quel nombre réel comme valeur. Par exemple, il n'y a que tant de molécules dans l'univers. Il n'y a que tant de dollars dans la masse monétaire. La vitesse de la lumière est finie. Les ordinateurs ne peuvent stocker que des nombres d'une taille finie, donc même si quelque chose avait un support de tous les nombres réels, vous ne seriez pas en mesure de le mesurer.

Le fait est que vous saviez déjà que vos données n'étaient pas exactement distribuées normalement, mais les tests de normalité ne vous disent rien sur le caractère non normal des données. Ils ne vous donnent absolument aucune indication quant à la distribution approximative de vos données, de sorte que les méthodes d'inférence statistique qui supposent la normalité donneraient des réponses correctes. Ironiquement, les tests courants (par exemple le test T et l'ANOVA) qui supposent la normalité sont plus robustes que la non-normalité à des échantillons de grande taille.

dsimcha
la source
Suite à votre réponse, j'ai posté une question sur ce qui constitue un bon indice de non-normalité: stats.stackexchange.com/questions/16646/… Des réflexions?
Jeromy Anglim
Concernant tout dans le monde quantifié: les données discrètes ne peuvent-elles pas être distribuées normalement aussi?
xmjx
Un autre commentaire sur le problème informatique: veuillez noter que le mécanisme souvent utilisé pour stocker les nombres décimaux dans les ordinateurs a une granularité différente pour la plage des petits nombres et des grands nombres. Ainsi, la différence minimale entre les nombres que l'ordinateur est capable de stocker est plus petite pour les petits nombres et plus grande pour les grands nombres. Pour un ordinateur, 100000.1 et 100000.2 peuvent être identiques alors que 0,1 et 0,2 ne le sont pas. (Juste un exemple - dans le monde réel, ce n'est pas si mal.)
xmjx
@xmjx: Les données discrètes peuvent être distribuées approximativement normalement, ce qui signifie qu'elles sont suffisamment proches pour pratiquement n'importe quel objectif pratique. Cependant, en théorie, toute distribution discrète échouera à certains tests de normalité si la taille de l'échantillon est suffisamment grande. La distribution normale est continue et il n'y a aucun moyen de contourner cela.
dsimcha
@dsimcha Mais la distribution normale n'est qu'une fonction de densité de probabilité qui pourrait prédire le nombre d'observations dans un groupe donné de la variable discrète. Donc, je comprendrais si vous disiez "aucune variable réelle n'est exactement distribuée normalement et c'est pourquoi les tests de normalité échoueront à un moment donné". Mais pour "les données discrètes ne peuvent pas être distribuées normalement car elles ne sont pas continues", j'aimerais avoir une référence. Je suis vraiment intéressé par ce genre de choses. Ne voulant pas commencer un combat ici.
xmjx
4

Cela ne me surprend pas --- avec un échantillon suffisamment grand, tout bon test devrait rejeter l'hypothèse nulle, à moins que la distribution de génération de données ne soit vraiment (et exactement) normale.

Avec le test d'hypothèse, on est généralement intéressé à trouver un test "puissant", qui est un test qui peut trouver de très petits écarts par rapport à l'hypothèse nulle, avec le moins de données possible.

Essayez d'exécuter le test avec un sous-échantillon de taille 20, 50, 100, 200 et voyez à quelle taille les tests commencent à être rejetés. Il est facile de voir si un histogramme est symétrique et généralement en forme de cloche, mais les queues de la distribution sont plus difficiles à évaluer à l'œil nu. Peut-être qu'il y a des valeurs aberrantes dans les données qui provoquent le rejet des tests? S'il y en a, voyez ce qui se passe lorsque vous les taillez.

DavidR
la source
Merci d'avoir répondu. Le but est de tester si les résidus sont normaux. Je suppose que regarder un tracé à quantile normal et voir s'il se trouve sur y = x est le meilleur pari?
Robbie
@Robbie Si vous êtes simplement intéressé à essayer de déterminer si vos résidus sont normaux, une inspection visuelle devrait convenir. Les tests statistiques de la distribution ne sont pas vraiment nécessaires pour cela - comme cela a été noté, cela va détecter tout écart par rapport à la normalité, même celui qui n'a pas vraiment d'importance.
Fomite
@EpiGrad Je ne suis pas d'accord. Les tests de normalité ont une puissance notoirement faible. Voir ma réponse ci-dessus. Modifier d'autre part, la régression est assez robuste à la non-normalité, donc je conviens que si cela semble normal, vous êtes probablement bien à cet effet.
David J. Harris
@David J. Harris: "Puissance notoirement faible"? Pour des tailles d'échantillon de 650? C'est contraire à tout ce que j'ai lu ou vécu. Avez-vous une citation?
whuber
@ DavidJ.Harris Je pense qu'au fond, à faible puissance ou à une signification parasite en raison d'un grand échantillon, l'exercice entier n'est pas nécessaire pour un examen de routine de l'hypothèse de normalité.
Fomite
3

La cause probable est que vos données sont très légèrement non normales et que la taille de votre échantillon est suffisamment grande pour le révéler.

Si la distribution est vraiment normale, elle doit généralement passer ces tests, comme dans l'exemple R suivant où tous les tests sauf un sont réussis.

> require(nortest)
> 
> set.seed(1)
> dat <- rnorm(650,mean=100, sd=5)
> 
> ad.test(dat)

        Anderson-Darling normality test

data:  dat 
A = 0.439, p-value = 0.2924

> cvm.test(dat)

        Cramer-von Mises normality test

data:  dat 
W = 0.0882, p-value = 0.1619

> lillie.test(dat)

        Lilliefors (Kolmogorov-Smirnov) normality test

data:  dat 
D = 0.0334, p-value = 0.08196

> pearson.test(dat)

        Pearson chi-square normality test

data:  dat 
P = 37.96, p-value = 0.035

> sf.test(dat)

        Shapiro-Francia normality test

data:  dat 
W = 0.9978, p-value = 0.5186

> shapiro.test(dat)

        Shapiro-Wilk normality test

data:  dat 
W = 0.9981, p-value = 0.675

Vous voudrez peut-être faire un qqplot et si cela est assez proche d'une ligne droite, vous pouvez décider de le traiter comme étant assez proche de la normalité pour vos besoins. Cela dépend plutôt de ces objectifs.

Henri
la source
Les objectifs sont de tester pour voir si les résidus sont normaux en régression linéaire.
Robbie
1
@Robbie. Apparemment, ils ne le sont pas, mais ils peuvent être suffisamment proches pour que cela n'ait pas beaucoup d'importance. Essayez le qqplot.
Henry
Le résultat du chi carré de Pearson semble que les données ne sont pas normalement distribuées. Je dis juste. Que faire d'un tel résultat?
xmjx
@xmjx: Pas beaucoup - Si vous appliquez un critère de 0,05, alors vous ne devriez pas être surpris si vous obtenez un faux positif 5% du temps.
Henry
@Henry je sais. Ce que je veux dire: choisir un test de normalité dès le départ a une certaine probabilité d'en choisir un qui dira «significatif». Alors vaut-il mieux faire fonctionner une batterie et puis ... quoi? Moyenne? Aller avec le vote majoritaire?
xmjx
2

Je ne suis pas d'accord avec la réponse de dsimcha: "Les tests de normalité sont une perte de temps et votre exemple illustre pourquoi.". Les tests de normalité ne sont jamais une perte de temps, vous pouvez toujours apprendre de vos données. De plus, vous devez tester certaines conditions avant d'effectuer une analyse (c.-à-d. ANOVA, régression, etc.). Il est préférable de tester des tailles d'échantillon relativement grandes avec un tracé (QQplot, histogramme). Dans de tels cas, la visualisation donne beaucoup plus d'informations sur le comportement multimodal, etc.

L'ANOVA et la régression sont robustes à la non-normalité lorsqu'il s'agit de grands échantillons, mais le principal type de données qui pose problème est les échantillons de données multimodaux.

Avec un échantillon de petite taille, le test de Kolgomorov-Smirnov est la meilleure option, principalement en raison de sa sensibilité.

Jose Zubcoff
la source
1

Je vais être légèrement en désaccord avec les autres réponses publiées jusqu'à présent: ces tests de normalité ont notoirement peu de pouvoir, même avec des échantillons de taille relativement grande, du moins pour certains types d'écarts.

Voici un petit exemple. J'ai généré un mélange de deux normales dont les moyennes sont séparées par un sd entier.

set.seed(1)
reps = replicate(
  10000, 
  shapiro.test(c(rnorm(325, mean = 0), rnorm(325, mean = 1)))$p.value
)
mean(reps < .05)
[1] 0.0525

Considérant qu'il "détecterait" 5% des écarts par rapport à la normalité même si c'était vraiment normal, ce n'est pas très impressionnant.

Voici un autre exemple: j'ajoute un bruit uniforme sur une plage de la taille de deux écarts-types. Celui-ci est visiblement non normal.

set.seed(1)
reps = replicate(
  10000, 
  shapiro.test(rnorm(650) + 2 * runif(650))$p.value
)
mean(reps < .05)
[1] 0.0523

Encore une fois, une puissance extrêmement faible pour un écart assez important par rapport à la normalité.

Êtes-vous sûr de lire correctement le qqplot? Pourriez-vous le télécharger afin que nous puissions le voir?

Modifier d'autre part, la régression est assez robuste à la non-normalité, donc je conviens que l'inspection visuelle est probablement suffisante pour la plupart des objectifs.

David J. Harris
la source
3
073/2575/25