2016-08-04 56 views
2

Mit SciPy versuche ich die Weibull Fit von this question zu reproduzieren. Mein fit sieht gut aus, wenn ich die genextreme Funktion wie folgt:Fit Weibull zur Verteilung mit Genxtreme und 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) 

Die Parameter sind: (0.44693977076022462, 38.283622522613214, 7.9180988170857374). Der Formparameter ist positiv, entsprechend dem Vorzeichen des Formparameters auf der Weibull wikipedia page, die, wie ich verstehe, einem negativen Formparameter in R äquivalent ist.

So scheint es genextreme entscheidet von selbst, ob die Verteilung Gumbel, Frechet oder Weibull ist. Hier hat es Weibull gewählt.

Jetzt versuche ich eine ähnliche Passform mit der weibull_min Funktion zu reproduzieren. Ich habe das auf this post Basis folgende versucht, aber die Parameter ganz anders aussehen als auf das, was ich bekam mit genextreme:

weibull_min.fit(data, floc=0) 

Die Parameter sind jetzt: (6.4633107529634319, 0, 43.247460728065136)

Ist 0 der Formparameter? Sicherlich sollte es positiv sein, wenn die Verteilung Weibull ist?

+0

schamlosen Stecker: paramnormal könnte Ihnen hier helfen: http://phobson.github.io/paramnormal/tutorial/fitting.html –

Antwort

1

Die von weibull_min.fit() zurückgegebenen Parameter sind (shape, loc, scale). loc ist der Standortparameter. (Alle scipy Distributionen enthalten einen Positionsparameter, auch solche, bei denen ein Positionsparameter wird normalerweise nicht verwendet.) Das docstring von weibull_min.fit umfasst dies:

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

Sie verwenden das Argument floc=0, so, wie erwartet, der Lageparameter zurückgegeben von fit(data, floc=0) ist 0.

+0

so der Formparameter ich mit Weibull_min.fit() erhalten 6.46. Das ist sehr unterschiedlich zu 0.44 mit dem Genextreme. Und ist ein Skalenparameter von 43 nicht ziemlich hoch? Wie würde man eine Kurve an die Daten mit Weibull_Min.fit() anpassen? –

+0

* In Bezug auf die Werte: * Die von 'weibull_min.fit (data, floc = 0) 'zurückgegebenen Werte stimmen mit denen überein, die von' fitdistr (mydata, "weibull") 'in R ziemlich genau zurückgegeben werden, wie Sie in der verknüpften Frage sehen können . –