我正在尝试调整分布。装修完成了,但是我需要测量,以选择最佳的型号。许多论文正在使用Kolomogorov-Smirnov(KS)测试。我试图实现这一点,但得到的p值却很低。
#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)
这些值合理吗?是否仍有可能选择最佳型号?是最佳拟合模型,还是统计值最小的模型?
它们看起来非常合身。但是我仍然得到那些小的p值。
答案 0 :(得分:0)
检查每种配合的AIC标准。其中最少的将是最合适的。从您的KS统计数据来看,Weibull最合适。尽管出于某些原因,人们不建议使用KS测试来评估根据样本计算出的参数。
答案 1 :(得分:0)
kstest的p值假定分布的参数是已知的。当估计参数时,它们不合适。但是,据我了解,在这种情况下,p值应该太大,而在这里它们很小。
从直方图上看,似乎有些区域与任何分布都不完全匹配。此外,数据可能会四舍五入,或在某些离散值处聚集。
如果样本量足够大,则与假设分布的任何小偏差都会导致拒绝该分布与数据匹配的假设。
要将ks-test用作选择标准,我们只需查看ks统计量或p值,然后选择最匹配的值(在这种情况下为对数正态)。我们将在测试的集合中获得最佳拟合分布,但是它与生成数据的“真实”分布有所不同。