Interprétation de QQplot - Existe-t-il une règle de base pour décider de la non-normalité?

47

J'ai lu assez de discussions sur QQplots ici pour comprendre qu'un QQplot peut être plus informatif que d'autres tests de normalité. Cependant, je suis inexpérimenté avec l'interprétation de QQplots. J'ai googlé beaucoup; J'ai trouvé beaucoup de graphiques de QQtrots non normaux, mais pas de règles claires sur la façon de les interpréter, mis à part ce qu'il semble être une comparaison avec des distributions connues plus un "instinct".

J'aimerais savoir si vous avez (ou si vous en connaissez) une règle de base pour vous aider à décider de la non-normalité.

Cette question a été soulevée lorsque j'ai vu ces deux graphiques: graphique 2 graphique 1

Je comprends que la décision de non-normalité dépend des données et de ce que je veux en faire; Cependant, ma question est la suivante: généralement, à quel moment les écarts observés par rapport à la ligne droite constituent-ils une preuve suffisante pour rendre déraisonnable l'approximation de la normalité?

Pour ce que cela vaut, le test de Shapiro-Wilk n’a pas rejeté l’hypothèse de non-normalité dans les deux cas.

greymatter0
la source
3
les bandes de confiance autour de la ligne QQ sont plutôt cool. Pouvez-vous partager le code R que vous avez utilisé pour les obtenir?
user603
7
C'est juste qqPlot () de {qualityTools} :)
greymatter0

Réponses:

43

Notez que le Shapiro-Wilk est un puissant test de normalité.

