Effects
El 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 effect
funció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 effects
paquete, el lote "E" no se superpone con el lote "A".
Si intento lo mismo usando la confint.merMod
funció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 effects
paquete 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 effect
función del effects
paquete para lmer
objetos?
¿Qué he intentado? Al mirar el código fuente, noté que la effect
función se basa en la Effect.merMod
función, que a su vez se dirige a la Effect.mer
funció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.glm
La función parece calcular la matriz de varianza-covariable a partir del lmer
objeto:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Esto, a su vez, probablemente se usa en la Effect.default
funció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.