我有一个关于 R 中 emmeans 的菜鸟问题。
我使用具有以下变量的 lmer() 拟合复杂模型:
- A:二元分类预测器,主体内
- B:二元分类预测器,主体内
- C:具有 4 个级别的分类预测变量,对象间
- X & Y:不感兴趣的控制变量,一个分类的,一个连续的。
模型如下:
fit1 <- lmer(rt ~ 1 + A*B*C + X + Y + (1+A*B|Subject))
现在我最感兴趣的是 A*B 交互在不同级别的 C 之间有何不同(即,我所拥有的四个组之间的交互是否不同)。我试图使用 emmeans 来解决这个问题,我在 CrossValidated 上找到了一些非常有用的线程,但我似乎找不到一个可以轻松概括到我的案例的线程。
这就是我所做的:我创建了一个带有交互项 (AB = A*B) 的新模型。
fit1b <- lmer(rt ~ 1 + A*C + B*C + AB*C + X + Y + (1+A*B|Subject))
然后像这样使用emmeans:
emms <- emmeans(fit1b, ~ AB*C)
contrast(emms, interaction = "pairwise")
这导致输出似乎有意义,但是,我真的不确定这个设置是否有任何意义。本质上,我的目标是能够确定与组 y 相比,x 组中的 A*B 交互是否更大,同时控制模型中的所有其他内容。
这是这样做的好方法吗?有没有更简单/更好的方法来做到这一点?
编辑:我创建了一个模拟数据集 - 这里是:https ://osf.io/4cr8x A 实际上是冲突任务中的一致性,而 B 是先前的试验一致性,这就是为什么第一次试验在该列中没有价值。C 是组变量,就像上面的示例一样。X 和 Y 是对照,X 是试验编号,Y 是性别。
编辑 2:这是我在模拟数据上运行的确切代码:
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")