Effects
Il pacchetto fornisce un modo molto veloce e conveniente per tracciare risultati di modelli a effetto misto lineare ottenuti attraverso il lme4
pacchetto . La effect
funzione 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 effects
pacchetto, il batch "E" non si sovrappone al batch "A".
Se provo lo stesso usando la confint.merMod
funzione 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 effects
pacchetto abbia scorciatoie nel calcolo dell'IC che potrebbero non essere completamente approvate dagli statistici. Quanto sono affidabili gli elementi della configurazione restituiti dalla effect
funzione dal effects
pacchetto per gli lmer
oggetti?
Cosa ho provato: esaminando il codice sorgente, ho notato che la effect
funzione si basa sulla Effect.merMod
funzione, che a sua volta si dirige verso la Effect.mer
funzione, 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.glm
la funzione sembra calcolare la matrice varianza-covariata lmer
dall'oggetto:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Questo, a sua volta, è probabilmente utilizzato nella Effect.default
funzione 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.