双向重复测量线性混合模型

机器算法验证 r 混合模式 随机效应模型 固定效应模型 lme4-nlme
2022-03-20 02:04:20

这是我第一次尝试线性混合模型,我还没有找到一个使用完全重复测量设计的例子,所以我希望我能得到一些帮助。

我有一个如下所示的数据集:

Mydata <- data.frame(
Subject = c(1,2,3,4,5),
Condition =c(rep(c("High", "Low"), each=50)),
Size =c(rep(c(8, 20, 50, 70, 100), each=10)),
Estimate =c(10, 12, 15, 18, 8, 12, 12, 10, 14, 8, 25, 36, 29, 45, 38, 28, 36, 29, 40, 36, 68, 75, 65, 78, 60, 69, 74, 63, 80, 62, 85, 99, 84, 100, 90, 82, 99, 88, 102, 85, 140, 150, 190, 180, 200, 130, 160, 190, 190, 210, 8, 6, 9, 8, 10, 7, 7, 8, 9, 12, 20, 21, 25, 30, 26, 22, 23, 22, 30, 25, 45, 40, 50, 60, 55, 40, 45, 55, 57, 58, 70, 80, 60, 80, 75, 75, 78, 65, 60, 70, 100, 115, 120, 125, 110, 110, 105, 120, 120, 110)
)
Mydata <- Mydata[order(Mydata$Subject),]

在数据中,我有 2 个受试者内因素:

  • 设置大小(8、20、50、70、100);每级重复 2 次(注意:这是一个连续/有序数字变量)
  • 条件(高与低)

每个受试者都被展示了一个不同大小的点阵列(8、20、50、70、100),每个集合大小重复 2 次,他们必须估计他们看到了多少个点。每个受试者使用不同级别的校准(高与低)两次完成相同的任务。因此,每一行代表基于条件和集合大小的单个试验。

我的目标是检查条件和集合大小是否存在主要影响,以及是否存在条件 x 集合大小交互。

根据我的阅读,线性混合模型非常适合,特别是如果我想将主题建模为随机因素(以及条件和集合大小作为固定效应),并尽量减少跨因素级别的数据聚合。

我的第一组问题是:我可以像现在一样使用试验级数据吗?我的实际数据集有 15 个级别的集合大小和每个集合大小的 8 次重复。或者在我拟合混合模型之前,是否更适合在重复中聚合以获得每个集合大小的平均值?

在阅读了如何使用 lme4 和 nlme 之后,我尝试使用 lme4 拟合以下仅随机截取模型(我还为它们安装了 nlme):

baseline.model <- lmer(Estimate ~ 1 + (1|Subject), Mydata)

测试集合大小的主效应

setsize.model <- lmer(Estimate ~ Size + (1|Subject), Mydata)
anova(baseline.model, setsize.model)

检验条件的主效应

condition.model <- lmer(Estimate ~ Size + Condition + (1|Subject), Mydata)
anova(setsize.model, condition.model)

测试交互

interaction.model <- lmer(Estimate ~ Size*Condition + (1|Subject), Mydata)
anova(condition.model, interaction.model)

我的第二组问题是:这些模型是否合适?我是否应该考虑嵌套模型,例如主题内的大小和条件?我是否也应该考虑随机斜率,因为假设大小和/或条件,甚至大小 x 条件的影响可能因受试者而异,这似乎是合理的。我认为如果我的试验级数据倾向于在受试者中相关,这可能很关键。如果是这样,这是适合它的正确方法吗?

interaction.model <- lmer(Estimate ~ Size*Condition + (1 + Condition + Size + Condition*Size|Subject), Mydata)

我的最后一个问题是:对于预期的大小 x 条件交互,我如何执行事后测试来检查每个大小级别是否存在条件效应(我假设条件效应对更大的集合大小,但不是小套装尺寸)?我尝试了以下方法,但是对于每个大小级别的 2 个条件级别的参数估计值是相同的,所以我想知道模型是否一开始就被错误地拟合了:

lsmeans(interaction.model, ~ Condition | Size, adjust="tukey")

我将不胜感激任何建议!如果有什么需要澄清的,请告诉我,我会提供尽可能多的细节。

谢谢!

1个回答

线性混合模型是您想要的。首先,确保这Subject是一个因素:

Mydata$Subject <- as.factor(Mydata$Subject)

然后,我将使用饱和的固定效应和随机效应结构拟合模型:

mod1 <- lmer(Estimate ~ Condition + Size +  Condition * Size + # Fixed effects
               (1 + Condition + Size | Subject), # Random effects, nested within subject
             data=Mydata, REML=TRUE) # Specifying data and estimation

我知道公式的一部分是多余的,但我想尽可能地向将来阅读的任何人说明。

请注意,具有固定效应结构的模型(1 + Condition + Size + Condition*Size | Subject)识别且不会收敛。

您希望Condition指定为随机效应,因为这允许不同条件级别的方差不同,并Size让不同人的斜率Size不同。

然后我会做一个自上而下的测试程序。然后我会设置相同的模型,但一个接一个地取出随机斜率:

mod2 <- lmer(Estimate ~ Condition + Size +  Condition * Size + # Fixed effects
               (1 + Size | Subject), # Random effects, nested within subject
             data=Mydata, REML=TRUE) # Specifying data and estimation

mod3 <- lmer(Estimate ~ Condition + Size +  Condition * Size + # Fixed effects
               (1 + Condition | Subject), # Random effects, nested within subject
             data=Mydata, REML=TRUE) # Specifying data and estimation

anova(mod1,mod2,refit=FALSE) # tests for significance of condition random effecct
anova(mod1,mod3,refit=FALSE) # tests for significance of size random effecct

anova请注意,您正在通过这两个测试同时估计斜率和截距之间的随机斜率和协方差,因此您需要相应地调整 p 值。

如果移除斜率会产生显着差异,请将其保留;如果你把它们拿出来时也很合身,那么你可以把它们放在外面。

然后你可以对固定效应做同样的事情,但你可以REML=FALSE为那些指定,不需要调整 p 值。您还可以使用 t 检验lmerTest他们通常给出相同的结果。

目前尚不清楚是否Size是连续的。你说是这样,但是你谈到它有不同的“级别”,并希望进行事后测试以在不同级别进行比较。如果您将其视为线性和连续的,那么这些都不重要;如果您想对连续调节剂进行事后测试,您可以查看简单的斜率分析