Beachten Sie, dass der Shapiro-Wilk ein starker Test für die Normalität ist.
Der beste Ansatz ist es, eine gute Vorstellung davon zu haben, wie empfindlich ein Verfahren für verschiedene Arten von Nicht-Normalität ist (wie schlimm nicht-normal muss es sein, damit es Ihre Schlussfolgerung stärker beeinflusst als Sie) kann akzeptieren).
Ein informeller Ansatz für die Betrachtung der Diagramme besteht darin, eine Reihe von Datensätzen zu generieren, die tatsächlich normal sind und dieselbe Stichprobengröße haben wie die von Ihnen (z. B. 24). Zeichnen Sie Ihre realen Daten in einem Raster aus solchen Diagrammen (5x5 bei 24 zufälligen Sätzen). Wenn es nicht besonders ungewöhnlich aussieht (zum Beispiel das schlechteste), stimmt es einigermaßen mit der Normalität überein.
Meines Erachtens entspricht der Datensatz "Z" in der Mitte in etwa "o" und "v" und möglicherweise sogar "h", während "d" und "f" etwas schlechter aussehen. "Z" sind die realen Daten. Ich glaube zwar nicht, dass es tatsächlich normal ist, aber es sieht nicht besonders ungewöhnlich aus, wenn man es mit normalen Daten vergleicht.
[Bearbeiten: Ich habe gerade eine zufällige Umfrage durchgeführt - nun, ich habe meine Tochter gefragt, aber zu einem ziemlich zufälligen Zeitpunkt - und ihre Wahl für die am wenigsten wie eine gerade Linie war "d". 100% der Befragten dachten also, "d" sei das seltsamste.]
Formaler Ansatz wäre ein Shapiro-Francia-Test (der effektiv auf der Korrelation im QQ-Plot basiert), aber (a) nicht einmal so leistungsfähig wie der Shapiro-Wilk-Test und (b) formale Testantworten a Frage (manchmal), auf die Sie die Antwort ohnehin schon wissen sollten (die Verteilung, aus der Ihre Daten stammen, ist nicht ganz normal), anstelle der Frage, die Sie beantworten müssen (wie wichtig ist das?).
Code für die obige Anzeige eingeben. Nichts Besonderes:
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)
Beachten Sie, dass dies nur zur Veranschaulichung diente; Ich wollte einen kleinen Datensatz, der nicht ganz normal aussah, weshalb ich die Residuen einer linearen Regression auf die Fahrzeugdaten verwendete (das Modell ist nicht ganz angemessen). Wenn ich jedoch eine solche Anzeige für einen Satz von Residuen für eine Regression generieren würde, würde ich alle 25 Datensätze auf die gleichen -Werte wie im Modell zurückführen und QQ-Diagramme ihrer Residuen anzeigen, da Residuen einige haben Struktur in normalen Zufallszahlen nicht vorhanden.x
(Ich mache seit mindestens Mitte der 80er Jahre eine Reihe solcher Diagramme. Wie können Sie Diagramme interpretieren, wenn Sie nicht wissen, wie sie sich verhalten, wenn die Annahmen zutreffen - und wenn nicht?)
Mehr sehen:
Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne, DF und Wickham, H. (2009) Statistical Inference für die explorative Datenanalyse und Modelldiagnose Phil. Dr. Trans. R. Soc. A 2009 367, 4361-4383 doi: 10.1098 / rsta.2009.0120