我要执行Shapiro-Wilk正态性测试。我的数据是csv格式。看起来像这样:

 heisenberg
    HWWIchg
1    -15.60
2    -21.60
3    -19.50
4    -19.10
5    -20.90
6    -20.70
7    -19.30
8    -18.30
9    -15.10

但是,当我执行测试时,我得到:
 shapiro.test(heisenberg)



为什么不选择正确的列,我该怎么做?

最佳答案

shapiro.test有什么作用?
shapiro.test测试NULLt假设“样本来自正态分布” ,而不是替代假设“样本不来自正态分布”。

如何在R中执行shapiro.test?
?shapiro.test的R帮助页面提供了,

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需要一个数字 vector 作为输入,它对应于您要测试的样本,并且它是唯一需要的输入。由于具有data.frame,因此必须将所需的列作为输入传递给函数,如下所示:
> shapiro.test(heisenberg$HWWIchg)
#   Shapiro-Wilk normality test

# data:  heisenberg$HWWIchg
# W = 0.9001, p-value = 0.2528

解释shapiro.test的结果:

首先,我强烈建议您使用testing for normality的Ian Fellows的read this excellent answer

如上所示,shapiro.test测试NULL假设,即样本来自正态分布。这意味着,如果您的p值和的正态性假设。换句话说(如果我错了,请纠正我),如果测试一个NULL假设(样本不是来自于一个),那会更好。正态分布为什么?因为拒绝NULL假设与接受替代假设不同。

shapiro.test的零假设的情况下,p值
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
我想在@PaulHiemstra中引用有关对大样本量的影响的评论,这是另一个问题:



尽管他还指出R的数据大小限制对此有所保护:



如果NULL假设相反,则意味着样本不是来自正态分布,并且p值
@PaulHiemstra还谈到实际情况(示例回归),当遇到这种测试正常性的问题时:



在这里,我发现伊恩·费洛夫(Ian Fellows)对本·博克(Ben Bolker)在同一个问题上的评论的答复已经同上(如果没有更多的话)具有引用值(value):



希望这能使事情变得顺利。

08-24 17:54