【问题标题】:Specifying random effects for repeated measures in logistic mixed model in R: lme4::glmer在 R 中为逻辑混合模型中的重复测量指定随机效应:lme4::glmer
【发布时间】:2020-12-01 06:30:38
【问题描述】:

我正在寻找反馈,以确定如何正确指定随机效应以解释重复测量设计中的相关性,但具有多个相关级别(包括对于每个预测变量组合的纵向数据 )。结果是二元的,所以我将拟合一个逻辑混合模型。我打算使用lme4 包中的glmer() 函数。如果您想知道这些数据是如何产生的,一个例子来自眼动仪:人们的眼睛被“跟踪”了 30 秒,例如,在不同级别的预测器下,确定他们是否在看屏幕上的某个对象(因此是二元结果)。

研究设计(可以通过在R中处理下面“Dummy dataset”下的代码看到):

  • 结果 (Binary_outcome) 是二进制的。
    • 重复测量:在每个预测变量组合中多次记录每个受试者的二元反应(有关结构,请参见下面的“虚拟数据集”)。
  • 有两个感兴趣的预测变量(二进制、分类):
    • 一个受试者之间因素,性别(男性/女性)。
    • 一个受试者内因素,干预(前/后)。
  • 每个受试者在六次试验中进行测量(在这些试验下有重复测量),试验
    • 请注意,一个人可以分配 12 个可能试验。因此,并非每个受试者都参加了全部 12 次试验,而是随机的一组 6 次试验。
    • 试用不是感兴趣的变量。只是认为个体内部的观察结果,试验中可能更相似,因此试验也应该被认为是聚类相关的一种形式。

虚拟数据集:显示我的数据的一般结构(尽管这不是实际数据集):

structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Trial = c("A", "A", 
"A", "B", "B", "B", "C", "C", "C", "D", "D", "D", "E", "E", "E", 
"F", "F", "F", "G", "G", "G", "E", "E", "E", "D", "D", "D", "A", 
"A", "A", "J", "J", "J", "L", "L", "L"), Intervention = c("Pre", "Pre", "Pre", "Pre", 
"Pre", "Pre", "Pre", "Pre", "Pre", "Post", "Post", "Post", "Post", 
"Post", "Post", "Post", "Post", "Post", "Pre", "Pre", "Pre", 
"Pre", "Pre", "Pre", "Pre", "Pre", "Pre", "Post", "Post", "Post", 
"Post", "Post", "Post", "Post", "Post", "Post"), Sex = c("Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male"), Binary_outcome = c(1L, 
1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 
1L, 1L, 1L)), class = "data.frame", row.names = c(NA, -36L))

当前正在使用的代码:这是我目前正在使用的,但我不知道我是否应该根据数据的结构以不同的方式指定随机效应(在下面的“正确考虑相关性”)。

install.packages("lme4")
library(lme4)

logit_model <- glmer(Binary_outcome ~ factor(Sex)*factor(Intervention) + 
                                (1 | Trial) + 
                                (1 | Subject), 
                     data = data01, 
                     family="binomial")

正确计算相关性:这就是我的问题所在。意见/问题:

  • 我相信 SubjectTrial 随机效应是交叉的(不是嵌套的),因为 Subject 1 始终是 Subject 1,而 Trial A 始终是 Trial A。如果设计是嵌套的,则无法为这些重新编号/重新字母(参见,例如:https://stats.stackexchange.com/questions/228800/crossed-vs-nested-random-effects-how-do-they-differ-and-how-are-they-specified)。
  • 如上面“正在使用的当前代码”下所示,我已经包含了感兴趣的固定效果(SexInterventionSex em>**Intervention*),以及使用+ (1 | Trial) + (1 | Subject) 随机截取TrialSubject
    • + (1 | Trial) + (1 | Subject) 是否正确地“告诉”模型考虑人体内的相关性,在试验中,还是需要以其他方式指定?虽然我不认为随机效果是嵌套的,但感觉还是有一个“层次结构”,但也许+ (1 | Trial) + (1 | Subject)已经说明了这一点。
    • 这些数据似乎是独一无二的,即使在试验中,每个受试者也有多个测量值 (0s/1s)。我不确定这对模型拟合的影响。
    • 我是否需要进一步告诉模型区分受试者内和受试者间的固定效应?或者代码是否使用+ (1 | Trial) + (1 | Subject)“自动”“提取”?例如,当您简单地为 lme()+ (1 | Subject)aov()+ Error(Subject) 指定随机截距时,它会正确执行此操作。这就是我在这里简单使用+ (1 | Trial) + (1 | Subject) 的原因。
  • 最后,我不知道不是每个受试者都接受每次试验(而是 12 次可能的试验中的 6 次)是否重要,以及这是否会影响代码的某些方面。

我正在寻找您的反馈,最好还有用于确定您的反馈的参考资料(文本、同行评议的论文)。我有多篇关于逻辑回归、更广泛的分类数据分析和混合模型的文章,但是 - 据我所知 - 它们都没有将我在这里提出的想法结合在一起。因此,了解对这种情况特别有用的资源是否也会有所帮助。

【问题讨论】:

  • 1/2 Baayen 等人的论文可能会有所帮助(尽管它是线性的,而不是逻辑的,混合模型)。 (2008 年):具有交叉随机效应的主题和项目的混合效应建模。他们至少有重复的项目(试验),以及一个受试者内变量(在论文中称为 SOA)。但是有一些差异:没有受试者之间的变量,对所有受试者(以及跨 SOA 的两个级别)使用相同的项目/试验,并且在项目/试验中没有重复测量(这是我的二进制文件中固有的)数据,同样,每个人都在一段时间内)。
  • 2/2 但是,这篇论文向我展示了随机效应规范可能至少在某种程度上与您的模型“需要”多少才能进行良好的估计/参数化有关。它们以更复杂的随机效果开始,但最终以+ (1 | Item) + (1 | Subj) 结束,这相当于我在帖子中的+ (1 | Trial) + (1 | Subject)
  • Baayen 等人的另一个见解。 (2008 年):具有交叉随机效应的主题和项目的混合效应建模:在他们的第二个示例中,并非每个主题都得到相同的单词,但随机效应再次指定为 + (1 | Word) + (1 | Subject),所以这可能表明我的答案关于并非所有受试者都进行相同试验(在我的情况下是图像)是否重要的​​问题是不重要的。
  • 这属于CrossValidated。我已投票决定将其关闭/迁移到那里。
  • 谢谢你,@Ben Bolker。我不确定在哪里发帖最好。我支持迁移到 CrossValidated。

