如何解决python的Kolmogorov测试
我正在尝试测试数据是否遵循“正态”分布,但是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)')
我已经检查了使用numpy
和scipy
生成正态分布的两种方法,但这并不能给出正态分布。
但是,通过转换(data - np.mean(data))/np.std(data)
,我得到的是正态分布。
我在这里想念的是什么? 为什么此检验不直接证明正态结果?
解决方法
scipy.stats.kstest
使用给定的分布参数(如果有)针对给定的分布测试数据。当您使用kstest(data,"norm")
时,分布是 standard 正态分布,均值为0,标准偏差为1。您生成的数据的均值为80,标准偏差为6,因此自然不匹配
您可以按照问题中显示的方式对数据进行归一化,或者,如果碰巧知道参数,则可以使用kstest
参数将其传递给args
:
ksstat,p_value = kstest(data,"norm",args=(80,6))
或者,您可以根据数据估算参数:
ksstat,args=(data.mean(),data.std()))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。