线性混合效应模型中混合三向交互作用与 emmeans 的成对比较

机器算法验证 r 混合模式 lme4-nlme 相互作用 多重比较
2022-03-13 10:02:10

我有一个关于 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")  
1个回答

不必为了进行所需的事后比较而拟合单独的模型。你试过:

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

by但是您可以明智地使用变量从原始模型中获得相同的结果:

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

结果con1是每个级别的所需 1-df 交互效应Cby因子被记住)。然后我们成对比较它们,不再使用by分组。默认情况下,对比较族进行 Tukey 调整,但您可以通过adjust.