Considere los datos del estudio del sueño, incluidos en lme4. Bates analiza esto en su libro en línea sobre lme4. En el capítulo 3, considera dos modelos para los datos.
M0:Reaction∼1+Days+(1|Subject)+(0+Days|Subject)
y
MA:Reaction∼1+Days+(Days|Subject)
En el estudio participaron 18 sujetos, estudiados durante un período de 10 días privados de sueño. Los tiempos de reacción se calcularon al inicio y en los días posteriores. Existe un claro efecto entre el tiempo de reacción y la duración de la privación del sueño. También hay diferencias significativas entre los sujetos. El modelo A permite la posibilidad de una interacción entre la intercepción aleatoria y los efectos de la pendiente: imagine, por ejemplo, que las personas con tiempos de reacción pobres sufren de manera más aguda los efectos de la privación del sueño. Esto implicaría una correlación positiva en los efectos aleatorios.
En el ejemplo de Bates, no hubo una correlación aparente del gráfico Lattice y no hubo diferencias significativas entre los modelos. Sin embargo, para investigar la pregunta planteada anteriormente, decidí tomar los valores ajustados del estudio del sueño, aumentar la correlación y observar el rendimiento de los dos modelos.
Como puede ver en la imagen, los largos tiempos de reacción están asociados con una mayor pérdida de rendimiento. La correlación utilizada para la simulación fue 0.58
Simulé 1000 muestras, usando el método de simulación en lme4, basado en los valores ajustados de mis datos artificiales. Encajé a M0 y Ma en cada uno y miré los resultados. El conjunto de datos original tenía 180 observaciones (10 para cada uno de los 18 sujetos), y los datos simulados tienen la misma estructura.
La conclusión es que hay muy poca diferencia.
- Los parámetros fijos tienen exactamente los mismos valores en ambos modelos.
- Los efectos aleatorios son ligeramente diferentes. Hay 18 efectos aleatorios de intercepción y 18 pendientes para cada muestra simulada. Para cada muestra, estos efectos se ven obligados a sumar 0, lo que significa que la diferencia media entre los dos modelos es (artificialmente) 0. Pero las variaciones y covarianzas difieren. La mediana de covarianza bajo MA fue 104, contra 84 bajo M0 (valor real, 112). Las variaciones de pendientes e intersecciones fueron mayores bajo M0 que MA, presumiblemente para obtener el margen de maniobra adicional necesario en ausencia de un parámetro de covarianza libre.
- El método ANOVA para lmer proporciona una estadística F para comparar el modelo de pendiente con un modelo con solo una intercepción aleatoria (sin efecto debido a la privación del sueño). Claramente, este valor era muy grande en ambos modelos, pero era típicamente (pero no siempre) mayor en MA (media 62 frente a media de 55).
- La covarianza y la varianza de los efectos fijos son diferentes.
- Aproximadamente la mitad del tiempo, sabe que la MA es correcta. La mediana del valor p para comparar M0 con MA es 0.0442. A pesar de la presencia de una correlación significativa y 180 observaciones balanceadas, el modelo correcto se elegiría solo la mitad del tiempo.
- Los valores pronosticados difieren bajo los dos modelos, pero muy ligeramente. La diferencia media entre las predicciones es 0, con un SD de 2.7. El SD de los valores predichos mismos es 60.9
Entonces, ¿por qué pasa ésto? @gung supuso, razonablemente, que no incluir la posibilidad de una correlación obliga a que los efectos aleatorios no estén correlacionados. Quizás debería; pero en esta implementación, los efectos aleatorios pueden correlacionarse, lo que significa que los datos pueden llevar los parámetros en la dirección correcta, independientemente del modelo. La incorrección del modelo incorrecto se muestra en la probabilidad, por lo que puede (a veces) distinguir los dos modelos en ese nivel. El modelo de efectos mixtos básicamente ajusta regresiones lineales a cada sujeto, influenciado por lo que el modelo cree que deberían ser. El modelo incorrecto fuerza el ajuste de valores menos plausibles de los que obtiene con el modelo correcto. Pero los parámetros, al final del día, se rigen por el ajuste a los datos reales.
Aquí está mi código algo torpe. La idea era ajustar los datos del estudio del sueño y luego construir un conjunto de datos simulados con los mismos parámetros, pero una correlación mayor para los efectos aleatorios. Ese conjunto de datos se alimentó para simular.lmer () para simular 1000 muestras, cada una de las cuales se ajustó en ambos sentidos. Una vez que emparejé los objetos ajustados, pude extraer diferentes características del ajuste y compararlos, usando pruebas t, o lo que sea.
# Fit a model to the sleep study data, allowing non-zero correlation
fm01 <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=sleepstudy, REML=FALSE)
# Now use this to build a similar data set with a correlation = 0.9
# Here is the covariance function for the random effects
# The variances come from the sleep study. The covariance is chosen to give a larger correlation
sigma.Subjects <- matrix(c(565.5,122,122,32.68),2,2)
# Simulate 18 pairs of random effects
ranef.sim <- mvrnorm(18,mu=c(0,0),Sigma=sigma.Subjects)
# Pull out the pattern of days and subjects.
XXM <- model.frame(fm01)
n <- nrow(XXM) # Sample size
# Add an intercept to the model matrix.
XX.f <- cbind(rep(1,n),XXM[,2])
# Calculate the fixed effects, using the parameters from the sleep study.
yhat <- XX.f %*% fixef(fm01 )
# Simulate a random intercept for each subject
intercept.r <- rep(ranef.sim[,1], each=10)
# Now build the random slopes
slope.r <- XXM[,2]*rep(ranef.sim[,2],each=10)
# Add the slopes to the random intercepts and fixed effects
yhat2 <- yhat+intercept.r+slope.r
# And finally, add some noise, using the variance from the sleep study
y <- yhat2 + rnorm(n,mean=0,sd=sigma(fm01))
# Here is new "sleep study" data, with a stronger correlation.
new.data <- data.frame(Reaction=y,Days=XXM$Days,Subject=XXM$Subject)
# Fit the new data with its correct model
fm.sim <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=new.data, REML=FALSE)
# Have a look at it
xyplot(Reaction ~ Days | Subject, data=new.data, layout=c(6,3), type=c("p","r"))
# Now simulate 1000 new data sets like new.data and fit each one
# using the right model and zero correlation model.
# For each simulation, output a list containing the fit from each and
# the ANOVA comparing them.
n.sim <- 1000
sim.data <- vector(mode="list",)
tempReaction <- simulate(fm.sim, nsim=n.sim)
tempdata <- model.frame(fm.sim)
for (i in 1:n.sim){
tempdata$Reaction <- tempReaction[,i]
output0 <- lmer(Reaction ~ 1 + Days +(1|Subject)+(0+Days|Subject), data = tempdata, REML=FALSE)
output1 <- lmer(Reaction ~ 1 + Days +(Days|Subject), data=tempdata, REML=FALSE)
temp <- anova(output0,output1)
pval <- temp$`Pr(>Chisq)`[2]
sim.data[[i]] <- list(model0=output0,modelA=output1, pvalue=pval)
}