0

我正在尝试拟合分布。配件已完成,但我需要测量,以选择最佳型号。许多论文都使用 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)

这些值是否合理?仍然可以选择最好的模型吗?最佳拟合模型是统计值最小的模型吗?

拟合图的图像

编辑:

我绘制了两个拟合分布的 CDF。 CDF

它们看起来非常合身。但我仍然得到那些小的 p 值。

4

2 回答 2

0

kstest 的 p 值假设分布的参数是已知的。在估计参数时它们是不合适的。但是,据我了解,在这种情况下 p 值应该太大,而在这里它们非常小。

从直方图中可以看出,有些区域与任何分布都没有很好地匹配。此外,数据中可能存在一些舍入或某些离散值的聚集。

如果样本量足够大,那么与假设分布的任何微小偏差都将导致拒绝分布与数据匹配的假设。

要将 ks-test 用作选择标准,我们只需查看 ks-statistic 或 p 值并选择最匹配的那个,在这种情况下为对数正态。我们将在测试集中获得最佳拟合分布,但它在某种程度上偏离了生成数据的“真实”分布。

于 2019-06-18T14:34:18.180 回答
0

检查每个拟合的 AIC 标准。其中最少的将是最合适的。从您的 KS 统计数据来看,Weibull 最适合。尽管人们不建议对从样本计算的参数进行 KS 测试是有原因的。

于 2019-06-18T06:27:03.610 回答