EffectsIl pacchetto fornisce un modo molto veloce e conveniente per tracciare risultati di modelli a effetto misto lineare ottenuti attraverso il lme4pacchetto . La effectfunzione calcola gli intervalli di confidenza (IC) molto rapidamente, ma quanto sono affidabili questi intervalli di confidenza?
Per esempio:
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()

Secondo gli elementi della configurazione calcolati utilizzando il effectspacchetto, il batch "E" non si sovrappone al batch "A".
Se provo lo stesso usando la confint.merModfunzione e il metodo predefinito:
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()

Vedo che tutti gli elementi della configurazione si sovrappongono. Ricevo anche avvisi che indicano che la funzione non è riuscita a calcolare elementi della configurazione attendibili. Questo esempio, e il mio set di dati effettivo, mi fa sospettare che il effectspacchetto abbia scorciatoie nel calcolo dell'IC che potrebbero non essere completamente approvate dagli statistici. Quanto sono affidabili gli elementi della configurazione restituiti dalla effectfunzione dal effectspacchetto per gli lmeroggetti?
Cosa ho provato: esaminando il codice sorgente, ho notato che la effectfunzione si basa sulla Effect.merModfunzione, che a sua volta si dirige verso la Effect.merfunzione, che assomiglia a questo:
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 funzione sembra calcolare la matrice varianza-covariata lmerdall'oggetto:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Questo, a sua volta, è probabilmente utilizzato nella Effect.defaultfunzione per calcolare gli elementi della configurazione (potrei aver frainteso questa 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
...
Non conosco abbastanza gli LMM per giudicare se si tratta di un approccio corretto, ma considerando la discussione sul calcolo dell'intervallo di confidenza per gli LMM, questo approccio appare sospettosamente semplice.
