在R:lme4 :: glmer

如何解决在R:lme4 :: glmer

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

研究设计(可以通过处理R中下面“虚拟数据集”下的代码来看到)

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

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

structure(list(Subject = c(1L,1L,2L,2L),Trial = c("A","A","B","C","D","E","F","G","J","L","L"),Intervention = c("Pre","Pre","Post","Post"),Sex = c("Female","Female","Male","Male"),Binary_outcome = c(1L,0L,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")

正确核算相关性:这是我的问题所在。评论/问题:

  • 我相信 Subject Trial 随机效果都是交叉的(不是嵌套的),因为主体1始终是主体1,而试验A始终是审判A。如果设计是嵌套的,则无法对它们进行重新编号/重新字母化(例如,参见https://stats.stackexchange.com/questions/228800/crossed-vs-nested-random-effects-how-do-they-differ-and-how-are-they-specified)。
  • 从上面的“正在使用当前代码”中可以看出,我包括了感兴趣的固定影响( Sex Intervention Sex ** Intervention *),并使用+ (1 | Trial) + (1 | Subject) Trial Subject 进行随机拦截。
    • + (1 | Trial) + (1 | Subject)是否正确地“讲”模型以说明人内的相关性,即在试验之内,还是需要以其他方式指定?即使我不认为随机效果是嵌套的,也仍然感觉好像存在“层次结构”,但这也许已经由+ (1 | Trial) + (1 | Subject)解释了。
    • 这些数据似乎很独特,即使在试验中,每个受试者也要进行多次测量(0s / 1s)。我不确定这对模型拟合的影响。
    • 我是否需要进一步告诉模型以区分对象内部和对象之间的固定效果?还是使用+ (1 | Trial) + (1 | Subject)“自动”对此代码“拾取”?例如,当您简单地为lme()的{​​{1}}或+ (1 | Subject)的{​​{1}}指定主题的随机截距时,它就能正确地做到这一点。这就是为什么我在这里仅使用aov()的原因。
  • 最后,我不知道不是每个受试者都进行每个试验(而是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可能; { {1}}可以很容易地扩展,glmmTMB可以被黑...)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?