Я пытаюсь написать тест доброкачественности чи-квадрата для бета-распространения с нуля, без каких-либо внешних функций. Код ниже сообщает «1» для подгонки, хотя kstest из scipy.stats возвращает ноль. Данные распределяются нормально, поэтому моя функция также должна возвращать ноль.Тест Квай-Квадрата с использованием частот, бинов, CDF, Python
import numpy as np
from scipy.stats import chi2
from scipy.stats import beta
from scipy.stats import kstest
from scipy.stats import norm
preds = norm.rvs(5,2,size=200)
preds.sort()
bin_size = 30
bins = np.linspace(0,10,bin_size)
counts = np.digitize(preds, bins)
mean = 5
var = 2
sum = 0
for i in range(len(bins)-1):
p = beta.cdf(bins[i+1], mean, var) - beta.cdf(bins[i], mean, var)
freq = len(counts[counts==i])/float(len(counts))
sum = sum + ((freq - p)**2)/p
dof = len(counts)-2
pval = 1 - chi2.cdf(sum, dof)
print pval
В коде, я создаю бункеры, частоты мера, основанная на бункерах, рассчитать ожидаемую частоту с помощью бета-распределения CDF и подвести его в результате X^2 тестовой статистики.
Вызов kstest является
print kstest(preds, 'beta', [mean, var])
Что я здесь делаю неправильно?
Спасибо,
Каков текущий выход? – Wok
Вывод «1» для моей функции и (0.97653486524680988, 0.0) для вызова kstest. – user423805