1 votos

¿Cuál es la mejor manera de realizar una prueba de bondad de ajuste de los datos a una distribución continua con el método chi-cuadrado en R?

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.

3voto

EdM Puntos 5716

Es una pena que la prueba de bondad de ajuste chi-cuadrado sea un "requisito del proyecto", porque en general se pierde mucho con Desagregación de variables continuas . Si es posible, intente convencer a los responsables de que permitan métodos más apropiados para las variables continuas en este contexto de ajuste de la distribución .

Si está atascado con el binning puede tener un problema . Esencialmente, si se definen los límites de las casillas basándose en los parámetros de una distribución estimada a partir de los datos, entonces la propia prueba de chi-cuadrado puede dejar de ser válida. Esto va más allá de la simple pérdida de grados de libertad en chi-cuadrado debido a la estimación de los parámetros; el estadístico chi-cuadrado tal y como se calcula habitualmente puede dejar de distribuirse como chi-cuadrado. Véase la sección "Nivel 3" de la respuesta de @cardinal al respecto página enlazada Esa respuesta incluye algunas recomendaciones sobre cómo proceder (que van más allá de mi experiencia particular). Al proceder, hay que tener en cuenta lo que se intenta conseguir ajustando diferentes tipos de distribuciones a los mismos datos, y reconocer que los resultados pueden ser difíciles de generalizar incluso si se encuentra una forma fiable de definir los límites útiles de los contenedores.

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