EffectsEl paquete proporciona una manera muy rápida y conveniente de graficar los resultados del modelo de efectos mixtos lineales obtenidos a través delme4 paquete . La effectfunción calcula los intervalos de confianza (IC) muy rápidamente, pero ¿qué tan confiables son estos intervalos de confianza?
Por ejemplo:
library(lme4)
library(effects)
library(ggplot)
data(Pastes)
fm1 <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
geom_errorbar(width = 0.2) + geom_point() + theme_bw()

Según los CI calculados usando el effectspaquete, el lote "E" no se superpone con el lote "A".
Si intento lo mismo usando la confint.merModfunción y el método predeterminado:
a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)
b <- data.frame(b)
b <- b[-1:-2,]
b1 <- b[[1]]
b2 <- b[[2]]
dt <- data.frame(fit = c(a[1], a[1] + a[2:length(a)]),
lower = c(b1[1], b1[1] + b1[2:length(b1)]),
upper = c(b2[1], b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]
ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"],
ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
geom_errorbar(width = 0.2) + geom_point() + theme_bw()

Veo que todos los CI se superponen. También recibo advertencias que indican que la función no pudo calcular los CI confiables. Este ejemplo, y mi conjunto de datos real, me hace sospechar que el effectspaquete toma atajos en el cálculo de CI que podrían no estar completamente aprobados por los estadísticos. ¿Cuán confiables son los CI devueltos por effectfunción del effectspaquete para lmerobjetos?
¿Qué he intentado? Al mirar el código fuente, noté que la effectfunción se basa en la Effect.merModfunción, que a su vez se dirige a la Effect.merfunción, que se ve así:
effects:::Effect.mer
function (focal.predictors, mod, ...)
{
result <- Effect(focal.predictors, mer.to.glm(mod), ...)
result$formula <- as.formula(formula(mod))
result
}
<environment: namespace:effects>
mer.to.glmLa función parece calcular la matriz de varianza-covariable a partir del lmerobjeto:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Esto, a su vez, probablemente se usa en la Effect.defaultfunción para calcular los IC (podría haber entendido mal esta parte):
effects:::Effect.default
...
z <- qnorm(1 - (1 - confidence.level)/2)
V <- vcov.(mod)
eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
var <- diag(eff.vcov)
result$vcov <- eff.vcov
result$se <- sqrt(var)
result$lower <- effect - z * result$se
result$upper <- effect + z * result$se
...
No sé lo suficiente sobre LMM para juzgar si este es un enfoque correcto, pero teniendo en cuenta la discusión sobre el cálculo del intervalo de confianza para LMM, este enfoque parece sospechosamente simple.
