Python 使用scipy.stats.kstest查看随机生成的数字是否遵循指定的分布

Python 使用scipy.stats.kstest查看随机生成的数字是否遵循指定的分布,python,scipy,Python,Scipy,我试图从指定参数的选定分布中生成随机数,然后使用Kolmogorov-Smirnov测试查看这些数字是否确实遵循该分布 import matplotlib.pyplot as plt from scipy.stats import johnsonsu values = johnsonsu.rvs(0.4, 1.27, loc = 3.50, scale = 5.97, size = 10000) plt.hist(values, bins = 25) plt.show() 我相信KS检验的无

我试图从指定参数的选定分布中生成随机数,然后使用Kolmogorov-Smirnov测试查看这些数字是否确实遵循该分布

import matplotlib.pyplot as plt
from scipy.stats import johnsonsu
values = johnsonsu.rvs(0.4, 1.27, loc = 3.50, scale = 5.97, size = 10000)
plt.hist(values, bins = 25)
plt.show()


我相信KS检验的无效假设是样本数据遵循指定的分布(本例中为johnson su)。因此,小于0.05的p值拒绝了无效假设,我们得出结论,数据不符合分布?是不是应该相反,还是我遗漏了什么?

如果我将分布参数的完整列表传递给
arg
参数,我会得到您期望的结果,即:

将scipy.stats导入为stats
n=10_000
数值=统计约翰逊苏rvs(0.4,1.27,loc=3.50,标度=5.97,尺寸=n)
打印(stats.kstest(值'johnsonsu',N=N,args=(0.4,1.27,3.5,5.97)))
KstestResult(统计值=0.007110068990121343,pvalue=0.692842480110613)

明白了。因此,您必须使用
args
提供发行版的完整列表。谢谢,否则将传递默认参数
Dstat, Pvalue = scipy.stats.kstest(values, 'johnsonsu', args = (0.4, 1.27))
print(Dstat)
0.48575579351993264
print(Pvalue)
0.0