Est-il utile de tester la normalité avec un échantillon de très petite taille (par exemple, n = 6)?


26

J'ai un échantillon de 6. Dans ce cas, est-il judicieux de tester la normalité en utilisant le test de Kolmogorov-Smirnov? J'ai utilisé SPSS. J'ai un très petit échantillon car il faut du temps pour obtenir chacun. Si cela n'a pas de sens, combien d'échantillons est le nombre le plus bas qui a du sens à tester?

Remarque: j'ai fait une expérience liée au code source. L'échantillon est le temps passé à coder dans une version du logiciel (version A) En fait, j'ai une autre taille d'échantillon de 6 qui est le temps passé à coder dans une autre version du logiciel (version B)

Je voudrais faire des tests d'hypothèse en utilisant un test t à un échantillon pour tester si le temps passé dans la version de code A est différent du temps passé dans la version de code B ou non (c'est mon H1). La condition préalable du test t à un échantillon est que les données à tester doivent être normalement distribuées. C'est pourquoi je dois tester la normalité.


6
Pour ma part, j'ai du mal à imaginer un contexte dans lequel n = 6 et la normalité serait une hypothèse à tester. Je crains que ce soit le cas d'un utilisateur inexpérimenté effectuant des tests d'hypothèses multiples (exécutez une régression puis testez la normalité des résidus) et que nous traitons les symptômes mais en ignorant les squelettes dans le placard, pour ainsi dire.
user603

3
@user Il est injuste de spéculer sur le questionneur. Abordons la question, d'accord? Supposons donc que vous prévoyez de calculer une limite de prédiction supérieure pour une valeur qui sera utilisée pour prendre une décision coûteuse. La valeur du PL sera sensible aux hypothèses de normalité. Vous êtes presque sûr que le processus de génération de données n'est pas normal, mais les données sont coûteuses et longues à générer. Des expériences précédentes suggèrent que sera suffisamment puissant pour rejeter la normalité. (Je viens de décrire un cadre standard pour les programmes de surveillance des eaux souterraines aux États-Unis.)n=6
whuber

3
User603 (concernant votre premier commentaire): Je voudrais souligner que @Joris n'a pas fourni de réponse, et son commentaire n'est accompagné d'aucune justification. Si un «non» catégorique est une réponse générale valable à cette question, voyons-la comme telle, avec un argument à l'appui, afin qu'elle puisse être évaluée de haut en bas par la communauté.
whuber

2
@whuber: J'ai ajouté un argument pour le "non" catégorique.
Joris Meys

1
@Joris Merci! C'est utile et éclairant.
whuber

Réponses:


38

Oui.

Tous les tests d'hypothèse ont deux propriétés saillantes : leur taille (ou "niveau de signification"), un nombre qui est directement lié à la confiance et aux taux de faux positifs attendus, et leur puissance, qui exprime le risque de faux négatifs. Lorsque les tailles d'échantillon sont petites et que vous continuez à insister sur une petite taille (confiance élevée), la puissance empire. Cela signifie que les tests sur petits échantillons ne peuvent généralement pas détecter de différences petites ou modérées. Mais ils sont toujours significatifs .

Le test KS évalue si l'échantillon semble provenir d'une distribution normale. Un échantillon de six valeurs devra en effet sembler très inhabituel pour échouer à ce test. Mais si c'est le cas, vous pouvez interpréter ce rejet de la valeur nulle exactement comme vous l'interpréteriez avec des tailles d'échantillon plus élevées. En revanche, si le test ne parvient pas à rejeter l'hypothèse nulle, cela vous en dit peu, en raison du taux de faux négatifs élevé. En particulier, il serait relativement risqué d'agir comme si la distribution sous-jacente était normale.

Une dernière chose à surveiller ici: certains logiciels utilisent des approximations pour calculer les valeurs de p à partir des statistiques de test. Souvent, ces approximations fonctionnent bien pour les grands échantillons mais agissent mal pour les très petits échantillons. Dans ce cas, vous ne pouvez pas vous fier à ce que la valeur p ait été correctement calculée, ce qui signifie que vous ne pouvez pas être sûr que la taille de test souhaitée a été atteinte. Pour plus de détails, consultez la documentation de votre logiciel.

Quelques conseils: Le test KS est beaucoup moins puissant pour tester la normalité que d'autres tests spécialement conçus à cet effet. Le meilleur d'entre eux est probablement le test de Shapiro-Wilk , mais d'autres couramment utilisés et presque aussi puissants sont le Shapiro-Francia et Anderson-Darling .

