wake-up-neo.net

Wie generiere ich Verteilungen, Mittelwerte, SD, Skew und Kurtosis?

Kann man Verteilungen in R erzeugen, für die Mean, SD, Skew und Kurtosis bekannt sind? Bisher scheint es der beste Weg zu sein, Zufallszahlen zu erstellen und sie entsprechend umzuwandeln. Wenn es ein Paket gibt, das auf die Erzeugung bestimmter Distributionen zugeschnitten ist, die angepasst werden könnten, habe ich es noch nicht gefunden

34
Aaron B

Das SuppDists-Paket enthält eine Johnson-Distribution. Johnson gibt Ihnen eine Verteilung, die entweder Momente oder Quantile angleicht. Andere Kommentare sind korrekt, dass 4 Momente keine Verteilung machen. Aber Johnson wird es sicherlich versuchen. 

Hier ein Beispiel für die Anpassung eines Johnson an einige Beispieldaten:

require(SuppDists)

## make a weird dist with Kurtosis and Skew
a <- rnorm( 5000, 0, 2 )
b <- rnorm( 1000, -2, 4 )
c <- rnorm( 3000,  4, 4 )
babyGotKurtosis <- c( a, b, c )
hist( babyGotKurtosis , freq=FALSE)

## Fit a Johnson distribution to the data
## TODO: Insert Johnson joke here
parms<-JohnsonFit(babyGotKurtosis, moment="find")

## Print out the parameters 
sJohnson(parms)

## add the Johnson function to the histogram
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

Die endgültige Handlung sieht folgendermaßen aus:

enter image description here

Sie können ein bisschen von dem Problem erkennen, das andere darauf hinweisen, dass 4 Momente eine Verteilung nicht vollständig erfassen. 

Viel Glück! 

EDIT Wie Hadley in den Kommentaren betont hat, sieht der Johnson-Fit aus. Ich habe einen Schnelltest gemacht und die Johnson-Distribution mithilfe von moment="quant" angepasst, wobei die Johnson-Distribution mit 5 Quantilen anstelle der 4 Momente angepasst wird. Die Ergebnisse sehen viel besser aus:

parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

Was produziert das Folgende:

enter image description here

Hat jemand eine Idee, warum Johnson voreingenommen scheint, wenn er mit Momenten fit ist? 

32
JD Long

Dies ist eine interessante Frage, die eigentlich keine gute Lösung bietet. Ich gehe davon aus, dass Sie, obwohl Sie die anderen Momente nicht kennen, eine Vorstellung davon haben, wie die Verteilung aussehen sollte. Zum Beispiel ist es unimodal.

Es gibt verschiedene Möglichkeiten, dieses Problem anzugehen:

  1. Nehmen Sie eine zugrunde liegende Verteilung und passende Momente an. Dafür gibt es viele Standard-R-Pakete. Ein Nachteil ist, dass die multivariate Verallgemeinerung unklar sein kann.

  2. Sattelpunkt-Näherungen. In diesem Papier:

    Gillespie, C. S. und Renshaw, E. Eine verbesserte Sattelpunktannäherung.Mathematische Biowissenschaften, 2007.

    Wir versuchen, ein pdf/pmf wiederherzustellen, wenn nur die ersten Momente gegeben sind. Wir haben festgestellt, dass dieser Ansatz funktioniert, wenn die Schiefe nicht zu groß ist. 

  3. Laguerre-Erweiterungen:

    Mustapha, H. und Dimitrakopoulosa, R. Generalisierte Laguerre-Expansionen multivariater Wahrscheinlichkeitsdichten mit Momenten . Computer & Mathematik mit Anwendungen, 2010. 

    Die Ergebnisse in diesem Artikel scheinen vielversprechender zu sein, aber ich habe sie nicht kodiert.

12
csgillespie

Diese Frage wurde vor mehr als 3 Jahren gestellt, daher hoffe ich, dass meine Antwort nicht zu spät kommt. 

Is eine Möglichkeit, eine Verteilung eindeutig zu identifizieren, wenn einige Momente bekannt sind. Dies ist die Methode von Maximum Entropy. Die Verteilung, die sich aus dieser Methode ergibt, ist die Verteilung, die Ihre Unkenntnis über die Struktur der Verteilung maximiert, vorausgesetzt, was Sie wissen. Jede andere Verteilung, die auch die von Ihnen angegebenen Momente hat, jedoch nicht die MaxEnt-Verteilung ist, nimmt implizit mehr Struktur an, als Sie eingegeben haben. Die zu maximierende Funktion ist Shannons Information Entropy, $ S [p (x)] = -\int p (x) log p(x) dx $. Wenn Sie den Mittelwert, den Wert sd, die Schiefe und die Kurtosis kennen, übersetzen Sie dies als Einschränkungen für den ersten, zweiten, dritten und vierten Moment der Verteilung.

Das Problem ist dann die Maximierung von S mit den Einschränkungen: 1) $\int x p(x) dx = "erster Moment" $,. $\int x ^ 2 p(x) dx = "zweiter Moment" $, 3) ... und so weiter

