Estoy tratando de escribir un trozo de código en R que
- encuentra la distribución más ajustada a un conjunto de datos, mediante
- realizar pruebas de bondad de ajuste a una lista de distribuciones, y luego
- encontrar el más adecuado.
- Este programa debería poder ejecutarse en tiempo real, por lo que el análisis debería ser muy ligero en cuanto a carga computacional. Lo que quiero decir con esto es que debería ser capaz de procesar, digamos, un ajuste cada segundo o unos pocos segundos como máximo, así que cuanto más simple sea el programa, mejor.
Por ejemplo, ya he escrito el siguiente código:
for(i in 1:numfit) {
if(distrib[[i]] == "negative binomial"){
gf_shape = "negative binomial"
fd_nb <- tryCatch((fitdistr(data, "negative binomial", start=list(size=1,prob=0.5))),
error = function(fd_nb) fd_nb <- fitdistr(data, "negative binomial"))
est_size = fd_nb$estimate[[1]]
est_prob = fd_nb$estimate[[2]]
gfn = goodfit(data,type="nbinomial",method="MinChisq",par = list(size = est_size))
tidied = tidy(summary(gfn))
results[i,] = c(gf_shape, est_lambda, "NA", tidied$X.2, tidied$P...X.2.)
}
else if(distrib[[i]] == "poisson"){
gf_shape = "poisson"
fd_p <- fitdistr(data, "poisson")
est_lambda = fd_p$estimate[[1]]
gf = goodfit(data,type="poisson",method="MinChisq",par = list(lambda = est_lambda))
tidied = tidy(summary(gf))
results[i,] = c(gf_shape, est_lambda, "NA", tidied[1,1], tidied[1,3])
}
results = rbind(c("distribution", "parameter 1", "parameter 2", "chi-squared test statistic", "P > X2"), results)
return(results)
}
que realiza una prueba de bondad de ajuste chi-cuadrado de mis datos a un Poisson y binomio negativo distribución, a partir de la cual puedo encontrar la distribución con el estadística de prueba chi-cuadrado más baja e inferir de ahí la distribución más adecuada a los datos.
Mi pregunta es cómo hacer esto con datos continuos/distribuciones continuas . Utilizando el goodfit en R me ha funcionado muy bien, pero sólo funciona con distribuciones discretas. Sin embargo, necesito utilizar el método de bondad de ajuste chi-cuadrado (requisito del proyecto), así que no estoy seguro de a qué paquete o método recurrir y cómo implementarlo.
¿Puede alguien ayudarme con una idea fácil de cómo implementar algo similar para, digamos, una distribución normal? Por el momento, creo que voy a escribir un código para dividir los datos en categorías, de la misma manera que se haría la prueba de chi-cuadrado a mano, pero cualquier forma de optimizar este proceso sería de gran ayuda. La ayuda será muy apreciada.