为什么所有正态性检验都会拒绝原假设?

机器算法验证 正态分布
2022-03-16 23:54:14

Kolgomorov-Smirnov 检验、Shapiro 检验等......都拒绝了分布是正态的假设。然而,当我绘制正常的分位数和直方图时,数据显然是正常的。也许是因为测试的力量很高?

样本量约为 650。那么这些检验中的至少一项是否不应该拒绝零假设?

结果:

           Kolmogorov-Smirnov    D          0.05031          Pr > D       <0.010
           Cramer-von Mises      W-Sq       0.30003          Pr > W-Sq    <0.005
           Anderson-Darling      A-Sq       1.66965          Pr > A-Sq    <0.005
           Chi-Square            Chi-Sq  3250.43596     18   Pr > Chi-Sq  <0.001
4个回答

正态性测试是浪费时间,您的示例说明了原因。对于小样本,正态性检验的功效较低,因此关于使用哪些统计模型的决定需要基于先验知识。在这些情况下,未能拒绝空值并不能证明空值在总体水平上甚至是近似正确的。

当你有大量样本时,正态性检验变得异常强大,但它们不会告诉你任何你不知道的东西。没有实际数量是完全正态分布的。正态分布只是一个数学抽象,在很多情况下它是一个足够好的近似值。最简单的证明是没有任何实数(至少我能想到的)可以将任何实数作为其值。例如,宇宙中只有这么多分子。货币供应量只有这么多美元。光速是有限的。计算机只能存储有限大小的数字,因此即使某些东西确实支持所有实数,您也无法测量它。

关键是你已经知道你的数据不是完全正态分布的,但是正态性测试并没有告诉你数据有多不正态。它们绝对没有提示您的数据是否近似正态分布,因此假设正态性的统计推断方法会给出正确的答案。具有讽刺意味的是,假设正态性的常见测试(例如 T 检验和 ANOVA)在大样本量下对非正态性更加稳健。

这并不让我感到惊讶 --- 如果样本量足够大,任何好的测试都应该拒绝原假设,除非生成的数据分布是真正(并且完全)正态的。

对于假设检验,人们通常有兴趣找到一种“强大的”检验,这种检验可以用尽可能少的数据找到与原假设的非常小的偏差。

尝试使用大小为 20、50、100、200 的子样本运行测试,并查看测试开始拒绝的大小。很容易看出直方图是否对称且通常呈钟形,但分布的尾部更难用肉眼评估。也许数据中存在导致测试拒绝的异常值?如果有,看看修剪它们时会发生什么。

可能的原因是您的数据非常不正常,并且您的样本量大到足以揭示这一点。

如果分布确实是正常的,那么它通常应该通过这些测试,如下面的 R 示例中,除了一个测试之外的所有测试都通过了。

> require(nortest)
> 
> set.seed(1)
> dat <- rnorm(650,mean=100, sd=5)
> 
> ad.test(dat)

        Anderson-Darling normality test

data:  dat 
A = 0.439, p-value = 0.2924

> cvm.test(dat)

        Cramer-von Mises normality test

data:  dat 
W = 0.0882, p-value = 0.1619

> lillie.test(dat)

        Lilliefors (Kolmogorov-Smirnov) normality test

data:  dat 
D = 0.0334, p-value = 0.08196

> pearson.test(dat)

        Pearson chi-square normality test

data:  dat 
P = 37.96, p-value = 0.035

> sf.test(dat)

        Shapiro-Francia normality test

data:  dat 
W = 0.9978, p-value = 0.5186

> shapiro.test(dat)

        Shapiro-Wilk normality test

data:  dat 
W = 0.9981, p-value = 0.675

您可能想做一个 qqplot,如果它足够接近一条直线,那么您可能决定将其视为足够接近正常值以达到您的目的。这取决于这些目的是什么。

让我不同意 dsimcha 的回答:“正态性测试是浪费时间,您的示例说明了原因。”。正态性测试永远不会浪费时间,您始终可以从数据中学习。此外,在执行某些分析(即方差分析、回归等)之前,您必须测试一些条件。相对较大的样本量最好用绘图(QQplot,直方图)进行测试。在这种情况下,可视化提供了更多关于多模式行为等的信息。

在处理大样本量时,方差分析和回归对非正态性具有鲁棒性,但导致问题的主要数据类型是多模态数据样本。

对于小样本,Kolgomorov-Smirnov 检验是最好的选择,主要是因为它的敏感性。