¿Cómo ajusto un conjunto de datos a una distribución de Pareto en R?

22

Tener, digamos, los siguientes datos:

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

Desea una forma simple de ajustar esto (y varios otros conjuntos de datos) a una distribución de Pareto. Idealmente, generaría los valores teóricos coincidentes, menos idealmente los parámetros.

Felix
fuente
¿Qué se entiende por "valores teóricos coincidentes"? ¿Las expectativas de las estadísticas de pedidos dadas las estimaciones de parámetros? ¿O algo mas?
Glen_b -Reinstate Monica

Respuestas:

33

Bueno, si tiene una muestra de una distribución pareto con los parámetros y (donde es el parámetro de límite inferior y es el parámetro de forma), la probabilidad logarítmica de eso muestra es: m > 0 α > 0 m αX1,...,Xnm>0α>0mα

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

Este es un aumento monotónico en , por lo que el maximizador es el valor más grande que es consistente con los datos observados. Como el parámetro define el límite inferior del soporte para la distribución de Pareto, lo óptimo esmmm

m^=miniXi

que no depende de . Luego, usando trucos de cálculo ordinarios, el MLE para debe satisfacerαα

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

un poco de álgebra simple nos dice que el MLE de esα

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

En muchos sentidos importantes (por ejemplo, eficiencia asintótica óptima en el sentido de que alcanza el límite inferior de Cramer-Rao), esta es la mejor manera de ajustar los datos a una distribución de Pareto. El código de R a continuación calcula el MLE para un conjunto de datos dado, 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

Editar: según el comentario de @cardinal e I a continuación, también podemos observar que es el recíproco de la media muestral de los , que suceden a tener una distribución exponencial. Por lo tanto, si tenemos acceso a un software que puede ajustarse a una distribución exponencial (lo que es más probable, ya que parece surgir en muchos problemas estadísticos), entonces se puede ajustar una distribución de Pareto transformando el conjunto de datos de esta manera y ajustándolo a una distribución exponencial en la escala transformada. α^log(Xi/m^)

Macro
fuente
3
(+1) Podemos escribir cosas un poco más sugestivas al notar que se distribuye exponencialmente con rate . De esto y de la invariancia de los MLEs bajo transformación, concluimos de inmediato que , donde reemplazamos por en la última expresión. Esto también sugiere cómo podríamos usar un software estándar para ajustar un Pareto, incluso si no hay una opción explícita disponible. Yi=log(Xi/m)αα^=1/Y¯mm^
cardenal
@cardinal - Entonces, es el recíproco de la media muestral de los , que tienen una distribución exponencial. ¿Cómo nos ayuda esto? α^log(Xi/m^)
Macro
2
Hola macro El punto que intentaba señalar era que el problema de estimar los parámetros de un Pareto puede reducirse (esencialmente) al de la estimación de la tasa de un exponencial: a través de la transformación anterior, podemos convertir nuestros datos y problemas en un (quizás) más familiar e inmediatamente extraiga la respuesta (suponiendo que nosotros, o nuestro software, ya sepamos qué hacer con una muestra de exponenciales).
cardenal
¿Cómo puedo medir el error de este tipo de ajuste?
emanuele
@emanuele, la varianza aproximada de un MLE es la inversa de la matriz de información del pescador, que requerirá que calcules al menos una derivada de la probabilidad logarítmica. O bien, podría usar una especie de remuestreo de arranque para estimar el error estándar.
Macro
8

Puede usar la fitdistfunción proporcionada en el fitdistrpluspaquete:

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
akashrajkn
fuente
¿Debería ser eso library(fitdistrplus)?
Sean
1
@Sean sí, editando la respuesta en consecuencia
Kevin L Keys
Tenga en cuenta que la llamada a library(actuar)es necesaria para que esto funcione.
jsta
¿Qué representa fp $ estimación ["forma"] en este caso? ¿Es quizás el alfa estimado? O beta?
Albert Hendriks