shapiro.test 有什么作用?
shapiro.test
检验“样本来自正态分布”的空假设与备择假设“样本不来自正态分布”。
如何在 R 中执行 shapiro.test?
给出的 R 帮助页面?shapiro.test
,
x - a numeric vector of data values. Missing values are allowed,
but the number of non-missing values must be between 3 and 5000.
也就是说,shapiro.test
需要一个数字向量作为输入,它对应于您要测试的样本,并且它是唯一需要的输入。由于您有一个data.frame,因此您必须将所需的列作为输入传递给函数,如下所示:
> shapiro.test(heisenberg$HWWIchg)
# Shapiro-Wilk normality test
# data: heisenberg$HWWIchg
# W = 0.9001, p-value = 0.2528
解释 shapiro.test 的结果:
首先,我强烈建议您阅读Ian Fellows 的这篇出色的回答testing for normality
。
如上所示,shapiro.test
测试样本来自正态分布的 NULL 假设。这意味着如果您的p 值 <= 0.05,那么您将拒绝样本来自正态分布的 NULL 假设。正如 Ian Fellows 所说,您正在测试“正态性假设”。换句话说(如果我错了,请纠正我),如果测试样本不来自正态分布的 NULL 假设会更好. 为什么?因为,拒绝 NULL 假设与接受备择假设不同。
在 的零假设的情况下shapiro.test
,p 值 <= 0.05 将拒绝样本来自正态分布的零假设。简单地说,样本很少有机会来自正态分布。这种假设检验的副作用是这种罕见的机会很少发生。为了说明,举个例子:
set.seed(450)
x <- runif(50, min=2, max=4)
shapiro.test(x)
# Shapiro-Wilk normality test
# data: runif(50, min = 2, max = 4)
# W = 0.9601, p-value = 0.08995
因此,根据该测试,这个(特定)样本runif(50, min=2, max=4)
来自正态分布。我想说的是,在很多情况下,“极端”要求(p < 0.05)不满足,这导致大多数时候接受“空假设”,这可能会产生误导。
我想在这里引用@PaulHiemstra 的另一个问题,来自关于对大样本量的影响的评论:
Shapiro-Wilk 检验的另一个问题是,当您提供更多数据时,拒绝原假设的机会会变得更大。所以发生的情况是,对于大量数据,甚至可以检测到与正态性的非常小的偏差,从而导致拒绝零假设事件,尽管出于实际目的,数据已经足够正常了。
尽管他还指出 R 的数据大小限制对此有所保护:
幸运的是 shapiro.test 通过将数据大小限制为 5000 来保护用户免受上述影响。
如果 NULL 假设相反,即样本不来自正态分布,并且您得到p 值 < 0.05,那么您得出结论,这些样本不来自正态分布的情况非常罕见(拒绝零假设)。这大致翻译为:样本很可能是正态分布的(尽管一些统计学家可能不喜欢这种解释方式)。我相信这也是 Ian Fellows 在他的帖子中试图解释的。如果我做错了什么,请纠正我!
@PaulHiemstra 还对遇到此正态性测试问题时的实际情况(示例回归)进行了评论:
在实践中,如果分析假设正态性,例如 lm,我不会做这个 Shapiro-Wilk 检验,而是做分析并查看分析结果的诊断图,以判断分析的任何假设是否违反了太多。对于使用 lm 的线性回归,这是通过查看使用 plot(lm()) 获得的一些诊断图来完成的。统计数据不是一系列计算出几个数字的步骤(嘿,p < 0.05!),但需要大量经验和技能来判断如何正确分析数据。
在这里,我发现 Ian Fellows 对 Ben Bolker 在上面已经链接的同一问题下的评论的回复同样(如果不是更多)信息丰富:
对于线性回归,
不要太担心正常性。CLT 会很快接管,如果除了最小的样本量和看起来很合理的直方图之外,你还可以。
担心不等方差(异方差)。我担心这一点(几乎)默认使用 HCCM 测试。比例位置图将给出一些关于这是否被破坏的想法,但并非总是如此。此外,在大多数情况下,没有先验理由假设方差相等。
异常值。厨师距离 > 1 是值得关注的合理原因。
这些是我的想法(FWIW)。
希望这能澄清一点。