0

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

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)')

我已经检查了两种生成正态分布的方法,numpy但是scipy这并没有给出这是一个正态分布的结果。

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

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

4

1 回答 1

1

scipy.stats.kstest根据给定的分布测试数据 - 使用给定的分布参数(如果有)。当您使用kstest(data, "norm")时,分布是标准正态分布,均值为 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()))
于 2020-09-28T13:53:20.410 回答