Ce graphique montre la distribution de la statistique du test de Kolmogorov-Smirnov dans 10 000 échantillons de six variables normalement réparties:

Histogramme de la statistique KS

Sur la base de 100 000 échantillons supplémentaires, le 95e centile supérieur (qui estime la valeur critique de cette statistique pour un test de taille ) est 0,520. Un exemple d'échantillon qui réussit ce test est l'ensemble de donnéesα=5%

0.000, 0.001, 0.002, 1.000, 1.001, 1000000

La statistique de test est de 0,5 (ce qui est inférieur à la valeur critique). Un tel échantillon serait rejeté en utilisant les autres tests de normalité.


10
Je pense que toute distribution qui donne un sig. le résultat avec N = 6 sera si non normal qu'il passera l'IOTT avec brio - c'est le test de traumatisme interoculaire. Cela vous frappe entre les yeux.
Peter Flom - Réintègre Monica

2
@Peter Si vous deviez reformuler ce commentaire, ce serait correct. Après tout, de nombreux échantillons d'une distribution normale sembleront parfaitement normaux, donc clairement "tout" est un quantificateur trop fort. Ce que vous vouliez dire, c'est qu'il y a de fortes chances qu'un échantillon aléatoire avec soit clairement non normal lorsqu'il est tracé de manière raisonnable ( par exemple , un diagramme de probabilité) mais ne sera pas rejeté par ce test. N = 6N=6N=6
whuber

Juste pour le plaisir, j'ai essayé set.seed (3833782) x <- runif (6) ks.test (x, pnorm) C'était significatif à p = 0,04. Cela peut donc arriver
Peter Flom - Réintégrer Monica

4
@Peter Good! Un test KS de normalité a rejeté un échantillon uniforme. Voilà ce que l'on espère.
whuber

3
set.seed(140);x=rnorm(6);ks.test(x,pnorm)produit p-value = 0.0003255. Bien sûr, j'ai dû l'essayer avec 140 graines avant de trouver cela ...
Spacedman

20

Comme @whuber l'a demandé dans les commentaires, une validation pour mon NON catégorique. edit: avec le test shapiro, car le test ks à un échantillon est en fait mal utilisé. Whuber est correct: pour une utilisation correcte du test de Kolmogorov-Smirnov, vous devez spécifier les paramètres de distribution et ne pas les extraire des données. C'est cependant ce qui est fait dans les progiciels statistiques comme SPSS pour un test KS à un échantillon.

Vous essayez de dire quelque chose sur la distribution et vous voulez vérifier si vous pouvez appliquer un test t. Donc, ce test est fait pour confirmer que les données ne s'écartent pas suffisamment de la normalité pour rendre invalides les hypothèses sous-jacentes de l'analyse. Par conséquent, vous n'êtes pas intéressé par l'erreur de type I, mais par l'erreur de type II.

Il faut maintenant définir «significativement différent» pour pouvoir calculer le minimum n pour une puissance acceptable (disons 0,8). Avec les distributions, ce n'est pas simple à définir. Par conséquent, je n'ai pas répondu à la question, car je ne peux pas donner de réponse raisonnable en dehors de la règle empirique que j'utilise: n> 15 et n <50. Sur la base de quoi? Gut sentiment fondamental, donc je ne peux pas défendre ce choix en dehors de l'expérience.

Mais je sais qu'avec seulement 6 valeurs, votre erreur de type II est forcément proche de 1, ce qui rend votre puissance proche de 0. Avec 6 observations, le test de Shapiro ne peut pas distinguer entre une distribution normale, poisson, uniforme ou même exponentielle. Avec une erreur de type II proche de 1, le résultat de votre test n'a aucun sens.

Pour illustrer le test de normalité avec le shapiro-test:

shapiro.test(rnorm(6)) # test a the normal distribution
shapiro.test(rpois(6,4)) # test a poisson distribution
shapiro.test(runif(6,1,10)) # test a uniform distribution
shapiro.test(rexp(6,2)) # test a exponential distribution
shapiro.test(rlnorm(6)) # test a log-normal distribution

La seule où environ la moitié des valeurs sont inférieures à 0,05 est la dernière. C'est aussi le cas le plus extrême.


si vous voulez savoir quel est le minimum n qui vous donne une puissance que vous aimez avec le test shapiro, on peut faire une simulation comme celle-ci:

results <- sapply(5:50,function(i){
  p.value <- replicate(100,{
    y <- rexp(i,2)
    shapiro.test(y)$p.value
  })
  pow <- sum(p.value < 0.05)/100
  c(i,pow)
})

