使用lmer进行重复测量的线性混合效应模型


41

编辑2:我本来以为我需要对一个因素进行重复测量的两因素方差分析,但现在我认为线性混合效应模型将对我的数据更好。我想我几乎知道需要做什么,但仍然有些困惑。

我需要分析的实验如下:

  • 将受试者分配到几个治疗组之一
  • 在多天的时间对每个受试者进行测量
  • 所以:
    • 受试者嵌套在治疗中
    • 治疗越过一天

(每个受试者仅被分配一种治疗,并且每天对每个受试者进行测量)

我的数据集包含以下信息:

  • 主题=阻止因素(随机因素)
  • 天=主题或重复测量因子之内(固定因子)
  • 治疗=主观因素之间(固定因素)
  • Obs =测得(因变量)

更新 好,所以我去找统计学家,但他是SAS用户。他认为该模型应为:

治疗+天+受试者(治疗)+天*受试者(治疗)

显然,他的表示法与R语法不同,但是该模型应考虑以下因素:

  • 治疗(固定)
  • 日(固定)
  • 治疗*天互动
  • 受试者嵌套在治疗内(随机)
  • 当天与“治疗中的受试者”交叉(随机)

那么,这是使用正确的语法吗?

m4 <- lmer(Obs~Treatment*Day + (1+Treatment/Subject) + (1+Day*Treatment/Subject), mydata)

我特别担心当天与“治疗中的受试者”部分是否正确。是否有任何熟悉SAS的人,或者对他们了解模型中正在发生的事情有信心的人,能够评论我对R语法的可悲尝试是否匹配?

这是我以前建立模型和编写语法的尝试(在答案和评论中讨论):

m1 <- lmer(Obs ~ Treatment * Day + (1 | Subject), mydata)

我该如何处理对象嵌套在治疗中的事实?如何m1从不同:

m2 <- lmer(Obs ~ Treatment * Day + (Treatment|Subject), mydata)
m3 <- lmer(Obs ~ Treatment * Day + (Treatment:Subject), mydata)

m2m3等效(如果不是,为什么)?

另外,如果我想指定相关结构(例如correlation = corAR1),是否需要使用nlme而不是lme4 ?根据重复测量,对于对一个因素进行重复测量的重复测量分析,协方差结构(同一受试者的测量之间相关性的性质)很重要。

当我尝试进行重复测量方差分析时,我决定使用II型SS。这仍然有意义吗?如果是的话,我该如何指定呢?

这是数据的示例:

mydata <- data.frame(
  Subject  = c(13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 
               34, 35, 36, 37, 38, 39, 40, 62, 63, 64, 65, 13, 14, 15, 16, 17, 18, 
               19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
               40, 62, 63, 64, 65, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
               29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 62, 63, 64, 65), 
  Day       = c(rep(c("Day1", "Day3", "Day6"), each=28)), 
  Treatment = c(rep(c("B", "A", "C", "B", "C", "A", "A", "B", "A", "C", "B", "C", 
                      "A", "A", "B", "A", "C", "B", "C", "A", "A"), each = 4)), 
  Obs       = c(6.472687, 7.017110, 6.200715, 6.613928, 6.829968, 7.387583, 7.367293, 
                8.018853, 7.527408, 6.746739, 7.296910, 6.983360, 6.816621, 6.571689, 
                5.911261, 6.954988, 7.624122, 7.669865, 7.676225, 7.263593, 7.704737, 
                7.328716, 7.295610, 5.964180, 6.880814, 6.926342, 6.926342, 7.562293, 
                6.677607, 7.023526, 6.441864, 7.020875, 7.478931, 7.495336, 7.427709, 
                7.633020, 7.382091, 7.359731, 7.285889, 7.496863, 6.632403, 6.171196, 
                6.306012, 7.253833, 7.594852, 6.915225, 7.220147, 7.298227, 7.573612, 
                7.366550, 7.560513, 7.289078, 7.287802, 7.155336, 7.394452, 7.465383, 
                6.976048, 7.222966, 6.584153, 7.013223, 7.569905, 7.459185, 7.504068, 
                7.801867, 7.598728, 7.475841, 7.511873, 7.518384, 6.618589, 5.854754, 
                6.125749, 6.962720, 7.540600, 7.379861, 7.344189, 7.362815, 7.805802, 
                7.764172, 7.789844, 7.616437, NA, NA, NA, NA))

Answers:


18

我认为您的方法是正确的。模型m1为每个主题指定一个单独的截距。模型m2为每个主题添加了单独的斜率。由于受试者仅参加一个治疗组,因此您的斜率跨天。如果您m2按以下方式编写模型,则很明显,您为每个主题分别建模了一个截距和斜率

m2 <- lmer(Obs ~ Treatment * Day + (1+Day|Subject), mydata)

这等效于:

