Tests de normalité incohérents: Kolmogorov-Smirnov vs Shapiro-Wilk

8

J'examine actuellement certaines données produites par une simulation MC que j'ai écrite - je m'attends à ce que les valeurs soient normalement distribuées. Naturellement, j'ai tracé un histogramme et il semble raisonnable (je suppose?):

[En haut à gauche: histogramme avec dist.pdf(), en haut à droite: histogramme cumulatif avec dist.cdf(), en bas: tracé QQ, datavs dist]

J'ai alors décidé d'approfondir cette question avec des tests statistiques. (Notez que dist = stats.norm(loc=np.mean(data), scale=np.std(data)).) Ce que j'ai fait et la sortie que j'ai obtenue était la suivante:

  1. Test de Kolmogorov-Smirnov:

    scipy.stats.kstest(data, 'norm', args=(data_avg, data_sig))
    KstestResult(statistic=0.050096921447209564, pvalue=0.20206939857573536)
    
  2. Test de Shapiro-Wilk:

    scipy.stats.shapiro(dat)
    (0.9810476899147034, 1.3054057490080595e-05)
    # where the first value is the test statistic and the second one is the p-value.
    
  3. QQ-plot:

    stats.probplot(dat, dist=dist)

Mes conclusions en seraient les suivantes:

  • en regardant l'histogramme et l'histogramme cumulatif, je suppose certainement une distribution normale

  • il en va de même après avoir regardé l'intrigue QQ (cela s'améliore-t-il jamais?)

  • le test KS dit: «oui, c'est une distribution normale»

Ma confusion est: le test SW dit qu'il n'est pas normalement distribué (valeur p bien plus petite que la signification alpha=0.05, et l'hypothèse initiale était une distribution normale). Je ne comprends pas, est-ce que quelqu'un a une meilleure interprétation? Ai-je merdé à un moment donné?

rammelmueller
la source
5
Les QQplots pour la normalité peuvent être meilleurs que cela: essayez de tracer des normales aléatoires de la même taille d'échantillon pour obtenir une référence. Vous avez une légère non-normalité, comme l'indique la courbure systématique sur le QQplot. Les histogrammes et les diagrammes de distribution cumulative sont moins utiles pour un travail précis. Je ne privilégierais pas KS ici; il a tendance à être plus sensible au milieu d'une distribution que dans les queues, ce qui est l'inverse de ce dont vous avez besoin. SW est un test et ne mesure pas (ne peut pas!) À quel point la non-normalité est problématique.
Nick Cox
5
@Nick Cette application de KS n'est pas valide, car elle compare les données à une distribution normale avec des paramètres déterminés par les données : elle a besoin de la version Lilliefors. (Je sais que vous le savez, mais vous semblez avoir ignoré cette erreur.) Par conséquent, sa valeur p est trop élevée.
whuber
4
@ Nick, j'ai présumé que l'application était erronée, sur la base de deux éléments de preuve: (1) le nom de la fonction fait référence à KS et (2) il n'y a aucun moyen dans l' argsargument de révéler si les paramètres ont été dérivés des données ou non. La documentation n'est pas claire , mais son absence de mention de ces distinctions suggère fortement qu'elle n'effectue pas le test de Lilliefors. Ce test est décrit, avec un exemple de code, sur stackoverflow.com/a/22135929/844723 .
whuber
1
Ah! C'est quelque chose que j'ai trouvé louche mais je n'étais pas au courant de cette méthode - je vais changer cela tout de suite. Merci d'avoir souligné @whuber!
rammelmueller
2
@Nick J'adore le test KS pour plusieurs raisons: sa simplicité, sa connexion directe à l'intrigue QQ, sa flexibilité et sa puissance. Je soutiens que chaque test statistique peut être visualisé et (presque) chaque visualisation suggère un test correspondant - et c'est l'un des meilleurs exemples de cette thèse (surtout si l'on trace les résidus dans un tracé QQ, qui est visuellement plus puissant) . Bien que j'aie implémenté de nombreux autres tests GoF comme SW et SF et AD, KS a toujours été mon test de référence pour les occasions (relativement rares) où un test formel de distribution était nécessaire.
whuber

Réponses:

6

Il existe d'innombrables façons dont une distribution peut différer d'une distribution normale. Aucun test n'a pu les capturer tous. Par conséquent, chaque test diffère dans la façon dont il vérifie si votre distribution correspond à la normale. Par exemple, le test KS examine le quantile où votre fonction de distribution cumulative empirique diffère au maximum de la fonction de distribution cumulative théorique de la normale. C'est souvent quelque part au milieu de la distribution, ce qui n'est généralement pas le cas pour les asymétries. Le test SW se concentre sur les queues, ce qui est généralement le cas si les distributions sont similaires. En conséquence, le SW est généralement préféré. De plus, le test KW n'est pas valide si vous utilisez des paramètres de distribution estimés à partir de votre échantillon (voir:Quelle est la différence entre le test de normalité de Shapiro-Wilk et le test de normalité de Kolmogorov-Smirnov? ). Vous devez utiliser le SW ici.

Mais les graphiques sont généralement recommandés et les tests ne le sont pas (voir: Les tests de normalité sont-ils «essentiellement inutiles»? ). Vous pouvez voir dans toutes vos parcelles que vous avez une queue droite lourde et une queue gauche légère par rapport à une vraie normale. Autrement dit, vous avez un peu d'inclinaison droite.

gung - Réintégrer Monica
la source
2

Vous ne pouvez pas choisir les tests de normalité en fonction des résultats. Dans ce cas, vous allez soit avec le rejet dans tout test effectué, soit vous ne les utilisez pas du tout. Le test KS n'est pas très puissant, ce n'est pas un test de normalité "spécialisé". Si quelque chose SW est probablement plus fiable dans ce cas.

Pour moi, votre intrigue QQ a des signes de grosse queue droite ou de biais vers la gauche, ou les deux. Je suggérerais d'utiliser l'outil de Tukey pour étudier le gras des queues. Cela vous donnera une indication de la façon dont une distribution est comme normale ou Cauchy.

Aksakal
la source
Comment concluez-vous des parcelles QQ à l'adiposité des queues? Et: quelle distribution proposeriez-vous?
rammelmueller
1
@rammelmuller, les queues plus grasses montreraient une courbe en forme de s où la gauche se penche vers la droite et la droite se courbe vers le haut. Dans votre cas, la gauche se courbe également, ce qui pourrait être un signe de gauche.
Aksakal
Merci d'avoir signalé l'outil, je vais l'examiner. Par souci d'exhaustivité: j'ai d'autres ensembles de données et les résultats sont parfois légèrement différents: la queue supérieure du graphique QQ varie, mais la queue inférieure est toujours un peu trop haute - un signe d'asymétrie?
rammelmueller
1
Je pense que vous devez vous demander à quel point le test d'hypothèse de normalité est important pour vous, comme l'a suggéré @NickCox. Pourquoi testez-vous en premier lieu? Une queue courte vers le haut et une descente à long terme pourraient être le signe d'une queue courte. Plus important encore, cela peut être sans conséquence pour vous
Aksakal
1
Je suis conscient que je pourrais être décapité après cette déclaration, mais je vais ici: j'ai besoin que mes données soient "raisonnablement gaussiennes" - s'il y avait quelque chose de très louche, c'est-à-dire des queues extrêmement grasses ou une asymétrie extrême, alors je devrais chasser pour certaines questions fondamentales. Cela ne semble pas être le cas et le projet va bien. La raison de la question ici était plus de vérifier si je ne me trompe pas complètement (c'est-à-dire interpréter les résultats et autres)
rammelmueller