ce qui vous donne une analyse de puissance comme celle-ci:

entrez la description de l'image ici

dont je conclus que vous avez besoin d'environ 20 valeurs minimum pour distinguer une exponentielle d'une distribution normale dans 80% des cas.

tracé de code:

plot(lowess(results[2,]~results[1,],f=1/6),type="l",col="red",
    main="Power simulation for exponential distribution",
    xlab="n",
    ylab="power"
)

2
@whuber: concernant la logique du test d'hypothèse sur sa tête: dans quel cas êtes-vous intéressé par l'hypothèse alternative? Dans toutes les applications de ces tests que j'ai vues, les gens sont intéressés par la confirmation du null: mes données ne diffèrent pas significativement d'une distribution normale. C'est pourquoi j'insiste sur l'erreur de type II.
Joris Meys

4
Voir mes commentaires au PO concernant la surveillance des eaux souterraines. Généralement, les gens souhaitent rejeter l' une ou les deux hypothèses par défaut: la normalité et la lognormalité. Parce que cela se fait sous une surveillance réglementaire stricte, il ne suffit pas de regarder un graphique de probabilité (qui est un outil puissant pour les praticiens expérimentés de l'IOTT comme @Peter Flom): des tests formels sont nécessaires. Une application similaire se produit dans l'évaluation des risques pour la santé humaine; Les documents d'orientation de l'US EPA envisagent spécifiquement des tests avec aussi bas que . Voir epa.gov/oswer/riskassessment/pdf/ucl.pdf , par exemple . 5n5
whuber

4
Pour revenir au titre: est-il utile de tester la normalité avec de petits échantillons? Dans certains cas, c'est le cas, en particulier lors de tests avec des alternatives fortement asymétriques. (SW a 80% de puissance à rapport à une alternative LN (1,2), par exemple) Une faible puissance contre de nombreuses alternatives lorsque est petit est quelque chose que les tests de normalité partagent, à un degré ou à un autre, avec n'importe quel test d'hypothèse. Cela n'empêche pas son utilisation. Par conséquent, un «non» sans réserve est, pour le dire légèrement, injuste à l’épreuve. Plus généralement, cela suggère que nous ne devrions jamais utiliser de tests d'hypothèse sur de "petits" échantillons. Cela semble trop draconien. nn=8n
whuber

3
@whuber: Nous devons accepter de différer. Je ne suis pas complètement fan des directives de l'EPA (et certainement pas de la FDA). J'ai vu cela trop souvent abusé pour croire encore à son utilité. Le hasard est une chose étrange et avec seulement 6 cas très imprévisibles. Je ne pense pas que vous puissiez dire quoi que ce soit sur une fonction complexe comme un PDF basée sur seulement 6 observations. YMMV
Joris Meys

5
@ImAlso Le test t peut tolérer beaucoup de non-normalité s'il est assez symétrique, mais il ne peut pas tolérer trop d'asymétrie. (En effet, un test d'asymétrie pour la normalité pourrait en fait être une meilleure option dans le PO que le test KS, pour cette seule raison.) Cela souligne l'une des plus grandes différences entre les tests de qualité de l'ajustement et d'autres tests d'hypothèse: il y a une énorme l'espace des alternatives possibles et les tests du GoF ont tendance à être bons contre certains d'entre eux mais pas contre d'autres. Vous ne pouvez pas les faire fonctionner correctement contre toutes les alternatives.
whuber

-2

La question posée ici a une idée fausse selon laquelle la vérification de la normalité est requise pour un échantillon de 6. Ici, l'objectif principal est de «tester si le temps passé dans la version de code A est différent du temps passé dans la version de code B ou non ( Ceci est mon H1) ». Lorsque le mot «différer» est utilisé, s'agit-il d'un seul test de queue ?. Cependant, le test de normalité est une deuxième étape. La première étape consiste à vérifier l'adéquation de la puissance prédéterminée (1-β) du test pour une taille d'échantillon donnée lorsque la puissance est très mauvaise, alors à quoi sert de tester la condition de normalité?. La vérification des conditions de normalité nous aidera à décider de passer un test paramétrique ou non paramétrique. Si la taille de votre échantillon n'est pas suffisamment puissante, pourquoi penser à tester la normalité?.


(-1) Ceci n'est pas très clair. Veuillez lire cette page pour savoir comment répondre aux questions: stats.stackexchange.com/help/how-to-answer
mkt - Réinstallez Monica
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.