我正试图重新创建最大似然分布拟合,我已经可以在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。 我相信这三种方法都使用最大似然法进行分布拟合。
我已经公布了我的数据here如果你想试一试!为了完整起见,我使用的是Python 2.7.5,Scipy 0.12.0,R 2.15.2和Matlab 2012b。
为什么我得到的是不同的结果!?