Error in shapiro.test: 样本大小必须在3到5000之间。

17

我有一个包含1521298个点的向量,在R中需要对其进行正态性检验。我选择了Shapiro-Wilk检验,但R函数shapiro.test()显示:

Error in shapiro.test(z_scores) : 样本大小必须在3到5000之间

你知道其他任何可用于测试或如何规避此问题的函数吗?


(1) 在R中有很多其他的正态性检验函数(例如,可以查看nortest包)。 (2) 你能否评论一下为什么要进行这个测试?如果你有如此大的数据集,我几乎可以保证你会以非常低的p值拒绝正态性假设。 - Ben Bolker
3
我觉得你误解了中心极限定理……像这样的问题更适合在CrossValidated上问(中心极限定理指的是大量独立值的总和的分布趋向于正态分布,而不是大量值的分布趋向于正态分布……) - Ben Bolker
Shapiro-Wilk测试是一个不错的选择。该测试对于检验数据集是否符合正态分布具有最佳功效。实际上,数据集越大,Shapiro-Wilk测试结果越好。但是需要注意的是,该测试最多只能处理5000个样本(你可能已经了解到原始测试仅限于50个样本)。唯一可以做的就是从数据集中随机选择少于5000个点进行测试。你的数据集是排序还是随机排列的? - JFS
2
@JFS,我不同意你的说法:对来自正态分布的几个大样本应用Shapiro-Wilk测试,你会发现它们中的大多数都具有较低的p值。这里有很好的解释,说明大样本的情况在这里 - Cath
@GathG,测试一组数据是否符合某种分布总是存在不确定性。Shapiro-Wilk测试是少数几个具有最高功率的客观测试之一。这并不意味着这个测试不会失败。但其他测试甚至更糟糕。样本数量越大,偏差对结果的影响就越敏感,这实际上可能导致出现“错误”的结果,例如即使针对已知正常分布的样本集也会得到小的p值。但是,样本集越小,拒绝非正态分布样本集的风险就越大... - JFS
最后并没有对错之分。每个测试都不是完美的,但是(至少对我来说)使用Shapiro-Wilk检验相比其他测试表现最佳。 - JFS
2个回答

13

Shapiro检验无法使用超过5,000个记录。

您可以尝试仅使用前5,000个样本进行Shapiro检验。 如果有帮助,请使用类似以下代码的代码:

shapiro.test(beaver2$temp[0:5000])

但要注意,测试将仅使用您数据的前 5,000 个样本。

另一方面,如果您需要使用样本的所有记录,请使用另一个类似的测试,例如 Anderson-Darling 正态性检验。 您还可以执行两个测试并进行比较,就像下面的脚本:

# clean workspace
rm(list=ls())

# Install required packages:
install.packages('nortest')

#Model data tho use
ModelData = beaver2$temp

#Do shapiro test with only the first 5000 records
shapiro.test(ModelData[0:5000])$p.value

#Anderson-Darling normality test
library(nortest)
ad.test(ModelData)$p.value

Anderson-Darling测试与Shapiro Wilk测试存在类似的问题。对于大样本,您很可能会拒绝零假设。 - Shadrack Kibet

10
你可以尝试使用Anderson-Darling正态性检验,这适用于较大的样本量。
library(nortest)
ad.test(data$variable)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接