Wie passe ich einen Datensatz an eine Pareto-Verteilung in R an?


22

Nehmen wir zum Beispiel folgende Daten an:

8232302  684531  116857   89724   82267   75988   63871   
  23718    1696     436     439     248     235

Sie möchten einen einfachen Weg finden, um dieses (und mehrere andere Datasets) an eine Pareto-Distribution anzupassen. Idealerweise würde es die passenden theoretischen Werte ausgeben, weniger idealerweise die Parameter.



Was ist mit "Anpassen theoretischer Werte" gemeint? Die Erwartungen der Auftragsstatistik angesichts der Parameterschätzungen? Oder etwas anderes?
Glen_b -Reinstate Monica

Antworten:


33

Nun, wenn Sie eine Stichprobe von aus einer Paretoverteilung mit den Parametern und (wobei die Untergrenze und der Formparameter ist), ist dies die logarithmische Wahrscheinlichkeit Probe ist: m > 0 α > 0 m αX1,...,Xnm>0α>0mα

nLog(α)+nαLog(m)-(α+1)ich=1nLog(Xich)

Dies ist eine monotone Zunahme in , sodass der Maximierer der größte Wert ist, der mit den beobachteten Daten übereinstimmt. Da der Parameter die Untergrenze der Unterstützung für die Pareto-Verteilung definiert, ist das Optimummmm

m^=MindestichXich

was nicht von abhängt . Als nächstes muss das MLE für Verwendung gewöhnlicher Rechentricks erfüllenααα

nα+nLog(m^)-ich=1nLog(Xich)=0

eine einfache Algebra sagt uns, dass die MLE von istα

α^=nich=1nLog(Xich/m^)

In vielerlei Hinsicht (z. B. optimale asymptotische Effizienz durch Erreichen der Cramer-Rao-Untergrenze) ist dies der beste Weg, um Daten an eine Pareto-Verteilung anzupassen. Der folgende R-Code berechnet die MLE für einen bestimmten Datensatz X.

pareto.MLE <- function(X)
{
   n <- length(X)
   m <- min(X)
   a <- n/sum(log(X)-log(m))
   return( c(m,a) ) 
}

# example. 
library(VGAM)
set.seed(1)
z = rpareto(1000, 1, 5) 
pareto.MLE(z)
[1] 1.000014 5.065213

Bearbeiten: Basierend auf den Kommentaren von @ cardinal und mir unten können wir auch feststellen, dass der Kehrwert des Stichprobenmittels der , die passieren haben eine exponentielle Verteilung. Wenn wir also Zugriff auf Software haben, die zu einer Exponentialverteilung passt (was wahrscheinlicher ist, da es bei vielen statistischen Problemen auftritt), kann eine Pareto-Verteilung angepasst werden, indem der Datensatz auf diese Weise transformiert und angepasst wird zu einer exponentiellen Verteilung auf der transformierten Skala. log(Xi/ m )α^Log(Xich/m^)


3
(+1) Wir können die Dinge etwas suggestiver schreiben, indem feststellen, dass exponentiell mit rate . Daraus und aus der Invarianz der transformierten MLE schließen wir sofort, dass , wobei wir im letzteren Ausdruck durch ersetzen . Dies weist auch darauf hin, wie wir Standardsoftware verwenden könnten, um ein Pareto anzupassen, selbst wenn keine explizite Option verfügbar ist. Y.ich=Log(Xich/m)αα^=1/Y.¯mm^
Kardinal

@cardinal - ist also der Kehrwert des Stichprobenmittels der , die zufällig eine Exponentialverteilung haben. Wie hilft uns das? α^Log(Xich/m^)
Makro

2
Hi, Macro. Der Punkt, den ich anstrebte, war, dass das Problem der Schätzung der Parameter eines Paretos (im Wesentlichen) auf das der Schätzung der Rate eines Exponentials reduziert werden kann: Durch die obige Transformation können wir unsere Daten und unser Problem in ein konvertieren (vielleicht) vertrauter und extrahieren sofort die Antwort (vorausgesetzt, wir oder unsere Software wissen bereits, was mit einer Stichprobe von Exponentialen zu tun ist).
Kardinal

Wie kann ich den Fehler dieser Art von Passung messen?
Emanuele

@emanuele, die ungefähre Varianz eines MLE ist die Umkehrung der Fischerinformationsmatrix, für die Sie mindestens eine Ableitung der log-Wahrscheinlichkeit berechnen müssen. Sie können auch eine Art Bootstrap-Resampling verwenden, um den Standardfehler abzuschätzen.
Makro

8

Sie können die fitdistim fitdistrplusPaket enthaltene Funktion verwenden :

library(MASS)
library(fitdistrplus)
library(actuar)

# suppose data is in dataPar list
fp <- fitdist(dataPar, "pareto", start=list(shape = 1, scale = 500))
#the mle parameters will be stored in fp$estimate

Sollte das sein library(fitdistrplus)?
Sean

1
@ Sean ja, Antwort entsprechend bearbeiten
Kevin L Keys

Beachten Sie, dass der Aufruf an library(actuar)erforderlich ist, damit dies funktioniert.
jsta

Was bedeutet fp $ estim ["shape"] in diesem Fall? Ist es vielleicht das geschätzte Alpha? Oder Beta?
Albert Hendriks
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.