2016-08-04 9 views
2

SciPy를 사용하여 weibull fit을 this question에서 재현하려고합니다.Weitull에 맞는 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 기능을 사용할 때 내 적합 좋아 보인다. shape 매개 변수는 양수입니다. Weibull wikipedia page에있는 shape 매개 변수의 부호에 해당합니다. R에서 음수 모양 매개 변수와 동일한 것으로 알고 있습니까?

따라서 genextreme은 배포본이 Gumbel, Frechet 또는 Weibull인지 여부를 자체적으로 결정합니다. 여기 Weibull이 선택되었습니다.

이제는 weibull_min 기능으로 비슷한 피팅을 재현하려고합니다. 나는 this post에 따라 다음을 시도하지만, 매개 변수 내가 genextreme에있어 것과 매우 다를 수 :

weibull_min.fit(data, floc=0) 

매개 변수는 지금 : (6.4633107529634319, 0, 43.247460728065136)

0 모양 매개 변수인가? 분배가와 이블이면 확실하게 긍정적일까요?

+0

뻔뻔한 플러그 : paramnormal이 여기에서 도움이 될 수 있습니다. http://phobson.github.io/paramnormal/tutorial/fitting.html –

답변

1

weibull_min.fit()에 의해 반환 된 매개 변수는 (shape, loc, scale)입니다. loc은 위치 매개 변수입니다. (모든 scipy 분포에도 그 위치 파라미터는 일반적으로 사용되지 어디에 위치 매개 변수를 포함한다.) weibull_min.fit의 참조 문이 포함 예상대로 인수 floc=0 사용하므로

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

, 위치 파라미터 fit(data, floc=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")' . –