5 votos

Ajustando un glm a una respuesta continua positiva inflada de ceros

Estoy tratando de ajustar modelos R glm a conjuntos de datos donde la respuesta es continuamente positiva inflada con ceros. Este es un ejemplo de conjunto de datos

df <- structure(list(y=c(0,0,0,0,0,0,0,0,4.09417142857143e-05,0,0,0,0,2.18718787234043e-05,0,0,0,0,0,0,0,0,0,0,0,0,0,4.60192985143918e-05,0,1.16500081901182e-05,0,1.13497040795196e-05,0,2.01959645093946e-05,0,0,2.24704801120448e-05,3.50195529889299e-05,2.26178388643899e-06,0,0,0,0,0,0,1.24748435005701e-05,0,0,0,1.14008923269261e-06,0,0,0,0,0,0,0,1.95445414576182e-05,0,0,0,0,0,0,0,0,1.72293987591653e-05,1.11122316638726e-05,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),behavior = c(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,6,0,6,0,6,0,6,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4),time = c(272,148,132,854,234,340,90,282,840,230,118,620,130,1410,1272,684,6624,1220,250,4556,4500,2254,662,334,336,1364,346,4308,372,7448,1242,9658,926,6706,494,1996,3570,13550,62134,6876,3108,4722,794,2394,21502,21048,5442,2748,920,25596,1954,7896,996,12108,2046,23034,3216,7574,9882,5560,5610,4524,6846,3450,11630,3528,3546,9544,4820,4852,13508,3726,3744,1252,1254,2514,3786,2534,14080,3882,6510,10520,72928,10052)),.Names = c("y","behavior","time"),row.names = c(NA, 84),class = "data.frame")

definir comportamiento como un factor

df$behavior = as.factor(df$behavior)

La respuesta es df$y, df$behavior y df$time son los efectos fijos (categóricos y continuos, respectivamente).

Una vista rápida de la distribución de la respuesta: entrar descripción de la imagen aquí

Intenté usar el paquete R tweedie con glm2 (y base glm) con este código:

tweedie.fit <- tweedie.profile(y ~ behavior + time, do.plot=TRUE, data = df)
model.fit <- glm2(y ~ behavior + time, family=tweedie(var.power=out$xi.max, link.power=1-out$xi.max), data = df)

lo cual no converge (en caso de otros conjuntos de datos) o muestra un ajuste pobre del qq-plot: entrar descripción de la imagen aquí

¿Hay alguna esperanza de ajustar de manera confiable un glm a tal datos? Si es así, ¿qué estoy haciendo mal?

También intenté usar el paquete R gamlss con una familia log-normal donde agrego .Machine$double.eps a df$y:

df$y <- df$y + .Machine$double.eps
model.fit <- gamlss(y ~ behavior + time, data = df, family = LOGNO())

pero no parece hacer mucho mejor: entrar descripción de la imagen aquí

Se apreciaría mucho la ayuda.

2voto

AdamSane Puntos 1825

El ajuste del gráfico Q-Q (que se compara con cuantiles normales) es casi irrelevante. En particular, no te dice que tienes un mal modelo.

Aunque el Tweedie puede modelar datos con ceros, tiende a no funcionar tan bien para datos que son predominantemente cero, y sospecho que probablemente no ajustaste bien la distribución (es solo que realmente no puedes saber que ese es el caso a partir del gráfico QQ)

Yo estaría inclinado a pasar a un modelo que trate explícitamente con los ceros, un modelo inflado de ceros o un modelo de barrera.

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