El diagrama de residuos en el paquete R arm se recomienda a menudo como una forma de comprobar si un modelo logístico está cometiendo errores sistemáticos. La idea general es que el residuo medio para un grupo de observaciones con valores ajustados similares debe ser cercano a cero. O, de forma equivalente, para un grupo de observaciones con un valor medio ajustado p, la proporción del grupo para el que la respuesta = 1 debería ser aproximadamente p.
Al calcular los valores ajustados para un MLG, el paquete lme4 ofrece la opción de incluir o excluir los efectos aleatorios. Para el propósito de un gráfico de residuos clasificados, yo habría pensado que los efectos aleatorios deberían incluirse. Sin embargo, al hacerlo se produce un gráfico que muestra un claro patrón sinusoidal, mientras que el gráfico con los efectos aleatorios excluidos se ve mucho mejor. El mismo patrón es visible para todos los conjuntos de datos que he comprobado; a continuación se incluyen dos ejemplos reproducibles.
En los dos ejemplos siguientes, un LRT muestra que la adición de efectos aleatorios mejora significativamente los modelos en relación con los GLM equivalentes. Dado este caso, ¿por qué incluir efectos aleatorios en el valor ajustado mostraría que el modelo comete un error sistemático?
Ejemplos:
Obsérvese que tanto los valores ajustados como los residuales están en la escala de respuesta.
Utilizando los datos de agresión verbal, que se incluyen en el paquete lme4
library(lme4)
library(arm)
data(VerbAgg, package = 'lme4')
verb_mod <- glmer(r2 ~ (Anger + Gender + btype + situ)^2 + (1|id) + (1|item), family = binomial, data = VerbAgg)
par(mfcol=c(1, 2))
binnedplot(predict(verb_mod, type="response", re.form=NULL), resid(verb_mod, type="response"), nclass=40, main='With random effects')
binnedplot(predict(verb_mod, type="response", re.form=NA), resid(verb_mod, type="response"), nclass=40, main='Without random effects')
Utilizando los datos de puntuación lingüística del bdf, que se incluyen en el paquete nlme
library(nlme)
data(bdf, package = "nlme")
bdf <- subset(bdf, select = c(schoolNR, Minority, ses, repeatgr))
bdf$repeatgr[bdf$repeatgr == 2] <- 1
bdf_mod <- glmer(repeatgr ~ Minority + ses + ses * Minority + (1 | schoolNR), data = bdf, family = binomial(link = "logit"))
par(mfcol=c(1, 2))
binnedplot(predict(bdf_mod, type="response", re.form=NULL), resid(bdf_mod, type="response"), main='With random effects', nclass=20)
binnedplot(predict(bdf_mod, type="response", re.form=NA), resid(bdf_mod, type="response"), main='Without random effects', nclass=20)
Enlace al tutorial de bdf http://ase.tufts.edu/gsc/gradresources/guidetomixedmodelsinr/mixed%20model%20guide.html