Kolmogorov-Smirnov 检验:p 值和 ks 检验统计量随着样本量的增加而减少

机器算法验证 Python p 值 拟合优度 直觉 scipy
2022-03-14 07:44:10

为什么 p 值和 ks 检验统计量会随着样本量的增加而减少?以这段 Python 代码为例:

import numpy as np
from scipy.stats import norm, ks_2samp
np.random.seed(0)
for n in [10, 100, 1000, 10000, 100000, 1000000]:
  x = norm(0, 4).rvs(n)
  y = norm(0, 4.1).rvs(n)
  print ks_2samp(x, y)

结果是:

Ks_2sampResult(statistic=0.30000000000000004, pvalue=0.67507815371659508)
Ks_2sampResult(statistic=0.080000000000000071, pvalue=0.89375155241057247)
Ks_2sampResult(statistic=0.03499999999999992, pvalue=0.5654378910227662)
Ks_2sampResult(statistic=0.026599999999999957, pvalue=0.0016502962880920896)
Ks_2sampResult(statistic=0.0081200000000000161, pvalue=0.0027192461984023855)
Ks_2sampResult(statistic=0.0065240000000000853, pvalue=6.4573678008760032e-19)

直觉上我知道随着 n 的增长,测试“更加确定”这两个分布是不同的。但是如果样本量非常大,那么在诸如 Anderson Darling 检验或 t 检验之类的相似性检验中有什么意义,因为在这种情况下,当 n 非常大时,总是会发现分布是“显着”不同!?现在我想知道 p 值到底有什么意义。这在很大程度上取决于样本量...如果 p > 0.05 并且您希望它更低,则只需获取更多数据;如果 p < 0.05 并且您希望它更高,只需删除一些数据。

此外,如果两个分布相同,则 ks-test 统计量将为 0,p 值为 1。但在我的示例中,随着 n 的增加,ks-test 统计量表明分布随着时间变得越来越相似(减少) ,但根据 p 值,它们会随着时间的推移变得越来越不同(也越来越小)。

2个回答

检验统计量减少是因为您的分布非常相似并且较大的样本具有较少的噪声。如果您要比较您使用的两个理论分布,您应该得到“真实”的 KS 统计量。随着您添加更多数据,您估计的 KS 统计量应该接近这个真实值。但是,即使您的 KS 统计量减少,您对它们实际上是两个不同的分布的信心也会增加(即 p 值降低),因为您对各个分布的估计有更大的信心。

在实际操作中:获取更多数据并不容易(我希望如此)。删除数据只是为了得到你想要的值是学术欺诈,如果你被抓住了,你就有麻烦了。p

不过,您是对的,值本身的价值是有限的。充其量这只是你分析的开始,当然不是结束。有关更多信息,请参阅ASA 关于值的声明pp