政文观止 / 待分类 / 实用技术 | 分层模型的R使用精解

分享

   

实用技术 | 分层模型的R使用精解

2022-01-06  政文观止

最近看到一篇帖子(实则导师发现的),比较精细化地展示了不同设定下分层模型的R语言实现。考虑到现在使用分层模型的伙伴们越来越多,因此也通过这里将这个帖子引介给大家。(原帖链接见“阅读原文”) 由于微信推送小编推送公式难度较大(截图太难受了),所以我尽量用简洁的文字来表述相应的模型设定。想要通过数学公式来了解具体的模型可以参考原文链接哦。

引言(非原文内容)

分层线性模型是对线性回归模型的拓展(包括广义线性模型)分层模型可以通过对截距(intercept)和斜率(slope)的理解分为随机截距(random intercept)模型和随机斜率(random slope)模型。随机截距模型指的是不同组别之间的截距不一样,但是斜率是一样的,如下虚拟数据所呈现的。

而随机斜率模型可以理解为截距一样,但是斜率不一样(如下图一)。然而现实情况往往是,如果斜率不一样,那么截距通常也是不一样的(如下图二) 


图一




图二

这种情况下再使用线性回归模型就会产生问题(关于为什么要使用分层模型更精细的解释可以参考Gelman and Hill 2007)。本文将展示各种分层模型设定的R代码,使用lme4 package来实现模型拟合。

分层模型精解

仅有随机截距的两层模型

这个模型就是一个基础模型,设定了随机截距,没有其他变量。其中level_2是第二层组别变量:

lmer(y ~ 1 + (1 | level_2), data = data)

包含第一层变量随机斜率的两层模型

如果认为第一层(比如学生个体)的解释变量var在第二层(比如学校)组别中对结果变量的影响不同,那么就可以设定这个变量的随机效应。此时,模型中的1(代表截距)可以省略:

lmer(y ~ var + (var | level_2), data = data)

存在调节变量的模型

有时候理论认为解释变量对结果变量的作用受到调节变量mod的影响,这种调节效应在不同组别都一样,那么这时候可以加入交互项:

lmer(y ~ var*mod + (var | level_2), data = data)

解释变量和截距项的调整

如果认为仅有解释变量存在随机效应,而截距项没有随机效应,那么模型设定如下:

lmer(y ~ var + (var + 0 | level_2), data = data)

反之,如果认为仅有截距项存在随机效应,而解释变量没有随机效应,那么模型设定如下:

lmer(y ~ var + (1 | level_2), data = data)

此外,如果认为解释变量和截距项都有随机效应,且二者不相关,那么模型设定有两种方式:

lmer(y ~ var + (var || level_2), data = data) lmer(y ~ var + (1 | level_2) + (var + 0 | level_2), data = data)

仅有随机截距的三层模型

如果数据结构更为复杂,例如学生隶属于不同学校,学校坐立于不同城市,那么这时候就需要更高层次的组别进行嵌套:

lmer(y ~ 1 + (1 | level_2/level_3), data = data)lmer(y ~ 1 + (1 | level_3:level_2) + (1 | level_3), data = data)

第一层级解释变量的随机效应模型

如果认为最底层的解释变量在第二层和第三层的不同组别中对结果变量的隐形大小不同,类似于两层模型的随机效应设定:

lmer(y ~ var + (var | level_2/level_3), data = data)lmer(y ~ var + (var | level_3:level_2) + (var | level_3), data = data)

第二层级解释变量的随机效应模型

由于第二层级的解释变量Var不可能在第二层存在随机效应,随机效应仅存在于第三层,那么模型设定就需要进行拆分:

lmer(y ~ Var + (1 | level_3:level_2) + (Var | level_3), data = data)

跨层交互效应在三层的随机效应

有时候模型会设定跨层交互效应,如果这种跨层交互效应在第三层的不同组别也是不同的,模型设定如下:

lmer(y ~ var*Mod + (var | level_3:level_2) + (var*Mod | level_3), data = data)

其他可能存在但是不常见的情况

以上模型拟合都是假定不同组别的方差是相等的,如果方差不相等,那lmer()函数可能就无法拟合,需要使用lme()进行拟合。此外,还有部分模型涉及到时间上的自相关、时间上的断点以及二次项的非线性关系拟合等问题,帖子上只做了简介。在这里也只是方便大家快速的查阅使用啦。 

撰文:刘天祥  审读:吴温泉  编辑:康张城

在看政观么

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多