感谢那些先看看的人。
我的代码是:
import numpy as np
from scipy.stats import kstest
data=[31001, 38502, 40842, 40852, 43007, 47228, 48320, 50500, 54545, 57437, 60126, 65556, 71215, 78460, 81299, 96851, 106472, 108398, 118495, 130832, 141678, 155703, 180689, 218032, 222238, 239553, 250895, 274025, 298231, 330228, 330910, 352058, 362993, 369690, 382487, 397270, 414179, 454013, 504993, 518475, 531767, 551032, 782483, 913658, 1432195, 1712510, 2726323, 2777535, 3996759, 13608152]
x=np.array(data)
test_sta=kstest(x, 'norm')
print(test_sta)
kstest的结果为KstestResult(statistic = 1.0,pvalue = 0.0)。代码有什么问题还是数据根本不正常?
答案 0 :(得分:0)
我以前没有使用过,但是我认为您正在测试数据是否为标准正态(即均值= 0,方差= 1)
对直方图进行绘图显示,它更接近对数正态。因此,我会这样做:
x = np.log(data)
x -= np.mean(x)
x /= np.std(x)
kstest(x, 'norm')
这提供了0.095的测试统计量和0.75的p值,确认我们不能否认它不是对数正态。
一种检查这种情况的好方法是(从已知的分布中)生成一些随机数据,并查看测试返回的结果。例如:
kstest(np.random.normal(size=100), 'norm')
为我提供接近1的p值,同时:
kstest(np.random.normal(loc=13, size=100), 'norm')
为我提供了接近0的p值。
对数正态分布仅表示对数转换后为正态分布。如果您真的想针对正态分布进行测试,则无需对数据进行日志转换,例如:
x = np.array(data, dtype=float)
x -= np.mean(x)
x /= np.std(x)
kstest(x, 'norm')
这给我一个7e-7的p值,表明我们可以可靠地拒绝它为正态分布的假设。