夏皮罗测试的局限性

机器算法验证 r 统计学意义 多重回归 异常值 夏皮罗威尔克测试
2022-03-15 06:13:51

夏皮罗测试或功能是否有任何可能的限制shapiro.test()在删除数据集中的异常值后,使用 似乎shapiro.test表明数据不再正常,尽管测试表明该模型之前是正常的。

2个回答

Shapiro-Wilk 检验对异常值不是特别敏感。通过查看偏度和峰度的组合,有一些关注异常值的正态性检验,但它们是不同的。

帕特里克·罗伊斯顿谈到夏皮罗-威尔克测试

它的功率特性是众所周知的,可以概括为它对短尾(platykurtic)和偏斜分布最强,对对称中等长尾(leptokurtic)分布最弱。

一个基于异常值的测试将是相反的,最强的对抗 leptokurtic 分布。

这也支持这样一种观点,即从真正来自正态分布的样本中删除极端观察结果可能会导致夏皮罗-威尔克检验拒绝 - 正确,因为您不再有来自正态分布的样本,而是有一个样本比普通的尾巴更轻。

我对 Shapiro-Wilk 测试有更长的抱怨,这不一定与这里的具体问题有关

当然,这可能发生。

假设您的原始数据是正常的。真的很正常。然后删除“异常值”。例如,与平均值相差超过 3 个标准差的所有内容。我们还剩下什么?截断正态分布根据定义,这不再是正态分布。

所以夏皮罗-威尔克检验应该在这种情况下告诉你原始数据是正常的,而截断的数据不是。

这是一个小R代码来模拟这个:

sample_size <- 100
n_experiments <- 1000
result <- matrix(NA,nrow=n_experiments,ncol=2,dimnames=list(NULL,c("Before","After")))

for ( ii in 1:n_experiments ) {
    set.seed(ii)    # for replicability
    foo <- rnorm(sample_size)
    result[ii,"Before"] <- shapiro.test(foo)$p.value>0.05
	result[ii,"After"] <- shapiro.test(foo[abs(foo)<=3])$p.value>0.05
}

table(data.frame(result))

结果:

       After
Before  FALSE TRUE
  FALSE    32   26
  TRUE      3  939

(我建议浏览一下这篇文章的评论,看看有多么有争议的“离群值”删除。)