问题描述
我正在尝试使用 scipy.stats 在 Python 中复制 R 的 fitdist()
结果(参考,无法修改 R 代码)。结果非常接近但仍然不同(差异处于不可接受的水平)。有人知道为什么结果不同吗?如何减少结果之间的差异?
scipy_stats.weibull_min
定义 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.weibull_min.html) 似乎与 R 的 weibull (https://stat.ethz.ch/R-manual/R-devel/library/stats/html/Weibull.html) 相同。
数据示例:
data = [2457.145,878.081,855.118,1157.135,1099.82]
R:
parameters <- fitdist(data,'weibull',"mle")$estimate
R 结果:
shape scale
2.30804 1463.88528
Python:
import scipy.stats as st
st.weibull_min.fit(data,floc=0)
Python 结果:
(2.307899817944195,1463.7712925885176)
解决方法
差异似乎是优化器使用的默认相对容差的结果(以及正常的浮点不精确性)。如果在 R 计算中收紧容差,则结果更接近 SciPy 结果:
> parameters <- fitdist(data,"weibull",method="mle",control=list(reltol=1e-14))$estimate
> parameters
shape scale
2.3079 1463.7715