python 的 Kolmogorov 检验

Kolmogorov test for python

我正在尝试测试数据是否遵循“正态”分布,但 kstest 没有按我预期的那样工作。 Vy 使用 numpy 中的 normal 它“从正态(高斯)分布中抽取随机样本”。

from scipy.stats import kstest, norm
from numpy.random import seed, normal

seed(42)
data = normal(80, 6, 1000)
# data = norm.rvs(loc=80, scale=6, size=1000)

ksstat, p_value = kstest(data, "norm")

if p_value > 0.05:
    print('it looks like Gaussian (fail to reject H0)')
else:
    print('it doesnt looks like Gaussian (reject H0)')

我已经用 numpyscipy 检查了两种生成正态分布的方法,但这并不是正态分布。

但是,通过变换 (data - np.mean(data))/np.std(data) 我得到了正态分布。

我在这里缺少什么? 为什么不直接用这个测试结果是正常的?

scipy.stats.kstest 根据给定的分布测试数据——使用给定的分布参数(如果有的话)。当您使用 kstest(data, "norm") 时,分布是 标准 正态分布,均值为 0,标准差为 1。您生成的数据均值为 80,标准差为 6,因此自然不匹配。

您可以按照问题中显示的那样对数据进行标准化,或者,如果您碰巧知道参数,则可以使用 args 参数将它们传递给 kstest

ksstat, p_value = kstest(data, "norm", args=(80, 6))

或者,您可以根据数据估算参数:

ksstat, p_value = kstest(data, "norm", args=(data.mean(), data.std()))