Effectspackage bietet eine sehr schnelle und bequeme Möglichkeit , lineare Mischeffekt-Modellergebnisse zu zeichnen, die mit lme4package erhalten wurden . Die effectFunktion berechnet Konfidenzintervalle (CIs) sehr schnell, aber wie vertrauenswürdig sind diese Konfidenzintervalle?
Beispielsweise:
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()

Gemäß den mit effectspackage berechneten CIs überschneidet sich Charge "E" nicht mit Charge "A".
Wenn ich dasselbe mit der confint.merModFunktion und der Standardmethode versuche :
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()

Ich sehe, dass sich alle CIs überschneiden. Ich erhalte auch Warnungen, die darauf hinweisen, dass die Funktion keine vertrauenswürdigen CIs berechnen konnte. Dieses Beispiel und mein tatsächlicher Datensatz lassen vermuten, dass das effectsPaket Verknüpfungen in der CI-Berechnung enthält, die möglicherweise nicht vollständig von den Statistikern genehmigt wurden. Wie vertrauenswürdig sind die von der effectFunktion zurückgegebenen CIs aus dem effectsPaket für lmerObjekte?
Was habe ich versucht: Beim Blick in den Quellcode ist mir aufgefallen, dass die effectFunktion von der Funktion abhängt Effect.merMod, die wiederum zur Effect.merFunktion führt, die so aussieht:
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.glmDie Funktion scheint die Varianz-Covariate-Matrix aus dem lmerObjekt zu berechnen :
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Dies wiederum wird wahrscheinlich in der Effect.defaultFunktion zur Berechnung von CIs verwendet (ich habe diesen Teil möglicherweise falsch verstanden):
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
...
Ich weiß nicht genug über LMMs, um beurteilen zu können, ob dies ein richtiger Ansatz ist, aber angesichts der Diskussion um die Konfidenzintervallberechnung für LMMs erscheint dieser Ansatz verdächtig einfach.
