我正在尝试重新创建最大似然分布拟合,我已经可以在 Matlab 和 R 中做到这一点,但现在我想使用 scipy。特别是,我想估计我的数据集的 Weibull 分布参数。
我试过这个:
import scipy.stats as s
import numpy as np
import matplotlib.pyplot as plt
def weib(x,n,a):
return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)
data = np.loadtxt("stack_data.csv")
(loc, scale) = s.exponweib.fit_loc_scale(data, 1, 1)
print loc, scale
x = np.linspace(data.min(), data.max(), 1000)
plt.plot(x, weib(x, loc, scale))
plt.hist(data, data.max(), density=True)
plt.show()
得到这个:
(2.5827280639441961, 3.4955032285727947)
一个看起来像这样的分布:
exponweib
阅读此http://www.johndcook.com/distributions_scipy.html后,我一直在使用。我还尝试了 scipy 中的其他 Weibull 函数(以防万一!)。
在 Matlab(使用分布拟合工具 - 见截图)和 R(同时使用 MASS 库函数fitdistr
和 GAMLSS 包)中,我得到的 a(loc)和 b(scale)参数更像 1.58463497 5.93030013。我相信这三种方法都使用最大似然法进行分布拟合。
如果您想尝试一下,我已经在这里发布了我的数据!为了完整起见,我使用的是 Python 2.7.5、Scipy 0.12.0、R 2.15.2 和 Matlab 2012b。
为什么我得到不同的结果!?