2016-08-04 2 views
2

En utilisant SciPy, j'essaie de reproduire l'ajustement de Weibull de this question. Mon ajustement semble bon quand j'utilise la fonction genextreme comme suit:Fit Weibull à la distribution avec genextreme et 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) 

Les paramètres sont les suivants: (0.44693977076022462, 38.283622522613214, 7.9180988170857374). Le paramètre de forme est positif, correspondant au signe du paramètre de forme sur le Weibull wikipedia page qui, si je comprends bien, est équivalent à un paramètre de forme négative dans R?

Il semble donc que genextreme décide lui-même si la distribution est Gumbel, Frechet ou Weibull. Ici, il a choisi Weibull.

Maintenant, j'essaie de reproduire un ajustement similaire avec la fonction weibull_min. Je l'ai essayé ce qui suit sur la base this post, mais les paramètres très différent de ce que je suis arrivé avec genextreme:

weibull_min.fit(data, floc=0) 

Les paramètres sont maintenant: (6.4633107529634319, 0, 43.247460728065136)

Est-ce le 0 le paramètre de forme? Sûrement, il devrait être positif si la distribution est Weibull?

+0

plug sans scrupule: paramnormal pourrait vous aider ici: http://phobson.github.io/paramnormal/tutorial/fitting.html –

Répondre

1

Les paramètres renvoyés par weibull_min.fit() sont (shape, loc, scale). loc est le paramètre d'emplacement. (Toutes les distributions SciPy comprennent un paramètre de localisation, même ceux où un paramètre de localisation est normalement utilisé.) Le docstring de weibull_min.fit comprend ceci:

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

Vous avez utilisé l'argument floc=0, donc, comme prévu, le paramètre de localisation retourné par fit(data, floc=0) est 0.

+0

donc le paramètre de forme que je reçois avec weibull_min.fit() est 6.46. C'est très différent de 0,44 avec genextreme. Et n'est pas un paramètre d'échelle de 43 assez élevé? Comment adapter une courbe aux données en utilisant weibull_min.fit()? –

+0

* Concernant les valeurs: * Les valeurs renvoyées par 'weibull_min.fit (data, floc = 0)' correspondent à celles renvoyées par 'fitdistr (mydata," weibull ")' dans R assez proche, comme vous pouvez le voir dans la question liée . –