了解 scipy Kolmogorov-Smirnov 测试

机器算法验证 拟合优度 kolmogorov-smirnov 测试 scipy
2022-03-23 01:36:35

我正在尝试使用一个非常简单的示例来理解 Kolmogorov-Smirnov 测试。我生成一组介于 0 和 1.0 之间的随机、统一的值。然后,我使用scipy kstest 函数测试这些值是否来自均匀分布我期望一个非常小的 D 值和一个接近 1.0 的 pvalue,但是每次运行代码时我都会得到非常不同的 pvalue。我错过了什么?

import numpy as np
import scipy
a = np.random.uniform(size=4999)
print(scipy.stats.kstest(a, 'uniform'))

以下是几次连续运行的输出:

(0.0075523161200627964, 0.93798952050647577)
(0.013787195268362473, 0.29799260741344774)
(0.014359046616557847, 0.25402403230845855)
(0.012521820948675988, 0.41329007558099806)
(0.011159003477582918, 0.56216895575676396)
1个回答

对于 KS 测试,如果 H0 为真,则 p 值本身均匀分布在 [0,1] 中(如果您测试您的样本是否来自U(0,1)并且随机数生成工作正常)。因此它必须在 0 和 1 之间“剧烈变化”,实际上它的标准差是1/12大约是 0.3。

您可以通过查看 p 值的百分比是否小于或等于某个p0在你的独立连续运行中接近说p0.

另请参阅为什么 p 值在原假设下均匀分布?