使用 Kolmogorov-Smirnov 检验来评估随机变量的正态性是否合理?

机器算法验证 r 正态分布 拟合优度 正态假设 kolmogorov-smirnov 测试
2022-03-11 03:27:44

语境

我对以下帖子感到困惑,其中接受的答案指出:

您甚至无法真正比​​较两者,因为 Kolmogorov-Smirnov 是针对完全指定的分布(因此,如果您要测试正态性,则必须指定均值和方差;它们无法从数据中估计*),而Shapiro-Wilk 用于正态性,具有未指定的均值和方差。

  • 您也无法通过使用估计参数和测试标准正态来进行标准化;这实际上是一回事。

问题

想象一下,我有一个随机的测量样本X,我使用它的样本均值和方差对其进行标准化。我可以使用 Kolmogorov Smirnov 检验作为 GOF 检验来评估这个随机样本的正态性吗?

H0:XscaledN(0,1)

插图

为了说明我的问题,这里是 R 中的代码片段:

# We wish to do a Goodness of Fit test that X is a random sample from a Normal Distribution N(mu,sigma^2)
X <- c(10.212, 10.103, 10.242, 10.106, 10.102, 10.095, 10.042, 10.093, 10.302, 10.111)
sample.mean <- mean(X)
sample.variance <- var(X)
# Or that standardized X (scaled.X) is a random sample from a standard normal distribution N(0,1)
scaled.X <- (X-sample.mean)/(sqrt(sample.variance))


# Kolmogorov-Smirnov Test H0 : X ~ N(0,1)

ks.test(scaled.X,alternative="two.sided",y = "pnorm")
# Do not reject the null.
# Shapiro Test 
shapiro.test(scaled.X)
# Do reject the null.

请注意,KS 测试和 Shapiro-Wilk 测试给出了相互矛盾的结果,暗示 Shapiro Wilk 测试在这种特定情况下更强大。然而,这不是我的主要问题,尽管欢迎对此发表任何评论。

这个问题感兴趣的具体领域是,是否对标准化随机样本(带有样本统计)使用 KS 检验是一种评估正态性假设的合理方法。

3个回答

你的方法是 Procrustean:当你标准化数据时,你强迫它们看起来更像标准正态值而不是它们。毕竟,检测分布差异的一部分涉及比较它们的均值和方差,而您不得不将它们相同。

结果,您在欺骗 KS 测试。事实证明,它返回的 p 值太大了,因为 10,000 个模拟数据集(大小为)的这些结果证明了这一点。他们总结了两个 p 值:一个是通过将 KS 检验应用于iid标准 Normal 样本而获得的,另一个是在标准化该样本后以完全相同的方式获得的。50

数字

红线绘制了理想的零(均匀)分布以供参考。

一种想法是以某种方式纠正标准化的 p 值。 但有时 p 值几乎相同,因为无论如何,原始样本碰巧几乎是标准化的。在极少数情况下,标准化会使数据看起来不像是从标准正态分布中提取的:KS 检验评估分布的许多其他方面,而不是前两个时刻。但大多数情况下,标准化会提高 p 值(使其更难检测到偏离标准 Normal 的情况)。因此,我们甚至无法以可接受的准确度从不正确的 p 值中预测出正确的 p 值。 这是模拟中 p 值对的散点图。

图 2

这些考虑是足够普遍的——除了它的目的之外,它们对 KS 测试的任何特定属性都没有吸引力——因此表明在几乎所有分布测试中使用标准化都会出现类似的问题。


这样的模拟需要很少的时间(这需要不到一秒钟的时间来完成)并且可以在几分钟内完成编码,因此当出现此类微妙的问题时,它们通常是值得的。作为一个可能需要多少努力的例子,这里是R重现这个模拟的代码。

n.sim <- 1e4
n <- 50
set.seed(17)
X <- matrix(rnorm(n*n.sim), n)

f <- function(x) ks.test(x, "pnorm")$p.value
ks.1 <- apply(X, 2, f)
ks.2 <- apply(scale(X), 2, f)

ks.1剩下的就是对和中的 p 值数组进行后处理ks.2作为记录,这是我制作这些数字的方法。

# Figure 1: Histograms
par(mfrow=c(1,2))
b <- seq(0, 1, by=0.05)
hist(ks.1, breaks=b, freq=FALSE, col=gray(.9), main="Non-standardized", xlab="p-value")
abline(h=1, lwd=2, col=hsv(0,1,3/4))
hist(ks.2, breaks=b, freq=FALSE, col=gray(.9), main="Standardized", xlab="p-value")
abline(h=1, lwd=2, col=hsv(0,1,3/4))
par(mfrow=c(1,1))

