43 votos

¿Qué fiabilidad tienen los intervalos de confianza de los objetos lmer a través del paquete de efectos?

Effects paquete ofrece una forma muy rápida y cómoda de trazado de los resultados del modelo lineal de efectos mixtos obtenido a través de lme4 paquete . El effect calcula los intervalos de confianza (IC) muy rápidamente, pero cómo de confianza ¿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()

enter image description here

Según los IC calculados con effects paquete, el lote "E" no se solapa con el lote "A".

Si intento lo mismo utilizando confint.merMod y el método por defecto:

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()

enter image description here

Veo que todas las IC se solapan. También obtengo advertencias que indican que la función no pudo calcular CIs fiables. Este ejemplo, y mi conjunto de datos real, me hace sospechar que effects toma atajos en el cálculo del IC que podrían no ser del todo aprobados por los estadísticos. ¿Qué grado de fiabilidad tienen los IC devueltos por effect función de effects paquete para lmer ¿Objetos?

Qué he probado: Buscando en el código fuente, me di cuenta de que effect se basa en Effect.merMod que a su vez dirige a Effect.mer que tiene el siguiente aspecto:

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 parece calcular la Matriz de Varianza-Covariante a partir de la lmer objeto:

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

Esto, a su vez, se utiliza probablemente en Effect.default para calcular los IC (puede que haya 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 los 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 los LMM, este enfoque parece sospechosamente simple.

2 votos

Cuando tengas líneas largas de código, te agradecería mucho que las dividieras en varias líneas para que no tengamos que desplazarnos para verlo todo.

1 votos

@rvl El código debería ser más legible ahora.

61voto

Ben Bolker Puntos 8729

Todos los resultados son esencialmente los mismos ( para este ejemplo en particular ). Algunas diferencias teóricas son:

  • como señala @rvl, su reconstrucción de los IC sin tener en cuenta la covarianza entre los parámetros es simplemente errónea (lo siento)
  • los intervalos de confianza de los parámetros pueden basarse en los intervalos de confianza de Wald (suponiendo una superficie de log-verosimilitud cuadrática): lsmeans , effects , confint(.,method="Wald") ; excepto en el caso de lsmeans Estos métodos ignoran los efectos del tamaño finito ("grados de libertad"), pero en este caso apenas hay diferencia ( df=40 es prácticamente indistinguible del infinito df )
  • ... o en intervalos de confianza del perfil (el método por defecto; ignora los efectos del tamaño finito pero permite superficies no cuadráticas)
  • ... o en bootstrapping paramétrico (el estándar de oro - asume que el modelo es correcto [las respuestas son normales, los efectos aleatorios están distribuidos normalmente, los datos son condicionalmente independientes, etc.], pero por lo demás hace pocas suposiciones)

Creo que todos estos enfoques son razonable (algunos son más aproximados que otros), pero en este caso apenas hay diferencia entre uno y otro. Si le preocupa, pruebe varios métodos contrastados con sus datos, o con datos simulados que se parezcan a los suyos, y vea qué ocurre...

(P.D.: Yo no le daría demasiada importancia al hecho de que los intervalos de confianza de A y E no se superponen. Habría que hacer un procedimiento adecuado de comparación por pares para hacer inferencias fiables sobre las diferencias entre este particular par de estimaciones ...)

IC del 95%:

enter image description here

Código de comparación:

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2 votos

Acepto esta respuesta porque va al grano y ofrece una buena comparación entre los distintos métodos. Sin embargo, consulta la excelente respuesta de rlv para obtener más información.

0 votos

Gracias por la excelente y muy útil respuesta. ¿Entiendo correctamente que no se pueden utilizar los IC para comparar grupos/lote, pero sí para comparar efectos? Digamos que tengo dos tratamientos, varios individuos y varias mediciones dentro de los individuos. Utilizaría los individuos como efecto aleatorio, ya que cada uno de ellos contendría x mediciones. Entonces querría saber si estos dos tratamientos dan lugar a una respuesta diferente. ¿Podría utilizar effects ¿El paquete y la IC se solapan en este caso?

5 votos

Se trata de una cuestión más general que es relevante para cualquier enfoque basado en un modelo estándar. Quizá merezca la pena una pregunta aparte. (1) En general, la forma de responder a las preguntas sobre las diferencias entre los tratamientos es establecer el modelo de forma que la diferencia entre los tratamientos focales sea un contraste (es decir, un parámetro estimado) en el modelo y, a continuación, calcular un valor p o comprobar si los intervalos de confianza en un nivel alfa concreto incluyen el cero. (continuación)

20voto

anand Puntos 199

Parece que lo que has hecho en el segundo método es calcular intervalos de confianza para los coeficientes de regresión y luego transformarlos para obtener los IC de las predicciones. Esto ignora las covarianzas entre los coeficientes de regresión.

Intente ajustar el modelo sin un intercepto, de modo que el batch efectos serán realmente las predicciones, y confint le devolverá los intervalos que necesita.

Anexo 1

Hice exactamente lo que sugerí arriba:

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

Estos intervalos parecen coincidir con los resultados de effects .

Anexo 2

Otra alternativa es el lsmeans paquete. Obtiene grados de libertad y una matriz de covarianza ajustada a partir de la pbkrtest paquete.

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

Estos están aún más en consonancia con la effect resultados: los errores estándar son idénticos, pero effect utiliza diferentes d.f. El confint Los resultados de la Adenda 1 son incluso más estrecho que las asintóticas basadas en el uso de $\pm1.96\times\mbox{se}$ . Así que ahora creo que esos son no muy fiable.

Resultados de effect y lsmeans son similares, pero con una situación multifactorial desequilibrada, lsmeans promedia por defecto los factores no utilizados con igual peso, mientras que effect ponderaciones por las frecuencias observadas (disponible como opción en lsmeans ).

0 votos

Gracias por esta solución. Los intervalos son ahora más parecidos, aunque no exactamente iguales. Su respuesta sigue sin responder a la pregunta de si los IC de effects se puede confiar en el paquete para lmer objetos. Estoy considerando utilizar los resultados en una publicación y quiero estar seguro de que los IC se calculan utilizando un método aprobado para los LMM.

0 votos

¿Podría decir : en su Adenda 1 los dos primeros parámetros .sig01 y .sigma produce por confint son esos intervalos de confianza para desviación ? o intervalo de confianza de desviación estándar ?

0 votos

Son los IC para los parámetros etiquetados de esa manera en el modelo. Debería consultar la documentación de lmer para obtener una respuesta definitiva. Sin embargo, la gente suele utilizar anotaciones como sigma para referirse a las desviaciones estándar, y sigma.square o sigma^2 para referirse a las desviaciones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X