假设我有一些经验数据:
from scipy import stats
size = 10000
x = 10 * stats.expon.rvs(size=size) + 0.2 * np.random.uniform(size=size)
它呈指数分布(带有一些噪声),我想使用卡方拟合优度 (GoF) 测试来验证这一点。使用 Python 中的标准科学库(例如 scipy 或 statsmodels)以最少的手动步骤和假设来做到这一点的最简单方法是什么?
我可以拟合一个模型:
param = stats.expon.fit(x)
plt.hist(x, normed=True, color='white', hatch='/')
plt.plot(grid, distr.pdf(np.linspace(0, 100, 10000), *param))
>>> stats.kstest(x, lambda x : stats.expon.cdf(x, *param))
(0.0061000000000000004, 0.85077099515985011)
但是,我找不到计算卡方检验的好方法。
statsmodel 中有一个卡方 GoF 函数,但它假设离散分布(并且指数分布是连续的)。
官方 scipy.stats 教程仅涵盖自定义分布的情况,并且概率是通过摆弄许多表达式(npoints、npointsh、nbound、normbound)来构建的,所以我不太清楚如何为其他分布做这件事。卡方示例假设已经获得了预期值和自由度。
另外,我不是在寻找一种“手动”执行测试的方法,正如这里已经讨论过的那样,而是想知道如何应用一个可用的库函数。