基线对混合模型中随时间变化的影响?

机器算法验证 时间序列 混合模式 重复测量 随机效应模型 变化分数
2022-03-19 19:36:53

我想知道是否以及如何在某些样本中使用混合模型对结果随时间的变化进行建模,这取决于该结果的基线值?

例如,想象一下对同一组人进行 5 次相同知识测试的情况。由于问题总是相同的,学生将随着时间的推移学习正确的答案,并且每次考试的得分都会更高。然而,在那些最初得分高的人中,与最初得分低的人相比,变化会更少。因此,很明显,变化率取决于基线值。

我知道在混合模型中,除了随机截距外,我还可以包含时间的随机斜率,以解释这样一个事实,即某些学生的变化会比其他学生多。但是,我是否正确假设将第一次测量的值作为基线协变量(及其与时间的相互作用)是不可能或有意义的?无论如何,它对我来说都不“感觉”。但另一方面,令我惊讶的是,不可能使用固定效果显式地模拟基线值的效果。我必须承认我对此有些困惑。任何帮助将不胜感激。

1个回答

这似乎是一种增长模式情景。假设我们有以下变量:

  • occasion:取值1, 2, 3, 4,5以反映进行测试的场合,1是第一个或基线。
  • ID:每个参与者的标识符。
  • score:该参与者在此测试场合的测试分数。

随机截取ID将处理不同的基线(取决于有足够的参与者。

因此,这些数据的简单线性混合效应模型是(使用lme4语法):

score ~ occasion + (1|ID)

或者

score ~ occasion + (occasion|ID)

后者允许场合的线性斜率在参与者之间变化

但是,对于 OP 中的特定示例,我们还有一个额外的问题,即该score变量受测试最高分数的限制。为此,我们需要迎合非线性增长。这可以通过多种方式实现,最简单的是将二次项和可能的三次项添加到模型中:

score ~ occasion + I(occasion^2) + I(occasion^3) + (1|ID)

让我们看一个玩具示例:

require(lme4)
require(ggplot2)

dt2 <- structure(list(occasion = c(0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4), score = c(55.5, 74.5, 92.5, 97.5, 98.5, 54.5, 81.5, 94.5, 97.5, 98.5, 47.5, 68.5, 86.5, 96.5, 98.5, 56.5, 86.5, 91.5, 97.5, 98.5, 60.5, 84.5, 95.5, 97.5, 99.5, 73.5, 87.5, 96.5, 98.5, 99.5), ID = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("1", "2", "3", "4", "5", "6"), class = "factor")), .Names = c("occasion", "score", "ID"), row.names = c(25L, 26L, 27L, 28L, 29L, 31L, 32L, 33L, 34L, 35L, 37L, 38L, 39L, 40L, 41L, 43L, 44L, 45L, 46L, 47L, 49L, 50L, 51L, 52L, 53L, 55L, 56L, 57L, 58L, 59L), class = "data.frame")

m1 <- lmer(score~occasion+(1|ID),data=dt2)

fun1 <- function(x) fixef(m1)[1] + fixef(m1)[2]*x

ggplot(dt2,aes(x=occasion,y=score, color=ID)) + geom_line(size=0.65) + geom_point() +
 stat_function(fun=fun1, geom="line", size=1, colour="black")

在此处输入图像描述

在这里,我们绘制了 6 名参与者连续 5 次测量的图,并且我们用黑色实线绘制了固定效应。显然,对于这些数据来说,这不是一个好的模型,因此我们在将数据居中以减少共线性之后,引入一个二次项,然后是一个三次项:

dt2$occasion <- dt2$occasion - mean(dt2$occasion)

m2 <- lmer(score~occasion + I(occasion^2) + (1|ID),data=dt2)
fun2 <- function(x) fixef(m2)[1] + fixef(m2)[2]*x + fixef(m2)[3]*(x^2)

m3 <- lmer(score~occasion + I(occasion^2) + I(occasion^3) + (1|ID),data=dt2)
fun3 <- function(x) fixef(m3)[1] + fixef(m3)[2]*x + fixef(m3)[3]*(x^2) + fixef(m3)[4]*(x^3)


p2 <- ggplot(dt2,aes(x=occasion,y=score, color=ID)) + geom_line(size=0.5) + geom_point()

p2 + stat_function(fun=fun2, geom="line", size=1, colour="black")

在此处输入图像描述

在这里,我们看到二次模型比仅线性模型有明显的改进,但并不理想,因为它低估了最终测量的分数,而高估了前一个测量的分数。

另一方面,立方模型似乎工作得很好:

p2 + stat_function(fun=fun3, geom="line", size=1, colour="black")

在此处输入图像描述

稍微复杂一点的方法是明确识别上限,并使用(例如)逻辑增长曲线模型。实现此目的的一种方法是将结果转换为(上限的)比例,例如π然后对这个比例的logit建模,π/(1π)作为线性混合效应模型的结果。除了识别上限之外,这还具有在未转换数据的残差中建模异方差性的额外优势,因为在连续测试中(假设结果变得更好)似乎可能会有更少的方差。

正如预期的那样,将其付诸实践,这也很好地模拟了数据的整体趋势:

pi <- dt2$score/100
dt2$logitpi <- log(pi/(1-pi))

m0 <- lmer(logitpi~occasion+(1|ID),data=dt2)
funlogis <- function(x) 100*exp(fixef(m0)[1] + fixef(m0)[2]*x)/(1+exp(fixef(m0)[1] + fixef(m0)[2]*x))
p2 + stat_function(fun=funlogis, geom="line", size=0.5, colour="black")

在此处输入图像描述

下面显示了三次模式和逻辑增长模型一起绘制的图,我们看到它们之间的差异很小,尽管如上所述,由于异方差问题,我们可能更喜欢逻辑增长模型:

p2 +  stat_function(fun=fun3, geom="line", size=1, colour="black")  +
stat_function(fun=funlogis, geom="line", size=1, colour="blue")

一个

更复杂的方法仍然是使用非线性混合效应模型,其中逻辑增长曲线被明确建模,允许逻辑函数本身的参数随机变化。