样本量很大的正态性检验?

机器算法验证 正态分布 正态假设
2022-03-25 14:09:31

假设检验,例如 Anderson-Darling 或 Shapiro-Wilk 检验检查分布的正态性。但是,如果样本量很大,则该测试非常“准确”,但实际上无用,因为置信区间太小。即使分布足够正常,他们也将始终拒绝零。

当样本量非常大时,除了可视化直方图之外,我应该如何测试正态性?

动机是我想在软件平台中自动检查大型数据集的正常性,其中一切都需要自动化,而不是人工可视化和检查。

我遇到的一件事是,我没有使用 Shapiro-Wilk 检验,而是计算分布的峰度和偏度,如果它们是,我可以假设我的大型数据集是“合理”正态分布的。±1.0

我的方法是正确的,还是有其他选择?

3个回答

评论继续:如果您使用来自 R 的模拟正常数据,那么您可以非常确信声称正常样本的真实情况。因此,Shapio-Wilk 测试不应该有“怪癖”来检测。

使用 Shapiro-Wilk 测试检查 100,000 个大小为 1000 的标准正常样本,我只有大约 5% 的时间被拒绝,这是人们对 5% 水平的测试所期望的结果。

set.seed(2019)
pv = replicate( 10^5, shapiro.test(rnorm(1000))$p.val )
mean(pv <= .05)
[1] 0.05009

附录。 相比之下,分布 “看起来”非常像正态分布,但并不完全是正态分布。如果我对这个近似模型进行相同的模拟,Shapiro-Wilk 会拒绝大约 7% 的时间。从权力的角度来看,这并不好。但似乎夏皮罗-威尔克有时能够检测到数据并不完全正常。Beta(20,20)

这距离“总是”还有很长的路要走,但我认为比许多现实生活中的“正常”数据更接近正常。(并且链接说总是可能“有点强烈声明。”我怀疑最大的麻烦可能来自比 1000 大得多的样本,并且对于一些非常有用的正常近似值 - 即使不完美。 )显着差异是具有实际重要性的差异。” 有时,应该更了解的人在进行拟合优度测试时似乎忘记了这一点。Beta(20,20)

set.seed(2019)
pv = replicate( 10^5, shapiro.test(rbeta(1000, 20,20))$p.val )
mean(pv <= .05)
[1] 0.07152

在此处输入图像描述

正如@gg 在评论中指出的那样,整个讨论毫无意义,没有定义数据必须有多正常才能让我们认为它“足够正常”。在实践中,我经常喜欢以下标准:

  • 偏度接近 0,可能是 (-1,1) 范围,或者您感觉更舒服,具体取决于“正常程度如何足够正常”。
  • 峰度接近 3(或过度峰度接近 0) 高峰度通常比低峰度更严重,因为它会导致更多异常值。
  • 中位数离均值不远
  • QQ-地块是你的朋友!

...但是,如果样本量很大,则测试非常“准确”,但实际上无用,因为置信区间太小。他们总是会拒绝零,即使分布足够正常......

如果您从包含数千个或更多的大样本中提取大小为 100 或 300 的子样本会怎样。如果我没记错的话,那么取子样本将反映相同的分布,但在常见的正态性测试中会更好。