¿Cómo verifico si mis datos se ajustan a una distribución exponencial?

22

¿Cómo podría verificar si mis datos, por ejemplo, el salario, provienen de una distribución exponencial continua en R?

Aquí está el histograma de mi muestra:

ingrese la descripción de la imagen aquí

. ¡Cualquier ayuda será apreciada!

fuerte
fuente
1
¿Es su variable discreta o continua? La distribución exponencial se define como continua .
Curioso
continuo Me pregunto si hay alguna prueba en R para verificar eso
2013
1
Bienvenido. Busque la función fitdistren R. Ajusta las funciones de densidad de probabilidad (pdf) según el método de estimación de máxima verosimilitud (MLE). También busque en este sitio términos como pdf, fitdistr, mle y preguntas similares. Tenga en cuenta que preguntas como esa casi requieren ejemplos reproducibles para obtener buenas respuestas. Además, ayuda si la pregunta no es puramente sobre programación (lo que podría hacer que se ponga en espera como fuera de tema).
Andre Silva
8
Una distribución exponencial se trazará como una línea recta contra posición de trazado) donde la posición de trazado es (rango , el rango es para el valor más bajo, es el tamaño de la muestra y opciones populares para incluyen . Eso da una prueba informal que puede ser tan o más útil que cualquier prueba formal. - una ) / ( n - 2 un + 1 ) 1 n un 1 / 2-En(1--una)/ /(norte-2una+1)1norteuna1/ /2
Nick Cox
@Berkan desarrolló la idea de la trama cuantil en su publicación.
Nick Cox

Respuestas:

29

Lo haría estimando primero el único parámetro de distribución rateusando fitdistr. Esto no le dirá si la distribución se ajusta o no, por lo que debe usar la prueba de bondad de ajuste . Para esto, puedes usar ks.test:

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

ingrese la descripción de la imagen aquí

Desde mi experiencia personal (aunque nunca lo he encontrado oficialmente en ningún lado, por favor confirme o corríjame), ks.testsolo se ejecutará si proporciona primero la estimación del parámetro. No puede dejar que calcule los parámetros automáticamente como, por ejemplo goodfit, lo hace. Es por eso que necesita este procedimiento de dos pasos fitdistr.

Para más información siga el excelente guía de Ricci: MONTAJE DE DISTRIBUCIÓN CON R .

Curioso
fuente
2
+1. ¿Es el ks.test la mejor prueba para evaluar la bondad de ajuste en tales situaciones? Creo que también respondiste una pregunta mía .
Andre Silva
44
solo un aviso, debe tener cuidado si está estimando los parámetros a partir de los datos en sí. En ese caso, una prueba como Anderson Darling podría ser la mejor, ya que es robusta frente a tales situaciones.
JPC
En la prueba de KS para la exponencialidad cuando el parámetro de tasa se estima a partir de los datos: consulte Una pregunta ingenua sobre la prueba de Kolmogorov Smirnov .
Scortchi - Restablece a Monica
8

Aunque normalmente recomendaría verificar la exponencialidad mediante el uso de gráficas de diagnóstico (como las gráficas QQ), hablaré sobre las pruebas, ya que la gente a menudo las quiere:

Como sugiere Tomas, la prueba de Kolmogorov-Smirnov no es adecuada para probar la exponencialidad con un parámetro no especificado.

Sin embargo, si ajusta las tablas para la estimación de parámetros, obtendrá la prueba de Lilliefors para la distribución exponencial.

Lilliefors, H. (1969), "En la prueba de Kolmogorov-Smirnov para la distribución exponencial con media desconocida", Journal of the American Statistical Association , vol. 64) pp. 387–389.

El uso de esta prueba se analiza en las Estadísticas prácticas no paramétricas de Conover .

Sin embargo, en D'Agostino & Stephens ' Goodness of Fit Techniques , discuten una modificación similar de la prueba de Anderson-Darling (algo oblicua si recuerdo bien, pero creo que toda la información requerida sobre cómo abordarla para el caso exponencial es que se encuentra en el libro), y es casi seguro que tendrá más poder contra alternativas interesantes.

De manera similar, uno podría estimar algo así como una prueba de Shapiro-Francia (similar pero más simple que la prueba de Shapiro-Wilk), basando una prueba en donde es la correlación entre las estadísticas del orden y los puntajes exponenciales ( estadísticas de orden exponencial esperado). Esto corresponde a probar la correlación en el gráfico QQ.norte(1-r2)r

Finalmente, uno podría adoptar el enfoque de prueba suave , como en el libro de Rayner & Best ( Smooth Tests of Goodness of Fit , 1990, aunque creo que hay uno más reciente, con Thas y " in R " agregado al título). El caso exponencial también está cubierto en:

JCW Rayner y DJ Best (1990), "Smooth Tests of Goodness of Fit: An Overview", International Statistical Review , vol. 58, N ° 1 (abril de 1990), págs. 9-17

Cosma Shalizi también analiza las pruebas suaves en un capítulo de sus notas de clase de Análisis avanzado de datos de pregrado , o vea el capítulo 15 de su libro Análisis avanzado de datos desde un punto de vista elemental .

Para algunos de los anteriores, es posible que deba simular la distribución de la estadística de prueba; para otras tablas están disponibles (pero en algunos de esos casos, puede ser más fácil simular de todos modos, o incluso más preciso simularse, como con la prueba de Lilliefors, debido al tamaño de simulación limitado en el original).

De todos ellos, me inclinaría por hacer el equivalente exponencial a Shapiro-Francia (es decir, probaría la correlación en el gráfico QQ [o si estuviera haciendo tablas, tal vez use , que rechazará los mismos casos]: debería ser lo suficientemente potente como para ser competitivo con las mejores pruebas, pero es muy fácil de hacer y tiene una correspondencia agradable con la apariencia visual de la trama QQ (incluso se podría elija agregar la correlación y el valor p al gráfico, si lo desea).norte(1-r2)

Glen_b -Reinstate a Monica
fuente
5

Puede usar un diagrama qq , que es un método gráfico para comparar dos distribuciones de probabilidad al trazar sus cuantiles entre sí.

En R, no existe una función qq-plot fuera de la caja para la distribución exponencial específicamente (al menos entre las funciones base). Sin embargo, puedes usar esto:

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

Al interpretar sus resultados: si las dos distribuciones que se comparan son similares, los puntos en la gráfica qq se ubicarán aproximadamente en la línea y = x. Si las distribuciones están relacionadas linealmente, los puntos en el gráfico qq se ubicarán aproximadamente en una línea, pero no necesariamente en la línea y = x.

Zhubarb
fuente
2
En Stata, qexpdesde SSC es una implementación enlatada.
Nick Cox