skewness - Wie generiert man Verteilungen, Mittelwert, SD, Skew und Kurtosis in R?




schiefe und kurtosis in r (4)

Das ist eine interessante Frage, die eigentlich keine gute Lösung hat. Ich nehme an, dass Sie, obwohl Sie die anderen Momente nicht kennen, eine Vorstellung davon haben, wie die Verteilung aussehen soll. Zum Beispiel ist es unimodal.

Es gibt ein paar verschiedene Möglichkeiten, dieses Problem anzugehen:

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

  2. Sattelpunkt Annäherungen. In diesem Papier:

    Gillespie, CS und Renshaw, E. Eine verbesserte Sattelpunktapproximation. Mathematische Biowissenschaften , 2007.

    Wir betrachten die Wiederherstellung eines pdf / PMF, wenn nur die ersten Momente gegeben werden. Wir fanden heraus, 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 Papier erscheinen vielversprechender, aber ich habe sie nicht codiert.

Ist es möglich, Verteilungen in R zu generieren, für die der Mittelwert, SD, Skew und Kurtosis bekannt sind? Bis jetzt scheint es der beste Weg zu sein, Zufallszahlen zu erzeugen und sie entsprechend zu transformieren. Wenn es ein Paket gibt, das darauf zugeschnitten ist, bestimmte Distributionen zu erzeugen, die angepasst werden können, habe ich es noch nicht gefunden. Vielen Dank


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

Es gibt eine Möglichkeit, eine Distribution eindeutig zu identifizieren, wenn Sie einige der Momente kennen. So ist die Methode der maximalen Entropie . Die Verteilung, die sich aus dieser Methode ergibt, ist die Verteilung, die Ihre Ignoranz bezüglich der Struktur der Verteilung maximiert, vorausgesetzt, dass Sie wissen , was Sie wissen . Jede andere Verteilung, die auch die von Ihnen angegebenen Momente aufweist, aber nicht die MaxEnt-Verteilung, nimmt implizit mehr Struktur an als Sie eingegeben haben. Die zu maximierende Funktion ist Shannons Informationsentropie, $ S [p (x)] = - \ int p (x) log p (x) dx $. Die Mittelwerte, die Sd, die Schiefe und die Kurtosis zu kennen, werden als Einschränkungen für den ersten, zweiten, dritten und vierten Moment der Verteilung übersetzt.

Das Problem ist dann, S entsprechend den Beschränkungen zu maximieren: 1) $ \ int xp (x) dx = "erster Moment" $, 2) $ \ int x ^ 2 p (x) dx = "zweiter Moment" $, 3 ) ... und so weiter

Ich empfehle das Buch "Harte, J., Maximale Entropie und Ökologie: Eine Theorie der Fülle, Verteilung und 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


Ich stimme zu, dass Sie eine Dichteabschätzung benötigen, um jede Verteilung zu replizieren. Wenn Sie jedoch Hunderte von Variablen haben, wie es in einer Monte-Carlo-Simulation typisch ist, müssten Sie einen Kompromiss eingehen.

Ein vorgeschlagener Ansatz ist wie folgt:

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

Die resultierenden Daten von Schritt 4 haben den gewünschten Mittelwert, die Standardabweichung, die Schiefe und die Kurtosis.

Vorbehalte:

  1. Fleishman wird nicht für alle Kombinationen von Schiefe und Kurtos funktionieren
  2. Die obigen Schritte gehen von nicht korrelierten Variablen aus. Wenn Sie korrelierte Daten generieren möchten, benötigen Sie einen Schritt vor der Fleishman-Transformation

Im SuppDists-Paket gibt es eine Johnson-Verteilung. Johnson wird Ihnen eine Verteilung geben, die entweder Momenten oder Quantilen entspricht. Andere Kommentare stimmen, dass 4 Momente keine Verteilung machen. Aber Johnson wird es sicherlich versuchen.

Hier ist 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 so aus:

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

Viel Glück!

EDIT Wie Hadley in den Kommentaren darauf hingewiesen hat, sieht der Johnson-Fit aus. Ich machte einen schnellen Test und passte die Johnson-Verteilung unter Verwendung von moment="quant" das zur Johnson-Verteilung passt, wobei 5 Quantile anstelle der 4 Momente verwendet werden. Die Ergebnisse sehen viel besser aus:

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

Was folgendes bewirkt:

Hat jemand irgendwelche Ideen, warum Johnson voreingenommen wirkt, wenn er Momente nutzt?





frequency-distribution