我正在寻找反馈,以确定如何正确指定随机效应,以说明重复测量设计中的相关性,但具有多个级别的相关性(包括每个预测因子组合的纵向数据)。结果是二元的,所以我将拟合一个逻辑混合模型。我计划使用lme4
包中的glmer()
函数。如果你想知道这些数据是如何产生的,一个来自眼动仪的例子是:人们的眼睛是"眼睛";被跟踪的";持续30秒,例如,在不同水平的预测器下,确定他们是否看到了屏幕上的某个对象(因此是二进制结果)。
研究设计(可以通过处理R中"伪数据集"下的代码来查看):
- 结果(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")
正确核算相关性:这就是我的问题所在。评论/问题:
- 我认为受试者和试验随机效应是交叉的(不是嵌套的),因为受试者1始终是受试者,试验A始终是试验A。如果设计是嵌套的,就无法像重新编号/重新编号一样(例如,请参阅:https://stats.stackexchange.com/questions/228800/crossed-vs-nested-random-effects-how-do-they-differ-and-how-are-they-specified)
- 正如上面在";当前使用的代码";我已经包括了感兴趣的固定效应(性、干预和性别**干预*),以及使用
+ (1 | Trial) + (1 | Subject)
对试验以及受试者的随机截取。+ (1 | Trial) + (1 | Subject)
是否正确;告诉";解释一个人内部相关性的模型,在试验中,还是需要以另一种方式指定?尽管我不认为随机效果是嵌套的,但它仍然感觉像是有一个";层次结构;但也许CCD_ 5已经考虑到了这一点- 这些数据似乎是独一无二的,因为即使在试验中,每个受试者也有多个测量值(0/1s)。我不确定这对模型拟合的影响
- 我需要进一步告诉模型来区分受试者内部和受试者之间的固定效应吗?或者代码";拾取";关于这个";自动地";用
+ (1 | Trial) + (1 | Subject)
?例如,当您简单地在lme()
和+ (1 | Subject)
或aov()
和+ Error(Subject)
中为受试者指定随机截距时,它可以正确地做到这一点。这就是为什么我在这里简单地使用+ (1 | Trial) + (1 | Subject)
- 最后,我不知道不是每个受试者都能接受每一次试验(而是12次可能的试验中的6次)是否重要,以及这是否会影响代码的某些方面
我正在寻找您的反馈,最好还有用于确定您反馈的参考资料(文本、同行评审论文)。我有多篇关于逻辑回归、更广泛的分类数据分析和混合模型的文章,但据我所知,它们都没有把我在这里提出的想法结合在一起。因此,了解对这种情况特别有用的资源是否也会有所帮助。
(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
可以被黑客攻击…)
- 没有必要对";电平";明确的固定效果(在-内与在-之间)
- 对于给定的样本量,缺乏平衡和/或缺乏完全交叉会降低你的能力,但在其他方面不是问题(这是混合模型方法的一大优势)
- 这听起来像是每个受试者的多个观察结果:试验组合是可交换的(即,你可以将它们都视为来自相同分布的样本,具有相同的期望值等:如果你想考虑受试者内观察结果的顺序,则这是一个例外:试验,例如,随着时间的推移准确性的趋势)。在这种情况下,你最好聚合并进行二项回归——将一个受试者视为"受试者";N次试验中的m次成功";而不是";{1,0,1,1,1,0,1}">
- 对于每个聚类的小有效样本量(即,如果每个受试者的总二进制观测值数量相当少),您需要注意一些技术细节:广泛使用的拉普拉斯近似(由
lme4
、glmmTMB
、INLA
…使用)的准确性可能很差。不幸的是,除了贝叶斯之外,这里没有太多选择——自适应高斯-埃尔米特求积(lme4
,GLMMadaptive
)很少用于具有多个随机效应的问题