Зауважимо, що Шапіро-Вілк є потужним тестом на нормальність.
Найкращим підходом є насправді мати гарне уявлення про те, наскільки чутлива будь-яка процедура, яку ви хочете використовувати, - до різних видів ненормативності (наскільки погано ненормативно це має бути, щоб це впливало на ваш висновок більше, ніж ви може прийняти).
Неофіційним підходом до перегляду сюжетів було б генерування декількох наборів даних, які насправді є нормальними такого ж розміру вибірки, як і у вас (наприклад, 24 з них). Накресліть ваші реальні дані серед сітки таких графіків (5х5 у випадку 24 випадкових наборів). Якщо це не особливо незвично виглядає (скажімо, найгірше), воно розумно відповідає нормальності.
На мій погляд, набір даних "Z" в центрі виглядає приблизно нарівні з "o" і "v" і, можливо, навіть "h", тоді як "d" і "f" виглядають трохи гірше. "Z" - це реальні дані. Хоча я ні на хвилину не вірю, що це насправді нормально, це не особливо незвично, коли ти порівнюєш його зі звичайними даними.
[Редагувати: Я щойно провів випадкове опитування - ну, я запитав доньку, але у досить випадковий час - і її вибір як мінімум прямої лінії був "d". Тож 100% опитаних вважали, що "d" є найбільш дивним.]
Більш офіційним підходом було б зробити тест Shapiro-Francia (який фактично базується на кореляції в QQ-графіці), але (a) він навіть не такий потужний, як тест Shapiro Wilk, і (b) формальне тестування відповідає на питання (іноді), на яке ви вже маєте знати відповідь (розподіл ваших даних було взято не зовсім нормально), замість того, на яке питання вам потрібно відповісти (наскільки це погано?).
За потребою введіть код для вищезазначеного дисплея. Нічого фантазійного не було:
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)
Зауважте, що це було лише для ілюстрації; Я хотів невеликий набір даних, який виглядав м'яко ненормальним, тому я використовував залишки від лінійної регресії на даних про машини (модель не зовсім підходить). Однак, якщо я насправді генерував такий дисплей для набору залишків для регресії, я б регресував усі 25 наборів даних на тих самих , що і в моделі, і відображав QQ графіки їх залишків, оскільки залишки мають деякі структура, відсутня в нормальних випадкових числах.x
(Я створював такі набори сюжетів принаймні з середини 80-х. Як ви можете інтерпретувати сюжети, якщо ви незнайомі, як вони поводяться, коли припущення мають місце, а коли їх немає?)
Побачити більше:
Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne, DF та Wickham, H. (2009) Статистичні висновки для дослідницького аналізу даних та діагностики моделі Філ. Транс. Р. Соц. A 2009 367, 4361-4383 doi: 10.1098 / rsta.2009.0120