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)