2013-10-26 9 views
6

random.gauss (mu, Sigma)Wie generiert man in Python eine Verteilung mit gegebenem Mittelwert, Varianz, Skew und Kurtosis?

Oben ist eine Funktion, um eine Anzahl von einer Normalverteilung mit einem gegebenen Mittelwert und die Varianz, um zufällig zu zeichnen ermöglicht. Aber wie können wir Werte aus einer Normalverteilung zeichnen, die durch mehr als nur die zwei ersten Momente definiert wird?

so etwas wie:

random.gauss (mu, sigma, Skew, Kurtosis)

+4

Jede Normalverteilung hat Skew 0 und Kurtosis 0. Verwenden Sie eine andere Familie von Verteilungen. –

+1

Vorsicht, es gibt mehrere Möglichkeiten, die Berechnung für Skew und Kurtosis zu definieren. Momente sind nicht äquivalent zu Mittelwert, Varianz, Skew und Kurtosis, obwohl sie den gleichen Kern haben. –

+2

Außerdem geben die Momente keine eindeutige Verteilung an. Siehe [diese ähnliche Frage, aber Fragen über R: http://StackOverflow.com/Questions/4807398/How-to-generate-distributions-given-mean-sd-skew-and-kurtosis-in-r –

Antwort

1

Versuchen Sie, diese zu nutzen:

http://statsmodels.sourceforge.net/devel/generated/statsmodels.sandbox.distributions.extras.pdf_mvsk.html#statsmodels.sandbox.distributions.extras.pdf_mvsk

Return die Gaußsche erweiterte PDF-Funktion angesichts der Liste der 1., 2. Moment und Skew und Fisher (Überschuß) Kurtosis.

Parameter: MVSK: Liste der mu, mc2, Skew, kurt

mir gut aussieht. Es gibt einen Link zur Quelle auf dieser Seite.

Oh, und hier ist die andere Stackoverflow Frage, die mich dort hin: Apply kurtosis to a distribution in python

+0

Gibt es eine bequeme Möglichkeit, Werte aus dieser Verteilung zu ziehen, anstatt nur die Dichte zu berechnen? – kuzzooroo

+0

was ist hier mit mc2 gemeint? Ich erwarte Varianz, aber ich will nur sicher sein. –

4

Wie wäre es scipy mit? Sie können die gewünschte Distribution unter continuous distributions in the scipy.stats library auswählen. Die verallgemeinerte Gammafunktion hat eine ungleiche Schieflage und Wölbung, aber Sie müssen noch ein wenig arbeiten, um herauszufinden, welche Parameter verwendet werden müssen, um die Verteilung zu spezifizieren, um einen bestimmten Mittelwert, Varianz, Skew und Kurtosis zu erhalten. Hier ist ein Code, mit dem Sie beginnen können.

import scipy.stats 
import matplotlib.pyplot as plt 
distribution = scipy.stats.norm(loc=100,scale=5) 
sample = distribution.rvs(size=10000) 
plt.hist(sample) 
plt.show() 
print distribution.stats('mvsk') 

Dies zeigt ein Histogramm einer 10.000 Elementprobe aus einer Normalverteilung mit einem Mittelwert von 100 und eine Varianz 25 und druckt die Statistiken der Verteilung:

(array(100.0), array(25.0), array(0.0), array(0.0))

die Normalverteilung mit dem verallgemeinerten Gamma Ersetzen Verteilung,

distribution = scipy.stats.gengamma(100, 70, loc=50, scale=10) 

Sie erhalten die Statistiken [Mittelwert, Varianz, Skew, Kurtosis] (array(60.67925117494595), array(0.00023388203873597746), array(-0.09588807605341435), array(-0.028177799805207737)).

Verwandte Themen