m2 <- lmer(Obs ~ Treatment + Day + Treatment:Day + (1+Day|Subject), mydata)

即治疗的主要效果,天数和两者之间的相互作用。

我认为您不必担心嵌套,只要您不重复治疗组中的受试者ID。哪种模型是正确的,实际上取决于您的研究问题。除了治疗效果外,是否有理由相信受试者的斜率会有所不同?您可以同时运行这两个模型,并与之进行比较,anova(m1,m2)以查看数据是否支持其中任何一个。

我不确定您要用模型表达m3什么?嵌套语法使用/,例如(1|group/subgroup)

我认为您不必担心这么少的时间点的自相关。


这是不正确的。处理是2级变量,不能嵌套在Subject中。
Patrick Coulombe

关于自相关和时间点的数量:在此示例数据中,我仅显示了三个,但是我的真实数据包含在8个不同日期的观察值,因此我认为这可能是一个问题。有什么想法可以放入吗?
磷相关的

1
另外,我现在对嵌套感到很困惑。(1 + Treatment | Subject)与(1 + Treatment / Subject)不同吗?什么是“ |” 是简单的英语吗?我不理解所读的解释。
磷相关的

你好 这里的“每个主题的坡度不同”是什么?因为主语是因子变量,而不是连续变量。
skan

12

对于您的自动相关错误问题,我还不太满意,也无法评论(也不涉及lme4与nlme中的不同实现),但是我可以与其他人谈谈。

您的模型m1是一个随机拦截模型,其中包括了治疗和日之间的跨层次交互(允许日的影响在治疗组之间有所不同)。为了允许随时间变化的参与者之间存在差异(即明确地模拟随时间变化的个体差异),还需要允许Day的影响是随机的。为此,您需要指定:

m2 <- lmer(Obs ~ Day + Treatment + Day:Treatment + (Day | Subject), mydata)

在此模型中:

  • 如果在Day = 0时治疗参考类别的预测分数得到拦截
  • Day的系数是治疗参考类别中每增加1单位的天数随时间的预测变化
  • 治疗组的两个伪代码的系数(由R自动创建)是在Day = 0时每个剩余治疗组与参考类别之间的预测差
  • 两个交互项的系数是参考类别和其余治疗组之间的时间(天)对预测分数的影响之差。

截距和Day对分数的影响都是随机的(允许每个对象在Day = 0时具有不同的预测分数,并且随时间变化线性变化)。截距和斜率之间的协方差也正在建模中(允许它们曲折)。

如您所见,两个虚拟变量的系数的解释以Day = 0为条件。他们会告诉您参考类别在第0天的预测分数是否与其余两个治疗组明显不同。因此,决定将Day变量居中的位置很重要。如果您以第1天为中心,则系数会告诉您第1天参考类别的预测分数是否与其余两个组的预测分数显着不同。这样,您可以查看组之间是否存在预先存在的差异。如果您在第3天居中,则系数会告诉您在第3天参考类别的预测分数是否与其余两个组的预测分数明显不同。这样,您可以查看干预结束时各组之间是否存在差异

最后,请注意,主题没有嵌套在“治疗”中。您的三种治疗方法不是您想要将结果进行概括的总体水平中的随机水平-就像您提到的那样,您的水平是固定的,并且您只想将结果概括为这些水平。(更不用说,如果您只有3个上级单元,则不应使用多级建模;请参阅Maas&Hox,2005年。)相反,处理是2级预测变量,即在Days中采用单个值的预测变量。 (一级单元)。因此,它仅作为模型中的预测变量。

参考:
Maas,CJM,&Hox,JJ(2005)。足够的样本量用于多层次建模。方法:《欧洲行为与社会科学研究方法杂志》,第1期,第86-92页。


1
用lmer不能估计,因为obs的数量<=随机效应和残留方差的数量可能无法确定。
曙光2015年

答案中的公式结构正确。为了覆盖@Shuguang提到的错误,您需要添加...,control=lmerControl(check.nobs.vs.nRE="ignore")。请参阅此链接以获取Ben Bolker的进一步解释。
NiuBiBang 2015年

很好的解释。您能否再解释一下为什么“受试者不嵌套在治疗中”以及为什么您不创建+(治疗|受试者)错误术语以及为什么不只是(1 |受试者)甚至(1 | Treatment * Day),所以请多解释一下)?
skan

从技术上讲,您可以将对象嵌套在治疗中,但是,如果预测变量是相同的,则无论您进行多少次实验,都应该是固定的(而不是随机的)效果。每次您进行实验时都会不同的因素,例如受试者的个体特征-例如其起始值或其对治疗随时间变化的特质反应-是随机效应。(1 + Day|Subject)表示随机斜率模型,该模型允许每个受试者的初始值(截距)和结果的变化率不同。
llewmills
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.