Tengo un conjunto de datos y me gustaría averiguar qué distribución se ajusta mejor a mis datos.
Utilicé la fitdistr()
función para estimar los parámetros necesarios para describir la distribución supuesta (es decir, Weibull, Cauchy, Normal). Usando esos parámetros, puedo realizar una prueba de Kolmogorov-Smirnov para estimar si los datos de mi muestra son de la misma distribución que mi distribución supuesta.
Si el valor p es> 0.05, puedo suponer que los datos de la muestra se extraen de la misma distribución. Pero el valor p no proporciona ninguna información sobre la bondad del ajuste, ¿no es así?
Entonces, en caso de que el valor p de mis datos de muestra sea> 0.05 para una distribución normal y una distribución weibull, ¿cómo puedo saber qué distribución se ajusta mejor a mis datos?
Esto es básicamente lo que he hecho:
> mydata
[1] 37.50 46.79 48.30 46.04 43.40 39.25 38.49 49.51 40.38 36.98 40.00
[12] 38.49 37.74 47.92 44.53 44.91 44.91 40.00 41.51 47.92 36.98 43.40
[23] 42.26 41.89 38.87 43.02 39.25 40.38 42.64 36.98 44.15 44.91 43.40
[34] 49.81 38.87 40.00 52.45 53.13 47.92 52.45 44.91 29.54 27.13 35.60
[45] 45.34 43.37 54.15 42.77 42.88 44.26 27.14 39.31 24.80 16.62 30.30
[56] 36.39 28.60 28.53 35.84 31.10 34.55 52.65 48.81 43.42 52.49 38.00
[67] 38.65 34.54 37.70 38.11 43.05 29.95 32.48 24.63 35.33 41.34
# estimate shape and scale to perform KS-test for weibull distribution
> fitdistr(mydata, "weibull")
shape scale
6.4632971 43.2474500
( 0.5800149) ( 0.8073102)
# KS-test for weibull distribution
> ks.test(mydata, "pweibull", scale=43.2474500, shape=6.4632971)
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0686, p-value = 0.8669
alternative hypothesis: two-sided
# KS-test for normal distribution
> ks.test(mydata, "pnorm", mean=mean(mydata), sd=sd(mydata))
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0912, p-value = 0.5522
alternative hypothesis: two-sided
Los valores p son 0.8669 para la distribución de Weibull y 0.5522 para la distribución normal. Por lo tanto, puedo suponer que mis datos siguen un Weibull y una distribución normal. Pero, ¿qué función de distribución describe mejor mis datos?
Refiriéndome a elevendollar encontré el siguiente código, pero no sé cómo interpretar los resultados:
fits <- list(no = fitdistr(mydata, "normal"),
we = fitdistr(mydata, "weibull"))
sapply(fits, function(i) i$loglik)
no we
-259.6540 -257.9268
I used the fitdistr() function
..... ¿Cuál es lafitdistr
función? Algo de Excel? ¿O algo que escribiste en C?Respuestas:
Primero, aquí hay algunos comentarios rápidos:
Pero hagamos un poco de exploración. Usaré el excelente
fitdistrplus
paquete que ofrece algunas funciones agradables para el ajuste de distribución. Utilizaremos la funcióndescdist
para obtener algunas ideas sobre posibles distribuciones de candidatos.Ahora usemos
descdist
:La curtosis y el sesgo al cuadrado de su muestra se representa como un punto azul llamado "Observación". Parece que las posibles distribuciones incluyen la distribución Weibull, Lognormal y posiblemente la distribución Gamma.
Ajustemos una distribución de Weibull y una distribución normal:
Ahora inspeccione el ajuste para lo normal:
Y para el ajuste Weibull:
Ambos se ven bien, pero a juzgar por el QQ-Plot, el Weibull puede verse un poco mejor, especialmente en las colas. En consecuencia, el AIC del ajuste Weibull es más bajo en comparación con el ajuste normal:
Simulación de prueba de Kolmogorov-Smirnov
Usaré el procedimiento de @ Aksakal explicado aquí para simular la estadística KS bajo nulo.
El ECDF de las estadísticas KS simuladas es el siguiente:
Finalmente, nuestro valor usando la distribución nula simulada de las estadísticas KS es:p
Esto confirma nuestra conclusión gráfica de que la muestra es compatible con una distribución de Weibull.
Como se explica aquí , podemos usar bootstrapping para agregar intervalos de confianza puntuales al PDF o CDF Weibull estimado:
Distribución automática con GAMLSS
Elk k=2 k log(n) para el BIC.
gamlss
paqueteR
ofrece la posibilidad de probar muchas distribuciones diferentes y seleccionar la "mejor" según el GAIC (el criterio de información generalizado de Akaike). La función principal esfitDist
. Una opción importante en esta función es el tipo de distribuciones que se prueban. Por ejemplo, la configuracióntype = "realline"
probará todas las distribuciones implementadas definidas en toda la línea real, mientrastype = "realsplus"
que solo intentará las distribuciones definidas en la línea positiva real. Otra opción importante es el parámetro , que es la penalización para el GAIC. En el ejemplo a continuación, configuro el parámetro que significa que la "mejor" distribución se selecciona de acuerdo con el AIC clásico. Puede configurar para cualquier cosa que desee, comoSegún la AIC, la distribución de Weibull (más específicamente
WEI2
, una parametrización especial de la misma) se ajusta mejor a los datos. La parametrización exacta de la distribuciónWEI2
se detalla en este documento en la página 279. Inspeccionemos el ajuste observando los residuos en un diagrama de gusanos (básicamente un diagrama QQ de tendencia):Esperamos que los residuos estén cerca de la línea horizontal media y que el 95% de ellos se encuentren entre las curvas punteadas superior e inferior, que actúan como intervalos de confianza puntuales del 95%. En este caso, el diagrama de gusanos me parece bien, lo que indica que la distribución de Weibull es adecuada.
fuente
gofstat
y el AIC. No hay consenso sobre cuál es la mejor manera de determinar la "mejor" distribución. Me gustan los métodos gráficos y el AIC.Los gráficos son en su mayoría una buena manera de tener una mejor idea de cómo se ven sus datos. En su caso, recomendaría trazar la función empírica de distribución acumulativa (ecdf) contra los cdf teóricos con los parámetros que obtuvo de fitdistr ().
Lo hice una vez para mis datos y también incluí los intervalos de confianza. Aquí está la imagen que obtuve usando ggplot2 ().
La línea negra es la función empírica de distribución acumulativa y las líneas coloreadas son archivos PDF de diferentes distribuciones que utilizan parámetros que obtuve utilizando el método de Máxima Verosimilitud. Se puede ver fácilmente que la distribución exponencial y normal no se ajusta bien a los datos, porque las líneas tienen una forma diferente a la ecdf y las líneas están bastante lejos de la ecdf. Lamentablemente, las otras distribuciones son bastante cercanas. Pero yo diría que la línea logNormal es la más cercana a la línea negra. Usando una medida de distancia (por ejemplo MSE) se podría validar el supuesto.
Si solo tiene dos distribuciones en competencia (por ejemplo, elegir las que parecen encajar mejor en la gráfica), podría usar una Prueba de relación de probabilidad para probar qué distribuciones se ajustan mejor.
fuente