python的Kolmogorov测试

时间:2020-09-28 13:42:22

标签: python numpy scipy statistics kolmogorov-smirnov

我正在尝试测试数据是否遵循“正态”分布,但是kstest无法正常运行。通过使用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),我得到的是正态分布。

我在这里想念的是什么? 为什么此检验不直接证明正态结果?

1 个答案:

答案 0 :(得分:1)

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

您可以按照问题中显示的方式对数据进行归一化,或者,如果碰巧知道参数,则可以使用kstest参数将其传递给args

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

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

ksstat, p_value = kstest(data, "norm", args=(data.mean(), data.std()))
相关问题