Тест Колмогорова Смирнова на примерку совершенства в питоне

Я пытаюсь соответствовать распределению. Примерка закончена, но мне нужно измерение, чтобы выбрать лучшую модель. Многие работы используют критерий Коломогорова-Смирнова (KS). Я пытался реализовать это, и я получаю очень низкие значения р-значения.

Реализация:

#Histigram plot

binwidth = np.arange(0,int(out_threshold1),1)    
n1, bins1, patches = plt.hist(h1, bins=binwidth, normed=1, facecolor='#023d6b', alpha=0.5, histtype='bar')

#Fitting

gevfit4 = gev.fit(h1)  
pdf_gev4 = gev.pdf(lnspc, *gevfit4)   
plt.plot(lnspc, pdf_gev4, label="GEV")

logfit4 = stats.lognorm.fit(h)  
pdf_lognorm4 = stats.lognorm.pdf(lnspc, *logfit4)  
plt.plot(lnspc, pdf_lognorm4, label="LogNormal")

weibfit4 = stats.weibull_min.fit(h1)  
pdf_weib4 = stats.weibull_min.pdf(lnspc, *weibfit4)  
plt.plot(lnspc, pdf_weib4, label="Weibull")

burr12fit4 = stats.burr12.fit(h1)  
pdf_burr124 = stats.burr12.pdf(lnspc, *burr12fit4)  
plt.plot(lnspc, pdf_burr124, label="Burr")

genparetofit4 = stats.genpareto.fit(h1)
pdf_genpareto4 = stats.genpareto.pdf(lnspc, *genparetofit4)
plt.plot(lnspc, pdf_genpareto4, label ="Gen-Pareto")

#KS-Test
print(stats.kstest(h1, lambda k : stats.genpareto.cdf(k, *genparetofit),args=(),N=len(h1),alternative ='two-sided', mode ='approx'))
print(stats.kstest(h1, lambda k : stats.lognorm.cdf(k, *logfit),args=(),N=len(h1),alternative ='two-sided', mode ='approx'))
print(stats.kstest(h1, lambda k : gev.cdf(k, *gevfit),args=(),N=len(h1),alternative ='two-sided', mode ='approx'))
print(stats.kstest(h1, lambda k : stats.weibull_min.cdf(k, *weibfit),args=(),N=len(h1),alternative ='two-sided', mode ='approx'))
print(stats.kstest(h1, lambda k : stats.burr12.cdf(k, *burr12fit),args=(),N=len(h1),alternative ='two-sided', mode ='approx'))

После этого я получаю такие значения:

KstestResult(statistic=0.065689774346523788, pvalue=2.3778862070128568e-20)
KstestResult(statistic=0.063434691987405312, pvalue=5.2567851875784095e-19)
KstestResult(statistic=0.065047355887551062, pvalue=5.8076254324909468e-20)
KstestResult(statistic=0.25249534411299968, pvalue=8.3670183092211739e-295)
KstestResult(statistic=0.068528435880779559, pvalue=4.1395594967775799e-22)

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

Изображение пристроенных участков

РЕДАКТИРОВАТЬ:

Я подготовил CDF для двух подходящих дистрибутивов. CDF

Они кажутся очень хорошо приспособленными. Но я все еще получаю эти маленькие р-значения.

0 ответов

Проверьте критерий AIC для каждой посадки. Наименьшее из них будет лучшим выбором. Судя по статистике KS, Weibull подходит лучше всего. Хотя есть причины, по которым люди не рекомендуют тест KS для параметров, рассчитанных по образцам.

Значения p для kstest предполагают, что параметры распределения известны. Они не подходят для оценки параметров. Однако, насколько я понимаю, значения p должны быть слишком большими в этом случае, тогда как здесь они очень малы.

Из графика гистограммы видно, что есть некоторые области, которые не соответствуют ни одному из распределений. Кроме того, в данных могут быть некоторые округления или группирование при некоторых дискретных значениях.

Если размер выборки достаточно велик, то любые небольшие отклонения от предполагаемого распределения приведут к отклонению гипотезы о том, что распределение соответствует данным.

Чтобы использовать ks-тест в качестве критерия выбора, мы можем просто взглянуть на ks-статистику или p-значения и выбрать то, которое лучше всего подходит, в данном случае log-normal. Мы получили бы наиболее подходящее распределение среди протестированных наборов, но оно в некоторой степени отличается от "истинного" распределения, которое генерировало данные.

Другие вопросы по тегам