【问题标题】:Error in shapiro.test : sample size must be betweenshapiro.test 中的错误:样本量必须介于
【发布时间】:2015-03-28 19:57:48
【问题描述】:

我有一个向量,在 R 中,有 1521298 个点,必须对其进行正态性测试。我选择了 Shapiro-Wilk 测试,但是 R 函数 shapiro.test() 说:

shapiro.test(z_scores) 中的错误:样本大小必须在 3 到 5000 之间

您是否知道任何其他功能可以对其进行测试或如何规避此问题?

【问题讨论】:

  • (1) R 中有很多其他的正态性测试函数(例如,参见 nortest 包)。 (2) 你能评论一下你为什么要做这个测试吗?如果你有这么大的数据集,我几乎可以保证你会拒绝 p 值非常低的正态性假设。
  • 我认为你误解了中心极限定理......像这样的问题更适合CrossValidated(CLT 说 一个大数之和的分布独立值的分布趋于正态,而不是大量值的分布趋于正态......)
  • 夏皮罗-威尔克测试是一个不错的选择。该检验具有检验数据集的正态性的最佳功效。实际上,数据集越大,Shapiro-Wilk 的测试结果就越好。该测试限制为最多 5000 个样本,因为您必须已经学习(原始测试限制为 50 个!样本)。您唯一能做的就是从您的数据集中随机选择少于 5000 个点来进行测试。你的数据集是排序的还是随机排列的?
  • @JFS,我不同意你所说的:对几个来自正态分布的大随机样本应用 shapiro-wilk 检验,你会发现它们中的大多数都会有一个低p 值。对大样本的情况有很好的解释here
  • @GathG,针对特定分布测试一组数据的问题始终存在不确定性。 Shapiro-Wilk 测试是少数具有最高功效的客观测试之一。这并不意味着该测试不会失败。但其他测试更糟糕。样本数量越大,对结果的偏差就越敏感,这实际上可能导致“错误”结果,例如对于已知的正态分布样本集来说 p 值很小。但是,样本集越小,出现非正态分布样本集的风险就越大,这些样本集不会被拒绝......

标签: r normal-distribution


【解决方案1】:

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 检验存在类似问题。对于大样本,您最有可能拒绝原假设。
【解决方案2】:

您可以尝试 Anderson-Darling 正态性检验,它适用于更大的样本量。

library(nortest)
ad.test(data$variable)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多