La meilleure approche consiste vraiment à avoir une bonne idée de la sensibilité de toute procédure que vous souhaitez utiliser à divers types de non-normalité (à quel point faut-il que la non-normale soit de cette manière pour qu'elle affecte votre inférence plus que vous Peut accepter).

Une approche informelle pour examiner les tracés consiste à générer un certain nombre d'ensembles de données qui sont en fait normaux et de la même taille d'échantillon que celui que vous avez (par exemple, 24 d'entre eux). Tracez vos données réelles dans une grille de ces tracés (5x5 pour 24 ensembles aléatoires). Si ce n’est pas particulièrement inhabituel (par exemple le pire), c’est raisonnablement conforme à la normalité.

entrez la description de l'image ici

À mes yeux, le jeu de données "Z" au centre ressemble à peu près à "o" et "v" et peut-être même à "h", tandis que "d" et "f" semblent légèrement pires. "Z" est la vraie donnée. Bien que je ne crois pas un instant que ce soit en fait normal, ce n'est pas particulièrement inhabituel lorsque vous le comparez à des données normales.

[Edit: Je viens de mener un sondage aléatoire - eh bien, j'ai demandé à ma fille, mais à un moment assez aléatoire - et son choix pour le moins comme une ligne droite était "d". Donc, 100% des personnes interrogées pensent que "d" est le plus étrange.]

Une approche plus formelle consisterait à faire un test Shapiro-Francia (qui est effectivement basé sur la corrélation dans le graphique QQ), mais (a) il n’est même pas aussi puissant que le test de Shapiro Wilk et (b) question (parfois) à laquelle vous devriez déjà connaître la réponse (la distribution à partir de laquelle vos données ont été tirées n’est pas tout à fait normale), à ​​la place de la question à laquelle vous souhaitez une réponse (dans quelle mesure est-ce important?).


Comme demandé, code pour l'affichage ci-dessus. Rien de compliqué impliqué:

z = lm(dist~speed,cars)$residual
n = length(z)
xz = cbind(matrix(rnorm(12*n),nr=n),z,matrix(rnorm(12*n),nr=n))
colnames(xz) = c(letters[1:12],"Z",letters[13:24])

opar = par()
par(mfrow=c(5,5));
par(mar=c(0.5,0.5,0.5,0.5))
par(oma=c(1,1,1,1));

ytpos = (apply(xz,2,min)+3*apply(xz,2,max))/4
cn = colnames(xz)

for(i in 1:25) {
  qqnorm(xz[,i],axes=FALSE,ylab= colnames(xz)[i],xlab="",main="")
  qqline(xz[,i],col=2,lty=2)
  box("figure", col="darkgreen")
  text(-1.5,ytpos[i],cn[i])
}

par(opar)

Notez que c'était juste à des fins d'illustration; Je voulais un petit ensemble de données qui semblait légèrement anormal. C'est pourquoi j'ai utilisé les résidus d'une régression linéaire sur les données de la voiture (le modèle n'est pas tout à fait approprié). Cependant, si je produisais réellement un tel affichage pour un ensemble de résidus pour une régression, je régresserais les 25 ensembles de données sur les mêmes que dans le modèle et afficherais des diagrammes QQ de leurs résidus, car les résidus ont une certaine valeur. structure non présente dans les nombres aléatoires normaux.x

(Je fais des séries de parcelles comme celle-ci depuis le milieu des années 80 au moins. Comment pouvez-vous interpréter les parcelles si vous ne connaissez pas leur comportement lorsque les hypothèses sont vérifiées - et quand elles ne le sont pas?)

Voir plus:

Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne, DF et Wickham, H. (2009) Inférence statistique pour l'analyse exploratoire de données et le diagnostic par modèle Phil. Trans. R. Soc. A 2009 367, 4361-4383 doi: 10.1098 / rsta.2009.0120

Glen_b
la source
8
+1 J'aime beaucoup l'idée de comparer les graphiques QQ de votre échantillon avec des graphiques générés aléatoirement!
COOLSerdash
Merci @Glen_b. Puis-je vous demander comment vous avez produit la grille de graphiques?
greymatter0
3
Je viens de découvrir que je n'ai jamais répondu à votre demande, greymatter0. Il n'y a pas vraiment de place pour mettre tout mon script, mais je vais en décrire l'essentiel. J'ai joué avec des options de tracé - opar=par(); par(mfrow=c(5,5)); par(mar=c(0.5,0.5,0.5,0.5)); par(oma=c(1,1,1,1))puis dans une boucle sur ije l' ai fait qqnorm(xz[,i],axes=FALSE,ylab= colnames(xz)[i],xlab="",main=""); qqline(xz[,i],col=2,lty=2); box("figure", col="darkgreen")alors à la fin par(opar)pour définir les options à ce qu'ils étaient auparavant. Cela laisse de côté certains détails, mais vous devriez être capable de gérer à partir de là.
Glen_b
@ greymatter0 ... et maintenant je découvre que je ne vous avais pas correctement envoyé au ping avant de répondre enfin. Mes excuses.
Glen_b
Ne vous inquiétez pas Glen_b, merci beaucoup de votre souvenir!
greymatter0
22

Sans contredire aucune des excellentes réponses ici, j’ai une règle de base qui est souvent (mais pas toujours) déterminante. (Un commentaire dans la réponse de @Dante semble également pertinent.)

Cela semble parfois trop évident pour le dire, mais vous y êtes.

Je suis heureux d'appeler une distribution non normale si je pense pouvoir proposer une description différente, nettement plus appropriée.

Donc, s’il ya une courbure et / ou une irrégularité mineures dans la queue d’un tracé normal quantile-quantile, mais une rectitude approximative sur un tracé gamma quantile-quantile, je peux dire «Ce n’est pas bien caractérisé comme une normale; c’est plutôt comme un gamma ".

Ce n’est pas un hasard si cela fait écho à un argument classique de l’histoire et de la philosophie des sciences, sans parler de la pratique scientifique générale, selon laquelle une hypothèse est réfutée de la manière la plus claire et la plus efficace lorsque vous en avez un meilleur à mettre en place. (Cue: allusions à Karl Popper, Thomas S. Kuhn et ainsi de suite.)

Il est vrai que pour les débutants, et pour tout le monde, il y a une gradation douce entre "C’est normal, sauf quelques irrégularités que nous attendons toujours" et "C’est très différent de la normale, sauf quelques similitudes approximatives que nous avons souvent ".

Des enveloppes de confiance et de multiples échantillons simulés peuvent grandement aider, et j’utilise et recommande les deux, mais cela peut aussi être utile. (Incidemment, la comparaison avec un portefeuille de simulations est une réinvention récente et répétée, mais remonte au moins aussi loin que Shewhart en 1931.)

Je vais faire écho à ma ligne supérieure. Parfois, aucune distribution de marque ne semble correspondre à tout, et vous devez aller de l'avant du mieux que vous pouvez.

Nick Cox
la source
12

Comme @Glen_b, vous pouvez comparer vos données avec les données dont vous êtes sûr, c'est normal - les données que vous avez générées vous-même, puis vous fier à votre instinct :)

Voici un exemple du manuel OpenIntro Statistics

Jetons un coup d'oeil à cette parcelle QQ:

qq1

Est-ce normal? Comparons-le avec des données normalement distribuées:

qq2

Celui-ci a une meilleure apparence que nos données, nos données ne semblent donc pas normales. Assurons-le en le simulant plusieurs fois et en le traçant côte à côte

qq3

Donc, notre instinct nous dit que l'échantillon ne sera probablement pas distribué normalement.

Voici le code R pour le faire

load(url("http://www.openintro.org/stat/data/bdims.RData"))
fdims = subset(bdims, bdims$sex == 0)

qqnorm(fdims$wgt, col=adjustcolor("orange", 0.4), pch=19)
qqline(fdims$wgt)

qqnormsim = function(dat, dim=c(2,2)) {
  par(mfrow=dim)
  qqnorm(dat, col=adjustcolor("orange", 0.4), 
         pch=19, cex=0.7, main="Normal QQ Plot (Data)")
  qqline(dat)
  for (i in 1:(prod(dim) - 1)) {
    simnorm = rnorm(n=length(dat), mean=mean(dat), sd=sd(dat))
    qqnorm(simnorm, col=adjustcolor("orange", 0.4), 
           pch=19, cex=0.7,
           main="Normal QQ Plot (Sim)")
    qqline(simnorm)
  }
  par(mfrow=c(1, 1))
}
qqnormsim(fdims$wgt)
Alexey Grigorev
la source
9

Il existe de nombreux tests de normalité. On se concentre généralement sur l' hypothèse nulle , à savoir " ". Cependant, l’ hypothèse alternative n’a que peu d’attention : "contre quoi"?H0:F=Normal

En règle générale, les tests qui considèrent toute autre distribution comme hypothèse alternative ont une puissance faible par rapport aux tests avec la bonne hypothèse alternative (voir, par exemple, 1 et 2 ).

Il existe un package R intéressant avec la mise en œuvre de plusieurs tests de normalité non paramétriques ('nortest', http://cran.r-project.org/web/packages/nortest/index.html). Comme mentionné dans les documents ci-dessus, le test du rapport de vraisemblance, avec l'hypothèse alternative appropriée, est plus puissant que ces tests.

L'idée mentionnée par @Glen_b de comparer votre échantillon à des échantillons aléatoires de votre modèle (ajusté) est mentionnée dans ma deuxième référence. Ils s'appellent "QQ-Envelopes" ou "QQ-Fans". Cela nécessite implicitement de disposer d'un modèle pour générer les données et, par conséquent, d'une hypothèse alternative.

Dante
la source
4

Lorsque j'enseigne mon cours sur les stratégies de modélisation par régression, ce sujet préoccupe toujours mes étudiants et moi-même. Je leur dis que nos évaluations graphiques sont toujours subjectives et j'ai tendance à m'inquiéter des graphiques plus tôt dans la journée que plus tard, lorsque je suis fatigué. L'ajout de tests statistiques formels n'aide pas assez: les tests peuvent détecter une non-normalité triviale pour des échantillons de très grande taille et manquer une non-normalité importante pour un petit . Je préfère utiliser des méthodes qui ne supposent pas une normalité efficace, par exemple la régression ordinale pour le continu .nY

Frank Harrell
la source
1
+1 Si vous avez cinq minutes à @Franck, pourriez-vous jeter un coup d'œil à ce fil de discussion: stats.meta.stackexchange.com/questions/4743 et peser dedans? Il s’agit de nos balises pour ordinal / ordonné logit / probit - il existe toute une série de balises ou des balises associées, ainsi que certaines incohérences dans la façon dont la balise [ordinale] est utilisée. Je suggère donc de nettoyer ces balises. Il serait bon de connaître votre opinion sur la meilleure façon de les organiser.
amibe dit de réintégrer Monica
1
Commencez par le post sur la fonction rms orm avec un exemple pour un continu . Impossible de le trouver pour le moment ...Y
Frank Harrell