8 votos

Comparaciones por pares con emmeans para una interacción mixta de tres vías en un modelo lineal de efectos mixtos

Tengo una pregunta de novato sobre emmeans en R.

He ajustado un modelo complejo utilizando lmer() con las siguientes variables:

  • A: un predictor categórico binario, dentro del tema
  • B: un predictor categórico binario, dentro del tema
  • C: un predictor categórico con 4 niveles, entre sujetos
  • X e Y: variables de control sin interés, una categórica y otra continua.

El modelo es el siguiente:

fit1 <- lmer(rt ~ 1 + A*B*C + X + Y + (1+A*B|Subject))

Ahora estoy principalmente interesado en cómo la interacción A*B difiere a través de diferentes niveles de C (es decir, es la interacción diferente a través de los cuatro grupos que tengo). Estaba tratando de usar emmeans para llegar al fondo de esto, y he encontrado algunos hilos muy útiles aquí en CrossValidated, pero parece que no puedo encontrar uno que pueda generalizar fácilmente a mi caso.

Esto es lo que hice: Creé un nuevo modelo con un término de interacción (AB = A*B).

fit1b <- lmer(rt ~ 1 + A*C + B*C + AB*C + X + Y + (1+A*B|Subject))

Entonces usé emmeans así:

emms <-  emmeans(fit1b, ~ AB*C)
contrast(emms, interaction = "pairwise")

Esto resulta en una salida que parece tener sentido, sin embargo, estoy realmente inseguro acerca de si esta configuración tiene algún sentido para empezar. Esencialmente, mi objetivo es poder determinar si la interacción A*B es mayor en el grupo x en comparación con el grupo y, mientras se controlan todas las demás cosas en el modelo.

¿Es ésta una buena manera de hacerlo? ¿Existe una forma más fácil o más cómoda de hacerlo?

EDIT: He creado un conjunto de datos simulados - aquí está: https://osf.io/4cr8x A es en realidad la congruencia en una tarea de conflicto, y B es la congruencia del ensayo anterior, por eso los primeros ensayos no tienen valor en esa columna. C es la variable de grupo, al igual que en el ejemplo anterior. X e Y son los controles, siendo X el número de ensayos e Y el sexo.

EDIT 2: Y aquí está el código exacto que ejecuté en los datos simulados:

library(lme4)
library(lmerTest)
library(emmeans)

Data <- read.csv("simdat.csv",header=TRUE, sep=",", na.strings="-999", dec=".", strip.white=TRUE)

Data$A <- as.factor(Data$A)
Data$B <- as.factor(Data$B)
Data$C <- as.factor(Data$C)
Data$Y <- as.factor(Data$Y)
Data$Subject <- as.factor(Data$subject)

fit1 <- lmer(rt ~ 1 + A*B*C + X + Y + (1|Subject), data = Data, verbose = 0, REML = F) #I simplified the random structure as the original wouldn't converge with the simulated data

interaction_term <- (as.numeric(levels(Data$A))[Data$A])*(as.numeric(levels(Data$B))[Data$B])
Data$AB <- as.factor(interaction_term) 

fit2 <- lmer(rt ~ 1 + A*C + B*C + AB*C + X + Y + (1|Subject), data = Data, verbose = 0, REML = F)

emms <-  emmeans(fit2, ~ AB*C)
contrast(emms, interaction = "pairwise")

1 votos

¿puede compartir los datos (o algunos de ellos)? Sería más fácil demostrarlo con datos

2 votos

FWIW esto no debería ser específico de un modelo mixto; yo pensaría que la pregunta sería igualmente relevante (y la solución sería la misma) para lm(rt ~ 1 + A*C + B*C + AB*C + X + Y)

0 votos

Gracias por la sugerencia. Rápidamente he simulado algunos datos y he añadido un enlace osf al archivo xls. He actualizado la pregunta. ¿Puedes verlo?

11voto

anand Puntos 199

No debería ser necesario ajustar un modelo separado sólo para hacer las comparaciones post-hoc que quieres. Lo has intentado:

emms <-  emmeans(fit1b, ~ AB*C)
contrast(emms, interaction = "pairwise")

pero se pueden obtener los mismos resultados del modelo original utilizando by variables con criterio:

emms1 <- emmeans(fit1, ~ A*B | C)
con1 <- contrast(emms1, interaction = "pairwise")
pairs(con1, by = NULL)

El con1 Los resultados son los efectos de interacción 1-d.f. deseados para cada nivel de C (el by se recuerda el factor). A continuación, los comparamos por parejas, sin utilizar el by agrupación. Por defecto, se realiza un ajuste de Tukey a la familia de comparaciones, pero puede utilizar un método diferente mediante adjust .

0 votos

Gracias, es una respuesta fantástica, parece exactamente lo que necesito. Antes de aceptarla, ¿podría aclarar cómo leer la salida? Por ejemplo, la primera línea es A0 - A1,B0 - B1,C1 - A0 - A1,B0 - B1,C2 - ¿es esto entonces, la diferencia en la interacción A*B entre los grupos C1 y C2? (Para que el resultado sea más claro, he etiquetado cada nivel de factor.) De forma similar, la línea dos, A0 - A1,B0 - B1,C1 - A0 - A1,B0 - B1,C3 es la diferencia entre el primer y el tercer grupo, ¿es correcto?

1 votos

Sí, eso es correcto. Si miras con1 son comparaciones por pares de los mismos. Estoy de acuerdo en que el etiquetado es confuso; un resultado de múltiples pasos.

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