# Figure 2: Scatterplot
plot(ks.1, ks.2, pch=21, bg=gray(0, alpha=.05), col=gray(0, alpha=.2), cex=.5,
     xlab="Non-standardized p-value", ylab="Standardized p-value", asp=1)

考虑以下模拟,其中询问 KS 测试是否 来自的样本是否正常。还尝试了具有样本均值和方差的虚假变体以及(类似地)使用样本均值和方差进行标准化的变体。[使用样本均值和 SD 的 KS 检验的近似变体可用。]n=20Beta(2,2)

最后,询问夏皮罗-威尔克检验,β 数据是否符合任何正态分布。(n 小功率差n.)

set.seed(2022)
m = 10^5; pv1 = pv2 = pv3 = pv4 = numeric(m)
for (i in 1:m) {
 x = rbeta(50, 2,2)
 pv1[i] = ks.test(x, pbeta, 2,2)$p.val
 pv2[i] = ks.test(x, pnorm, mean(x), sd(x))$p.val
 z = (x -mean(x))/sd(x)
 pv3[i] = ks.test(z, pnorm)$p.val
 pv4[i] = shapiro.test(x)$p.val
}
mean(pv1 <=.05) # aprx K-S P-val for BETA(2,2)
[1] 0.05052       # power aprx same as sig level
mean(pv2 <=.05) # dishonest K-S, for NORM(.5,.2236)
[1] 0.00012       # power below sig. level
mean(pv3 <=.05) # dishonest K-S, for standardized bets
[1] 0.00012       # no power, same as above
mean(pv4 <= 10) # honest Shapiro P-val
[1] 0.15131       # aprx power 15%

pv2欺骗 KS 检验 (和)的两个虚假尝试pv3功能失调,使 P 值低于5% 的名义显着性水平。[正如@whuber 所说,“标准化”使样本看起来“太像”标准正常。]

大约 15% 的时间,Shapiro-Wilk 检验正确地识别出 beta 数据 [all in任何 正态分布不一致。(0,1)]

参考:在我的模拟中使用的想法来自此相关论文的图 1(a) 。Beta(2,2)

通常,统计测试由两部分组成:计算统计量,然后根据该统计量找到 p 值。您当然可以计算归一化样本的 KS 统计量,但遇到麻烦的是计算 p 值。已发布的 KS p 值表用于针对预先确定的分布运行样本。通过标准化样本,您正在做类似于 p-hacking 的事情,因为您在查看数据后实质上是在更改您的零假设(您提出的分布的均值和标准差的值是零假设的一部分,并且您正在从样本中计算这些)。

我发现 whuber 的描述“当你标准化数据时,你强迫它们看起来更像标准的正常值而不是它们”可能会产生误导,至少如果读者错过了“标准”部分。Shapiro-Wilk 检验着眼于样本与任何正态分布的匹配程度,而不仅仅是标准正态分布,并且标准化数据不会改变 Shapiro-Wilk 统计量。另一方面,Kolmogorov-Smirnov 检验将样本与特定分布进行比较,而不仅仅是与整个正态分布类别进行比较,因此标准化,通过强制样本匹配特定的均值和标准差(即01分别),增加出现匹配分布的概率。

因此,如果您想在标准化样本上使用 KS 进行统计检验,则必须找到标准公式以外的 p 值来源。我发现 whuber 的结论“我们甚至无法以可接受的准确度从不正确的 p 值中预测出正确的 p 值”,但在他们的答案中没有得到前面的论点的支持(至少没有更多地阅读该论点)。对 p 值使用不同的分布有时会增加 p 值,有时会降低这一事实并不排除使用不同的分布(尽管在这种特殊情况下可能存在其他问题使其不切实际)。如果你的统计测试有一个特定的,那么任何α具有概率质量小于或等于的拒绝区域的测试是有效的,尽管不一定有用。α

然而,为了计算 p 值,您可能需要一些元分布,您从中采样的实际分布被建模为从某个分布空间中随机选择,并在该空间上具有一些元概率分布. 无论元分布如何,p 值都可能存在一些上限,但是,在这种情况下,您可以使用它。我不熟悉为这种情况建立 p 值的工作(如果有的话)。鉴于我们已经有了 Shapiro-Wilk 测试,您不妨使用它。