28 votos

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

Tenga, digamos, los siguientes datos:

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

Quiero una forma sencilla de ajustar esto (y varios otros conjuntos de datos) a una distribución de Pareto. Lo ideal sería que los valores teóricos de salida, menos idealmente los parámetros.

0 votos

¿Qué se entiende por "coincidir con los valores teóricos"? ¿Las expectativas de las estadísticas de orden dadas las estimaciones de los parámetros? ¿O algo más?

40voto

Niall Puntos 51

Bueno, si tienes una muestra $X_1, ..., X_n$ a partir de una distribución de pareto con parámetros $m>0$ y $\alpha>0$ (donde $m$ es el parámetro de límite inferior y $\alpha$ es el parámetro de forma) la log-verosimilitud de esa muestra es:

$$n \log(\alpha) + n \alpha \log(m) - (\alpha+1) \sum_{i=1}^{n} \log(X_i) $$

esto es un aumento monotónico en $m$ por lo que el maximizador es el mayor valor que es consistente con los datos observados. Dado que el parámetro $m$ define el límite inferior del soporte de la distribución de Pareto, el óptimo es

$$\hat{m} = \min_{i} X_i $$

que no depende de $\alpha$ . A continuación, utilizando trucos de cálculo ordinario, la MLE para $\alpha$ debe satisfacer

$$ \frac{n}{\alpha} + n \log( \hat{m} ) - \sum_{i=1}^{n} \log(X_i) = 0$$

un poco de álgebra simple nos dice que la MLE de $\alpha$ es

$$ \hat{\alpha} = \frac{n}{\sum_{i=1}^{n} \log(X_i/\hat{m})} $$

En muchos sentidos importantes (por ejemplo, la eficiencia asintótica óptima en el sentido de que logra 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 R siguiente calcula la 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: Basándonos en el comentario de @cardinal y en el mío que aparece a continuación, también podemos observar que $\hat{\alpha}$ es el recíproco de la media muestral del $\log(X_i /\hat{m})$ que resultan tener una distribución exponencial. Por lo tanto, si tenemos acceso a un software que pueda ajustar una distribución exponencial (lo que es más probable, ya que parece surgir en muchos problemas estadísticos), entonces el ajuste de una distribución de Pareto se puede lograr transformando el conjunto de datos de esta manera y ajustándolo a una distribución exponencial en la escala transformada.

3 votos

(+1) Podemos escribir las cosas de forma un poco más sugerente señalando que $Y_i = \log(X_i/m)$ se distribuye de forma exponencial con una tasa $\alpha$ . de esto y de la invariabilidad de los MLEs bajo transformación concluimos de inmediato que $\hat\alpha = 1/\bar Y$ donde sustituimos $m$ por $\hat m$ en esta última expresión. Esto también nos indica cómo podríamos utilizar el software estándar para ajustar un Pareto incluso si no hay ninguna opción explícita disponible.

0 votos

@cardinal - So, $\hat{\alpha}$ es el recíproco de la media muestral del $\log(X_i/\hat{m})$ que resulta tener una distribución exponencial. ¿Cómo nos ayuda esto?

2 votos

Hola, Macro. Lo que quería decir es que el problema de estimar los parámetros de un Pareto se puede reducir (esencialmente) al de la estimación de la tasa de una exponencial: Mediante la transformación anterior, podemos convertir nuestros datos y el problema en uno (quizás) más familiar y extraer inmediatamente la respuesta (suponiendo que nosotros, o nuestro software, ya sabemos qué hacer con una muestra de exponenciales).

12voto

akashrajkn Puntos 116

Puede utilizar el fitdist proporcionada en fitdistrplus paquete:

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

0 votos

¿Debería ser library(fitdistrplus) ?

1 votos

@Sean sí, editando la respuesta en consecuencia

0 votos

Tenga en cuenta que la llamada a library(actuar) es necesario para que esto funcione.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X