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?
0 votos
También he añadido el código exacto que he ejecutado.