【发布时间】:2021-01-08 19:33:46
【问题描述】:
我正在对一些整数数据拟合 Weibull 分布,并估计相关的形状、比例、位置参数。但是,我注意到 scipy.stats 库在这样做时性能不佳。
所以,我采取了不同的方向,并使用下面的代码检查了合身性能。我首先使用 Weibull 分布创建 100 个数字,参数 shape=3、scale=200、location=1。随后,我使用 fitter 库估计最佳分布拟合。
from fitter import Fitter
import numpy as np
from scipy.stats import weibull_min
# generate numbers
x = weibull_min.rvs(3, scale=200, loc=1, size=100)
# make them integers
data = np.asarray(x, dtype=int)
# fit one of the four distributions
f = Fitter(data, distributions=["gamma", "rayleigh", "uniform", "weibull_min"])
f.fit()
f.summary()
我希望最适合的是 Weibull 分布。我试过重新运行这个测试。有时 Weibull 拟合是一个很好的估计。然而,大多数时候 Weibull 拟合被报告为最差的结果。在这种情况下,估计的参数为 = (0.13836651040093312, 66.99999999999999, 1.3200752378443505)。我假设这些参数依次对应于形状、比例、位置。以下是拟合过程的摘要。
$ f.summary()
sumsquare_error aic bic kl_div
gamma 0.001601 1182.739756 -1090.410631 inf
rayleigh 0.001819 1154.204133 -1082.276256 inf
uniform 0.002241 1113.815217 -1061.400668 inf
weibull_min 0.004992 1558.203041 -976.698452 inf
此外,瑞利分布是形状参数 = 2 的 Weibull 分布的特例。因此,我希望得到的 Weibull 拟合至少与 Rayleigh 一样好。
更新
我在 numpy 版本 1.19.2 和 scipy 版本 1.5.2 的 Linux/Ubuntu 20.04 机器上运行了上述测试。上面的代码似乎按预期运行,并为 Mac 机器上的 Weibull 分发返回了正确的结果。
我还测试了使用 R 库 fitdistrplus 在 Linux 机器上生成的数据 x 拟合 Weibull 分布:
fit.weib <- fitdist(x, "weibull")
并观察到估计的形状和比例值与最初给定的值非常接近。到目前为止,最好的猜测是问题是由于一些 Python-Ubuntu 错误/不兼容造成的。
我可以被认为是这个领域的新手。所以,我想知道,我在这里做错了吗?还是以某种方式预期这个结果?非常感谢任何帮助。
谢谢。
【问题讨论】:
标签: python-3.x distribution weibull scipy.stats