lme4中纵向模型的正确规范

机器算法验证 r 多层次分析 面板数据
2022-03-26 06:25:53

我正在尝试拟合多级纵向模型,但我对如何指定它有疑问。

数据包括在四个时间点从大约 3k 个人收集的大约 8k 观察结果。个体嵌套在组中,大约有 200 个组。我有两种不同类型的固定效应:(a)观察级别的重复测量(例如 pred1.obs ),以及(b)也随时间变化的组级别预测变量(例如 pred2.grp)。因为每个组级别的固定效应也是纵向的,所以有 800 个值(当时为组中的每个成员重复 4x200)但只有 200 个组。

我的问题是这个模型的正确规格是什么,为什么?例如:

1: lmer(结果 ~ 时间 + pred1.obs + pred2.grp + (time|id) + (time|grp))

2:lmer(结果〜时间+ pred1.obs + pred2.grp +(时间|id)+(1|grp:时间))

3:lmer(结果〜时间+ pred1.obs + pred2.grp +(时间|id)+(时间|grp)+(1|grp:时间))

因此,如果我使用 (time|grp) 或我需要使用 (1|grp:time) 或组合, lme4 会正确估计模型吗?

还是我没有想到的其他东西?

非常感谢,乔治

2个回答

我会想象一个具体的例子,有更多的背景,让事情变得简单。假设您测量了 200 所学校的 3k 名学生的考试成绩,并且您在 4 个时间点(例如,每个季度)测量了每个学生。你有一个学生级别的协变量,它不随时间变化(如性别),你称之为 pred1.obs 和一个随时间变化的学校协变量(比如直到那个时刻老师和家长之间的会议次数) . 如果这个例子类似于你的研究,那么我认为你必须建立一个三级模型(个人水平、小组水平和小组的时间水平): i = 1 ... 3000 个人 t = 1... 4 个周期 g = 1... 200 组

该模型将是:

y_i ~ N(a + b_[groups_g] + b.ind*pred.obs1_i, sigma^2) # 1st level
b_g = N(gamma + gamma_[time] + gamma.g[time_t]*pred2.grp, sigma.b^2) # 2nd level
gamma.g_t = N(0, sigma.gamma^2) # 3rd level

请注意,第二级(组级)的斜率会随时间变化,这是有道理的,因为您预计学校对学生表现的影响可能会随时间变化,具体取决于协变量的值学校的水平。我不太确定如何用 lmer 估计这个(我知道如何使用 WinBugs 或 Jags 估计贝叶斯模型,用 R 调用它们)。无论如何,这是我的建议。

在 lme4 中,我会尝试:首先,将 pred2.grp(随时间变化的组级别的协变量)扩展到个人级别,然后您将在组和时间级别上由个人重复测量。然后:

lmer(outcome ~ pred1.obs + pred2.grp + (1|group))

您有大量组,因此我推测(取决于设置)您可能将组视为随机效应,因此您的(…|grp)条款可能是合理的。将随机效应与个体((…|id)术语)联系起来也可能是合理的。但是,您time在所有模型中都有协变量,因此我假设您正在寻找线性时间效应。同时,模型中包含(1|grp:time))项或任何类型的(…|time))项使时间协变量的解释变得困难。

这些(1|…)术语对应于随机截距,例如,包括(1|grp)将估计每个组在时间=0 时的“平均”结果,表示为与大截距的偏差;(1|id)将估计一个单独的截距。

这些(time|…)项对应于时间协变量的随机斜率,例如包括(time|grp)将估计每组与大斜率的偏差;(time|id)将估计个别斜率。(time|id)[编辑:请注意和(0 + time|id)表达式之间的区别,请参阅?lmer]

在您的模型规格中,您同时使用随机截距和随机斜率。你需要它们还是你需要它们取决于你研究的变量之间的关系。如果你知道关系,你应该指定相应的模型。或者,您可以拟合多个模型并解释结果之间的差异。