标签: r logistic-regression lme4 mixed-models panel-data


【解决方案1】:

(1|Trial) + (1|Subject) 是合理的:它指定了试验之间和受试者之间的变化。效果确实是交叉的:如果您只想允许受试者内的试验之间存在差异,您可以使用(1|Subject/Trial);对于试验中受试者之间的差异,您可以使用(1|Trial/Subject)。由于每次试验有多个观察结果:主题组合,您可以使用 (1|Trial) + (1|Subject) + (1|Subject:Trial) 来允许另一个级别的变化,但我有一个替代建议(见下文)。

我相信这个设计对应的最大模型是

Binary_outcome ~ Sex*Intervention + cor(Trial | Subject) + (1|Trial)

cor() 表示相关矩阵,即我们不试图估计每个受试者在同一试验中重复测量的变化——因为我们没有这些信息。这里(1|Trial) 表示所有受试者共有的试验之间的变化,而cor(Trial|Subject) 表示受试者内试验之间的相关性。 然而,虽然尝试确定最大值是一个有用的练习,但这里不实用,原因有两个:(1) 估计跨试验的完整相关矩阵需要 (n*(n- 1)/2 = 12*11/2 =) 66个参数,没有庞大的数据集和庞大的计算机是不可能的; (2) R 中很少有可用的混合模型工具提供将随机效应约束到相关矩阵的灵活性(MCMCglmm 可以,而其他一些贝叶斯工具,例如brms 可能;glmmTMB 可能是扩展相当容易,lme4 可能会被黑客入侵...)

  • 无需明确编码固定效果的“级别”(组内 vs 组间)
  • 缺乏平衡和/或缺乏完全交叉会降低给定样本量的功效,但不是其他问题(这是混合模型方法的一大优势)
  • 听起来每个受试者的多个观察结果:试验组合是可交换的(即您可以将它们全部视为来自相同分布的样本,具有相同的预期值等:如果您想考虑,则例外情况是受试者中观察的顺序:试验,例如随着时间的推移准确性的趋势)。在这种情况下,您最好聚合并进行二项式回归——将主题视为“N 次试验中的 m 次成功”而不是“{1,0,1,1,1,0,0,1}”。
  • 对于每个集群的有效样本量较小(即,如果每个受试者的二元观测总数相当少),您需要注意一些技术细节:广泛使用的拉普拉斯近似的准确性(由lme4glmmTMBINLA 使用,...)可能很差。不幸的是,除了贝叶斯之外,您在这里没有太多选择 - 自适应 Gauss-Hermite 正交(lme4GLMMadaptive)很少实现/适用于具有多个随机效应的问题。

【讨论】:

  • 1/2 非常感谢您的回复,@Ben Bolker - 这非常有帮助。我可能会后悔告诉你,我的实际数据集超过 167 万行,所以可能只是符合“巨型数据集”的条件,哈哈。但是,我确实没有有一台巨型计算机...鉴于此,我想我会坚持使用lme4 的更“标准”实现:) 因此我将计划使用@987654339 @ 并可能按照您的建议添加 (1|Subject:Trial)
  • 2/2 另外,正如你另外提到的,我也在研究具有比例的模型,两者都在线性混合模型框架中(比例非常表现良好并满足所有假设)和通过增长曲线分析。其中很多对我来说是新的,或者至少以新的方式应用,所以你花时间给我一些反馈真的非常感谢。问候。
  • 如果你可以聚合到subject:trial的级别,这将减少问题的大小;然后你应该省略 (1|Subject:Trial)。您可能希望将时间与 glmmTMB、INLA 或 Doug Bates 的 Julia MixedModels.jl 包(数据子集)进行比较
  • 您的意思是编码一个描述受试者/试验组合的新变量(仍然将数据保留为 0 和 1)?然后我只需将一个术语指定为随机效应(例如,(1 | subject_trial),如果我将这个新变量称为 subject_trial)?还是您的意思是通过转换为比例来汇总试验/主题组合?我已经为一些分析这样做了,但对逻辑模型会向我展示什么感到好奇,因为它保留了更多数据,因此具有强大的功能,并且由于我的两个预测变量都是二元的,因此具有特别好的解释。
  • 我的意思是综合试验/主题组合。 (使用cbind(success,failure) 作为您的响应变量, proportion 作为您的响应变量,并包括weights=N 每个主题/试验组合。如果每个主题/试验有多个可交换的二元结果,聚合( 1) 实际上不会丢失任何信息,(2) 计算效率更高,(3) 保留所有相同的参数估计等等等等。
猜你喜欢
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多