Ich empfehle das Buch "Harte, J., Maximum Entropy and Ecology: Eine Theorie des Überflusses, der Verbreitung und der Energetik (Oxford University Press, New York, 2011)."

Hier ist ein Link, der versucht, dies in R zu implementieren: https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r

7
agomez137

Ich stimme zu, dass Sie eine Dichteschätzung benötigen, um eine Verteilung zu replizieren. Wenn Sie jedoch, wie in einer Monte-Carlo-Simulation üblich, Hunderte von Variablen haben, müssen Sie einen Kompromiss eingehen. 

Ein vorgeschlagener Ansatz lautet wie folgt:

  1. Verwenden Sie die Fleishman-Transformation, um den Koeffizienten für die angegebene Schräglage und Kurtosis zu erhalten. Fleishman nimmt die Schräglage und Kurtosis und gibt Ihnen die Koeffizienten
  2. Generiere N normale Variablen (Mittelwert = 0, Standard = 1)
  3. Transformieren Sie die Daten in (2) mit den Fleishman-Koeffizienten, um die normalen Daten in die gegebene Schräglage und Kurtosis umzuwandeln
  4. Verwenden Sie in diesem Schritt Daten aus Schritt (3) und transformieren Sie sie unter Verwendung neuer_Daten = gewünschter Mittelwert + (Daten aus Schritt 3) * gewünschter Standard in den gewünschten Mittelwert und die Standardabweichung (std)

Die sich ergebenden Daten aus Schritt 4 haben den gewünschten Mittelwert, Standard, Schiefe und Wölbung.

Vorsichtsmaßnahmen:

  1. Fleishman funktioniert nicht bei allen Kombinationen aus Schiefe und Kurtois
  2. Die obigen Schritte setzen nicht korrelierte Variablen voraus. Wenn Sie korrelierte Daten generieren möchten, benötigen Sie vor der Fleishman-Transformation einen Schritt 
3
user1998794

Eine Lösung für Sie könnte die PearsonDS-Bibliothek sein. Sie können eine Kombination der ersten vier Momente mit der Einschränkung verwenden, dass die Kurtosis> Schiefe ^ 2 + 1 ist.

So generieren Sie 10 Zufallswerte aus dieser Verteilung:

library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
3
Josh W

Diese Parameter definieren eine Verteilung nicht wirklich. Dafür benötigen Sie eine Dichte oder gleichwertig eine Verteilungsfunktion.

2
David Heffernan

Die Entropiemethode ist eine gute Idee, aber wenn Sie die Datenmuster haben, verwenden Sie mehr Informationen als nur die Momente! So ist ein Moment Fit oft weniger stabil. Wenn Sie keine weiteren Informationen darüber haben, wie die Verteilung aussieht, ist Entropie ein gutes Konzept. Wenn Sie jedoch weitere Informationen haben, z. über die Unterstützung, dann nutzen Sie es! Wenn Ihre Daten schief und positiv sind, ist die Verwendung eines lognormalen Modells eine gute Idee. Wenn Sie wissen, dass auch der obere Schwanz endlich ist, verwenden Sie nicht den Lognormal, sondern möglicherweise die 4-Parameter-Beta-Verteilung. Wenn über Support- oder Tail-Merkmale nichts bekannt ist, ist ein skaliertes und verschobenes Lognormal-Modell möglicherweise in Ordnung. Wenn Sie hinsichtlich der Kurtosis mehr Flexibilität benötigen, dann können z. Ein logT mit Skalierung + Verschiebung ist oft in Ordnung. Es kann auch hilfreich sein, wenn Sie wissen, dass die Anpassung nahezu normal sein sollte. Wenn dies der Fall ist, verwenden Sie ein Modell, das die Normalverteilung enthält (oft ohnehin der Fall). Andernfalls können Sie z. Verwenden Sie eine generalisierte secant-hyperbolische Verteilung. Wenn Sie all dies tun möchten, hat das Modell irgendwann unterschiedliche Fälle, und Sie sollten sicherstellen, dass es keine Lücken oder schlechte Übergangseffekte gibt.

1
user32038

Wie @David und @Carl oben geschrieben haben, gibt es mehrere Pakete, die dazu dienen, unterschiedliche Distributionen zu erzeugen, siehe z. die Wahrscheinlichkeitsverteilungsaufgabe auf CRAN .

Wenn Sie an der Theorie interessiert sind (wie Sie eine Stichprobe von Zahlen zeichnen, die mit den angegebenen Parametern zu einer bestimmten Verteilung passen), suchen Sie einfach nach den entsprechenden Formeln, z. Sehen Sie sich die gamma-Distribution auf Wiki an, und erstellen Sie ein einfaches Qualitätssystem mit den bereitgestellten Parametern, um Größe und Form zu berechnen.

Sehen Sie ein konkretes Beispiel hier , bei dem ich die Alpha- und Beta-Parameter einer erforderlichen Beta-Verteilung basierend auf Mittelwert und Standardabweichung berechnet habe.

0
daroczig