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)')
我已经用 numpy
和 scipy
检查了两种生成正态分布的方法,但这并不是正态分布。
但是,通过变换 (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()))
我正在尝试测试数据是否遵循“正态”分布,但 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)')
我已经用 numpy
和 scipy
检查了两种生成正态分布的方法,但这并不是正态分布。
但是,通过变换 (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()))