11 votos

¿Cómo saber si mis datos se ajustan a la distribución de Pareto?

Tengo una muestra que es un vector con 220 números. Aquí hay un enlace a un histograma de mis datos. . Y deseo comprobar si mis datos se ajustan a una distribución de Pareto, pero no quiero ver gráficos QQ con esa distribución, sino que necesito una respuesta exacta con valor p en R, como la prueba de Anderson-Darling para la normalidad ( ad.test ). ¿Cómo podría hacerlo? Por favor, sea tan específico como pueda.

1 votos

El resultado de una prueba estadística no le dirá que sus datos tienen una distribución de Pareto . De hecho puedes estar bastante seguro de que si son datos reales, ellos no tienen una distribución de Pareto. Todo lo que una prueba le mostrará es si tiene suficientes datos para recoger la cantidad de desviación de ser Pareto que tiene. Es decir, si se rechaza todo lo que dice es "sí, el tamaño de la muestra era lo suficientemente grande como para decirle lo que ya sabía". ¿Por qué se hace un ejercicio de este tipo, que no puede responder a la pregunta real que se tiene?

0 votos

¿Su pregunta no es más que "qué líneas de código escribo para que el programa R haga el procedimiento X"? Entonces está fuera del tema. Es puede calificar como una pregunta de programación. Si tu pregunta tiene un aspecto estadístico (como "¿tiene sentido hacer esto?"), debes aclarar y enfatizar esos aspectos

1 votos

Ahora, la prueba de Anderson-Darling (o, para el caso, la de Kolmogorov-Smirnov que sugirió @Zen más arriba). Son pruebas para completamente especificado distribuciones. Es decir, para que las pruebas tengan las propiedades deseadas hay que especificar a priori ( NO se estima ) todos los parámetros. Así que no puedes usar ninguno de ellos para este ejercicio porque no tienes parámetros preestablecidos. (Es de suponer que estás haciendo esto por sugerencia de otra persona. Es muy difícil explicarle a alguien los conceptos erróneos a través de un intermediario).

13voto

user8076 Puntos 16

(PS) En primer lugar, creo que Glen_b tiene razón en sus comentarios anteriores sobre la utilidad de una prueba de este tipo: los datos reales seguramente no son exactamente distribuida de Pareto, y para la mayoría de las aplicaciones prácticas la pregunta sería "¿qué tan buena es la aproximación de Pareto?" - y el gráfico QQ es una buena manera de mostrar la calidad de dicha aproximación.

De todos modos, puede hacer su prueba con el estadístico de Kolmogorov-Smirnov, después de estimar los parámetros por máxima verosimilitud. Esta estimación de los parámetros impide utilizar el $p$ -valor de ks.test , por lo que se puede hacer bootstrap paramétrico para estimarlo. Como dice Glen_b en el comentario, esto se puede conectar a Prueba de Lilliefors .

Aquí hay algunas líneas de código R.

En primer lugar, defina las funciones básicas para tratar las distribuciones de Pareto.

# distribution, cdf, quantile and random functions for Pareto distributions
dpareto <- function(x, xm, alpha) ifelse(x > xm , alpha*xm**alpha/(x**(alpha+1)), 0)
ppareto <- function(q, xm, alpha) ifelse(q > xm , 1 - (xm/q)**alpha, 0 )
qpareto <- function(p, xm, alpha) ifelse(p < 0 | p > 1, NaN, xm*(1-p)**(-1/alpha))
rpareto <- function(n, xm, alpha) qpareto(runif(n), xm, alpha)

La siguiente función calcula el MLE de los parámetros (justificaciones en Wikipedia ).

pareto.mle <- function(x)
{
  xm <- min(x)
  alpha <- length(x)/(sum(log(x))-length(x)*log(xm))
  return( list(xm = xm, alpha = alpha))
}

Y esta función calcula el estadístico KS, y utiliza el bootstrap paramétrico para estimar la $p$ -valor.

pareto.test <- function(x, B = 1e3)
{
  a <- pareto.mle(x)

  # KS statistic
  D <- ks.test(x, function(q) ppareto(q, a$xm, a$alpha))$statistic

  # estimating p value with parametric bootstrap
  B <- 1e5
  n <- length(x)
  emp.D <- numeric(B)
  for(b in 1:B)
  {
    xx <- rpareto(n, a$xm, a$alpha);
    aa <- pareto.mle(xx)
    emp.D[b] <- ks.test(xx, function(q) ppareto(q, aa$xm, aa$alpha))$statistic
  }

  return(list(xm = a$xm, alpha = a$alpha, D = D, p = sum(emp.D > D)/B))
}

Ahora, por ejemplo, una muestra procedente de una distribución de Pareto:

> # generating 100 values from Pareto distribution
> x <- rpareto(100, 0.5, 2)
> pareto.test(x)
$xm
[1] 0.5007593

$alpha
[1] 2.080203

$D
         D 
0.06020594 

$p
[1] 0.69787

...y de un $\chi^2(2)$ :

> # generating 100 values from chi square distribution
> x <- rchisq(100, df=2)
> pareto.test(x)
$xm
[1] 0.01015107

$alpha
[1] 0.2116619

$D
        D 
0.4002694 

$p
[1] 0

Tenga en cuenta que no pretendo que esta prueba sea insesgada: cuando la muestra es pequeña, puede existir cierto sesgo. El bootstrap paramétrico no tiene bien en cuenta la incertidumbre en la estimación de los parámetros (piense en lo que ocurriría al utilizar esta estrategia para probar ingenuamente si la media de alguna variable normal con varianza desconocida es cero).

PS Wikipedia dice unas palabras sobre esto. Aquí hay otras dos preguntas para las que se sugirió una estrategia similar: Prueba de bondad de ajuste para una mezcla , prueba de bondad de ajuste para una distribución gamma .

3 votos

Cuando se ajusta la distribución del estadístico de prueba para la estimación de los parámetros de esta manera, no es una prueba K-S (aunque se base en un estadístico K-S) - es un tipo particular de Prueba de Lilliefors . Esto ya no es no paramétrico, pero se puede construir uno mediante simulación para cualquier distribución dada. Lilliefors lo hizo específicamente para la normal y la exponencial... en la década de 1960.

0 votos

Gracias por este comentario @Glen_b no lo sabía.

0 votos

No hay problema; no cambia nada del contenido de lo que estás haciendo (que está bien así), sólo cómo debería llamarse.

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