Come posso adattare un set di dati a una distribuzione di Pareto in R?


22

Diciamo, diciamo, i seguenti dati:

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

Desideri un modo semplice per adattare questo (e molti altri set di dati) a una distribuzione Pareto. Idealmente produrrebbe i valori teorici corrispondenti, meno idealmente i parametri.



Cosa si intende per "corrispondenza dei valori teorici"? Le aspettative delle statistiche degli ordini date le stime dei parametri? O qualcos'altro?
Glen_b -Restate Monica

Risposte:


33

Bene, se hai un campione da una distribuzione di pareto con i parametri e (dove è il parametro limite inferiore e è il parametro forma) la probabilità logaritmica di quello il campione è: m > 0 α > 0 m αX1,...,Xnm>0α>0mα

nlog(α)+nαlog(m)(α+1)i=1nlog(Xi)

questo è un aumento monotonico in , quindi il massimizzatore è il valore più grande che è coerente con i dati osservati. Poiché il parametro definisce il limite inferiore del supporto per la distribuzione di Pareto, l'ottimale èmmm

m^=miniXi

che non dipende da . Quindi, usando i normali trucchi di calcolo, l'MLE per deve soddisfareααα

nα+nlog(m^)i=1nlog(Xi)=0

qualche semplice algebra ci dice che il MLE di èα

α^=ni=1nlog(Xi/m^)

In molti sensi importanti (ad es. Efficienza asintotica ottimale in quanto raggiunge il limite inferiore di Cramer-Rao), questo è il modo migliore per adattare i dati a una distribuzione di Pareto. Il codice R sottostante calcola la SMV per un dato insieme di dati, 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

Modifica: in base al commento di @cardinal e I di seguito, possiamo anche notare che è il reciproco della media di esempio di , che accade a avere una distribuzione esponenziale. Pertanto, se abbiamo accesso a software in grado di adattarsi a una distribuzione esponenziale (che è più probabile, dal momento che sembra insorgere in molti problemi statistici), è possibile realizzare una distribuzione di Pareto trasformando il set di dati in questo modo e adattandolo a una distribuzione esponenziale sulla scala trasformata. log(Xi/ m )α^log(Xi/m^)


3
(+1) Possiamo scrivere cose un po 'più suggestivamente osservando che è distribuito esponenzialmente con rate . da questo e dall'invarianza degli MLE in trasformazione concludiamo subito che , dove sostituiamo con in quest'ultima espressione. Questo suggerisce anche come usare il software standard per adattarsi a un Pareto anche se non è disponibile alcuna opzione esplicita. Yi=log(Xi/m)αα^=1/Y¯mm^
cardinale

@cardinal - Quindi, è il reciproco della media di esempio di , che ha una distribuzione esponenziale. In che modo questo ci aiuta? α^log(Xio/m^)
Macro

2
Ciao Macro. Il punto che stavo cercando di chiarire era che il problema di stimare i parametri di un Pareto può essere (essenzialmente) ridotto a quello della stima del tasso di un esponenziale: attraverso la trasformazione sopra, possiamo convertire i nostri dati e il problema in un (forse) più familiare ed estrae immediatamente la risposta (supponendo che noi, o il nostro software, sappiamo già cosa fare con un campione di esponenziali).
cardinale

Come posso misurare l'errore di questo tipo di adattamento?
emanuele,

@emanuele, la varianza approssimativa di un MLE è l'inverso della matrice di informazioni sul pescatore, che richiederà di calcolare almeno un derivato della verosimiglianza. In alternativa, è possibile utilizzare un tipo di ricampionamento bootstrap per stimare l'errore standard.
Macro,

8

È possibile utilizzare la fitdistfunzione fornita nel fitdistrpluspacchetto:

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

Dovrebbe essere library(fitdistrplus)?
Sean,

1
@Sean sì, modificando la risposta di conseguenza
Kevin L Keys

Si noti che la chiamata a library(actuar)è necessaria affinché questo funzioni.
jsta,

Cosa rappresenta fp $ stimare ["forma"] in questo caso? È forse l'alfa stimata? O beta?
Albert Hendriks il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.