2016-08-04 197 views
2

使用SciPy,我试图从this question重现威布尔拟合。拟合威布尔与genextreme和weibull_min的分布

import numpy as np 
from scipy.stats import genextreme 
import matplotlib.pyplot as plt 

data=np.array([37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00, 
       38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40, 
       42.26,41.89,38.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40, 
       49.81,38.87,40.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60, 
       45.34,43.37,54.15,42.77,42.88,44.26,27.14,39.31,24.80,16.62,30.30, 
       36.39,28.60,28.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00, 
       38.65,34.54,37.70,38.11,43.05,29.95,32.48,24.63,35.33,41.34]) 

shape, loc, scale = genextreme.fit(data) 

plt.hist(data, normed=True, bins=np.linspace(15, 55, 9)) 

x = np.linspace(data.min(), data.max(), 1000) 
y = genextreme.pdf(x, shape, loc, scale) 
plt.plot(x, y, 'c', linewidth=3) 

的参数是:(0.44693977076022462, 38.283622522613214, 7.9180988170857374)当我使用genextreme功能如下我的配合看起来不错。形状参数是正的,对应于Weibull wikipedia page上的形状参数的符号,据我所知,它相当于R中的负形状参数。

因此,似乎genextreme自己决定分布是Gumbel,Frechet还是Weibull。这里选择了Weibull。

现在我试图重现与weibull_min函数类似的配合。我曾尝试基于this post以下,但参数看我与genextreme有很大的不同:

weibull_min.fit(data, floc=0) 

的参数现在:(6.4633107529634319, 0, 43.247460728065136)

是在0形状参数?如果分布是Weibull,肯定会是正面的?

+0

无耻插件:paramnormal可能会帮助你在这里:http://phobson.github.io/paramnormal/tutorial/fitting.html –

回答

1

weibull_min.fit()返回的参数是(shape, loc, scale)loc是位置参数。 (所有分布SciPy的包括位置参数,甚至那些通常不使用的位置参数。)的weibull_min.fit的文档字符串包括这样的:

Returns 
------- 
shape, loc, scale : tuple of floats 
    MLEs for any shape statistics, followed by those for location and 
    scale. 

您使用的参数floc=0,因此,如所预期,位置参数由fit(data, floc=0)返回为0.

+0

所以我用weibull_min.fit()得到的形状参数是6.46。这与genextreme的0.44非常不同。并非43的比例参数相当高?如何使用weibull_min.fit()拟合数据曲线? –

+0

*关于值:*由weibull_min.fit(data,floc = 0)返回的值与R中fitdistr(mydata,“weibull”)'返回的值非常接近,正如您在链接问题中看到的那样。 –