Tengo un conjunto de datos de medidas repetidas desequilibradas para analizar, y he leído que la forma en que la mayoría de los paquetes estadísticos manejan esto con ANOVA (es decir, la suma de cuadrados del tipo III) es incorrecta. Por lo tanto, me gustaría usar un modelo de efectos mixtos para analizar estos datos. He leído mucho sobre modelos mixtos en R
, pero todavía soy muy nuevo en R
modelos de efectos mixtos y no estoy muy seguro de que estoy haciendo las cosas bien. Tenga en cuenta que todavía no puedo divorciarme por completo de los métodos "tradicionales", y todavía necesito valores y pruebas post hoc.
Me gustaría saber si el siguiente enfoque tiene sentido, o si estoy haciendo algo terriblemente mal. Aquí está mi código:
# load packages
library(lme4)
library(languageR)
library(LMERConvenienceFunctions)
library(coda)
library(pbkrtest)
# import data
my.data <- read.csv("data.csv")
# create separate data frames for each DV & remove NAs
region.data <- na.omit(data.frame(time=my.data$time, subject=my.data$subject, dv=my.data$dv1))
# output summary of data
data.summary <- summary(region.data)
# fit model
# "time" is a factor with three levels ("t1", "t2", "t3")
region.lmer <- lmer(dv ~ time + (1|subject), data=region.data)
# check model assumptions
mcp.fnc(region.lmer)
# remove outliers (over 2.5 standard deviations)
rm.outliers <- romr.fnc(region.lmer, region.data, trim=2.5)
region.data <- rm.outliers$data
region.lmer <- update(region.lmer)
# re-check model assumptions
mcp.fnc(region.lmer)
# compare model to null model
region.lmer.null <- lmer(dv ~ 1 + (1|subject), data=region.data)
region.krtest <- KRmodcomp(region.lmer, region.lmer.null)
# output lmer summary
region.lmer.summary <- summary(region.lmer)
# run post hoc tests
t1.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)
region.lmer <- lmer(dv ~ relevel(time,ref="t2") + (1|subject), data=region.data)
t2.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)
region.lmer <- lmer(dv ~ relevel(time,ref="t3") + (1|subject), data=region.data)
t3.pvals <- pvals.fnc(region.lmer, ndigits=10, withMCMC=TRUE)
# Get mcmc mean and 50/95% HPD confidence intervals for graphs
# repeated three times and stored in a matrix (not shown here for brevity)
as.numeric(t1.pvals$fixed$MCMCmean)
as.numeric(t1.pvals$fixed$HPD95lower)
as.numeric(t1.pvals$fixed$HPD95upper)
HPDinterval(as.mcmc(t1.pvals$mcmc),prob=0.5)
HPDinterval(as.mcmc(t1.pvals$mcmc),prob=0.5)
Algunas preguntas específicas que tengo:
- ¿Es esta una forma válida de analizar modelos de efectos mixtos? Si no, qué debería hacer en su lugar.
- ¿Las críticas trazadas por mcp.fnc son lo suficientemente buenas para verificar los supuestos del modelo, o debería tomar medidas adicionales?
- Entiendo que para que los modelos mixtos sean válidos, los datos deben respetar supuestos de normalidad y homocedasticidad. ¿Cómo juzgo qué es "aproximadamente normal" y qué no lo es mirando las tramas de críticas generadas por mcp.fnc? ¿Solo necesito tener una idea de esto, o es su forma prescrita de hacer las cosas? ¿Qué tan robustos son los modelos mixtos con respecto a estos supuestos?
- Necesito evaluar las diferencias entre los tres puntos de tiempo para ~ 20 características (biomarcadores) de los sujetos en mi muestra. ¿Es aceptable ajustar y probar modelos separados para cada uno siempre que informe todas las pruebas realizadas (significativas o no), o necesito alguna forma de corrección para comparaciones múltiples?
Para ser un poco más preciso con respecto al experimento, aquí hay algunos detalles más. Seguimos a varios participantes longitudinalmente mientras se sometían a un tratamiento. Medimos una serie de biomarcadores antes del inicio del tratamiento y en dos momentos después. Lo que me gustaría ver es si hay diferencia en estos biomarcadores entre los tres puntos de tiempo.
Estoy basando la mayor parte de lo que estoy haciendo aquí en este tutorial , pero hice algunos cambios en función de mis necesidades y las cosas que leo. Los cambios que hice son:
- vuelva a mezclar el factor "tiempo" para obtener comparaciones t1-t2, t2-t3 y t1-t3 con pvals.fnc (del paquete languageR)
- comparar mi modelo mixto con el modelo nulo usando una prueba F aproximada basada en el enfoque de Kenward-Roger (usando el paquete pbkrtest) en lugar de una prueba de razón de probabilidad (porque leí, que Kenward-Roger es mejor considerado en este momento)
- Use el paquete LMERConvenienceFunctions para verificar los supuestos y eliminar los valores atípicos (porque leí que los modelos mixtos son muy sensibles a los valores atípicos)
fuente
Respuestas:
Su (s) pregunta (s) es un poco "grande", así que comenzaré con algunos comentarios y sugerencias generales.
Algunas lecturas de antecedentes y paquetes útiles
Probablemente deberías echar un vistazo a algunas de las introducciones del tutorial sobre el uso de modelos mixtos, te recomendaría comenzar con Baayen et al (2008) - Baayen es el autor de
languageR
. Barr et al (2013) discuten algunos problemas con la estructura de efectos aleatorios, y Ben Bolker es uno de los desarrolladores actuales delme4
. Baayen et al es especialmente bueno para sus preguntas porque pasan mucho tiempo discutiendo el uso de pruebas de arranque / permutación (lo que está detrásmcp.fnc
).Literatura
Florian Jaeger también tiene un montón de cosas en el lado práctico de modelos mixtos en el blog de su laboratorio .
También hay una serie de paquetes R útiles para visualizar y probar modelos mixtos, como
lmerTest
yeffects
. Eleffects
paquete es especialmente bueno porque le permite trazar la regresión lineal y los intervalos de confianza que se producen detrás de escena.Bondad de ajuste y comparación de modelos.
lmerTest
anova()
mer
summary()
fixef()
.También debe asegurarse de que ninguno de sus efectos fijos esté demasiado correlacionado: la multicolinealidad viola los supuestos del modelo. Florian Jaeger ha escrito un poco sobre esto, así como algunas posibles soluciones.
Comparaciones múltiples
Abordaré tu pregunta # 4 un poco más directamente. La respuesta es básicamente la misma que una buena práctica con ANOVA tradicional, desafortunadamente este parece ser un lugar donde existe una gran incertidumbre para la mayoría de los investigadores. (Es lo mismo que ANOVA tradicional porque los modelos lineales de efectos mixtos y ANOVA se basan en el modelo lineal general, es solo que los modelos mixtos tienen un término adicional para los efectos aleatorios). Si está asumiendo que las ventanas de tiempo hacen un diferencia y desea comparar los efectos del tiempo, debe incluir el tiempo en su modelo. Esto, por cierto, también le proporcionará una forma conveniente de juzgar si el tiempo marcó la diferencia: ¿hay un efecto principal (fijo) para el tiempo? La desventaja de seguir esta ruta es que su modelo se volverá MUCHO más complejo y el único "super" Un modelo con tiempo como parámetro probablemente tomará más tiempo en computarse que tres modelos más pequeños sin tiempo como parámetro. De hecho, el ejemplo clásico de tutorial para modelos mixtos es
sleepstudy
que usa el tiempo como un paramater.foreach
lme4
Si sus características son la variable dependiente, tendrá que calcular diferentes modelos de todos modos, y luego puede usar el AIC y el BIC para comparar los resultados.
fuente