Предположим, что у меня есть некоторые данные, которые я получил эмпирически:
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)
Однако я не могу найти хороший способ вычисления теста хи-квадрат.
Существует chi-squared GoF-функция в statsmodel, но она предполагает дискретное распределение (и экспоненциальное распределение непрерывно).
официальное учебное пособие по scipy.stats охватывает только случай для пользовательского распространения, а вероятности создаются путем использования многих выражений (npoints, npointsh, nbound, normbound), поэтому мне не совсем понятно, как это сделать для других дистрибутивов. примеры chisquare предполагают, что ожидаемые значения и DoF уже получены.
Кроме того, я не ищу способ "вручную" выполнить тест, как уже обсуждался , но хотел бы знать, как применить один из доступных библиотечных функций.