Weibull:R 与 Python - 结果略有不同

问题描述

我正在尝试使用 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