2017-02-12 9 views
2

Итак, я пытаюсь использовать реализацию scistys kstest как способ оценки того, какое распределение лучше всего подходит для данных. Мое понимание того, как работает kstest, состоит в том, что статистика представляет вероятность нулевой гипотезы (т. Е. Возвращаемая вероятность - вероятность того, что рассматриваемая модель неверна для данных). Это работает примерно как и ожидалось для равномерного распределения betwen 0,0 и 1,0scipy kstest не согласуется в разных диапазонах

а = np.random.uniform (размер = 4999)

печати (scipy.stats.kstest (а, 'однородным', арг = (0.0,1.0)))

KstestResult (статистика = 0,010517039009963702, p-значение = 0,63796173656227928)

Однако, когда я сдвигают равномерное распределение оценок из (0,0, 1,0) до (2.0,3.0), статистика KS является странно высокой

а = np.random.uniform (2.0, 3.0, размер = 4999)

печати (scipy.stats.kstest (а, 'однородные', Args = (2.0,3.0)))

KstestResult (статистика = 0,66671700832788283, p-значение = 0,0)

не должны значение тестовой статистики во втором случае не может быть низкой, а также, так как параметры прошло приближенное распределение так близко, как раньше?

+0

Возможно, перейдите или найдите дубликаты на [CrossValidated] (http://stats.stackoverflow.com) – smci

+0

@smci как я могу это сделать? – BruceJohnJennerLawso

+0

На самом деле это выглядит нормально и по теме для SO – smci

ответ

3

numpy (используемый вами) и scipy.stats (используется тест К.С.) версии uniform работают по-разному:

>>> np.random.uniform(2,3,5000).max() 
2.9999333044165271 
>>> stats.uniform(2,3).rvs(5000).max() 
4.9995316751114043 

В numpy второй параметр интерпретируется как верхняя граница, в scipy.stats это scale параметр, т. е. ширину.