请注意,Shapiro-Wilk 是对正态性的有力检验。
最好的方法是真正了解您要使用的任何程序对各种非正态性的敏感程度(它必须以这种方式有多严重的非正态性才能影响您的推理而不是您可以接受)。
查看图表的一种非正式方法是生成许多数据集,这些数据集实际上与您拥有的样本大小相同(例如,其中 24 个)是正常的。在此类图的网格中绘制您的真实数据(在 24 个随机集的情况下为 5x5)。如果它不是特别不寻常的外观(比如说最糟糕的外观),那么它与正常情况相当一致。
在我看来,中心的数据集“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) 探索性数据分析和模型诊断的统计推断 Phil。反式。R. Soc。A 2009 367, 4361-4383 doi: 10.1098/rsta.2009.0120