Effects
package fournit un moyen très rapide et pratique pour tracer les résultats de modèle à effets mixtes linéaires obtenus par lme4
package . leeffect
fonction calcule très rapidement les intervalles de confiance (IC), mais dans quelle mesure ces intervalles de confiance sont-ils fiables?
Par exemple:
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()
Selon les CI calculés avec le effects
package, le lot "E" ne chevauche pas le lot "A".
Si j'essaie la même chose en utilisant confint.merMod
function et la méthode par défaut:
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()
Je constate que tous les IC se chevauchent. Je reçois également des avertissements indiquant que la fonction n'a pas pu calculer les CI dignes de confiance. Cet exemple, ainsi que mon ensemble de données actuel, me fait penser que le effects
package prend des raccourcis dans le calcul de CI qui pourraient ne pas être entièrement approuvés par les statisticiens. Quelle est la fiabilité des CI renvoyés par la effect
fonction deeffects
package pour lmer
objets ?
Qu'ai-je essayé: En regardant dans le code source, j'ai remarqué que la effect
fonction s'appuie sur la Effect.merMod
fonction, qui à son tour dirige à la Effect.mer
fonction, qui ressemble à ceci:
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 fonction semble calculer la matrice variance-covariable à partir de l' lmer
objet:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
Ceci, à son tour, est probablement utilisé en Effect.default
fonction pour calculer les CI (j'ai peut-être mal compris cette partie):
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
...
Je ne connais pas suffisamment les LMM pour pouvoir juger s’il s’agit d’une bonne approche, mais compte tenu de la discussion sur le calcul de l’intervalle de confiance des LMM, cette approche semble étrangement simple.