混合线性模型

对于线性模型我们很熟悉,比如研究一个人的音调(pitch)和年龄(age)的关系

pitch ~ age + e

其中的年龄就是一个固定效应(fixed effect),其中的e是误差项,表示由于我们无法控制的一些随机因素导致的实际值与预测值之间的偏差。我们也可以称之为模型中概率性或随机性部分。
再如,研究音调和礼貌程度的关系,我们可以用下面的线性模型来表示。

pitch ~ politeness + e

如果考虑到性别也可能会影响到音调,那么性别也可以作为固定效应加入到模型中。

pitch ~ politeness + sex + e

到目前为止,一切看起来都还很好理解。但是考虑到实验设计的问题,这就有点复杂了。针对每一个个体测定了在不同礼貌程度下的不同音调高低,也就是针对一个个体的各个观测数据之间并不是相互独立的,每个个体的因素也会对因变量产生影响。在这种情况下,我们就需要在模型中加入随机效应(random effect)了。这时,随机效应可以使我们为不同的个体加入不同的“基线值”,以平衡掉个体因素对实验结果的影响。比如,个体1的平均音调是233Hz,而个体2的平均音调可能会是210Hz。图示如下:

image.png

其中F1-F9是女性个体,M1-M7是男性个体。可以很明显的看出,男性个体的音调比女性个体的音调低很多。同时,我们也可以发现即便是在同一个性别内,个体之间的差异也很大。对于这种个体之间的差异,我们可以使用不同的随机截距项(random intercepts),即,每一个个体都有一个不同的截距值
所以,到这儿你或许会明白为什么混合效应模型中的“混合”二字的含义了。我们平时用的简单线性模型其实是一个仅仅包含了固定效应的模型,我们用误差项e来表示了其他一个不可控因素的影响。但是, 实际上,在误差项e中仍有一些因素是需要我们考虑的,正如上面的例子中,个体因素的影响。这时,我们可以把误差项e中的一部分拿出来,作为随机效应部分添加到模型中,也就形成了既包含“固定效应”,又包含“随机效应”的混合效应模型。

现在加入了个体因素之后,模型可以表示为:

pitch ~ politenes + sex + (1|subject) + e

其中(1|subject)是在R语言中表示随机效应常用的写法,意思为“假设每一个个体都有不同的截距”,其中“1”表示截距的意思,告诉你的模型,每一个个体有多个因变量响应值,这些响应值会受到个体基线水平(即截距)的影响。当然,在这个模型中,依然存在误差项e,这是难以避免的,我们无法把所有的随机因素都考虑在内,我们只是尽可能的在误差项中剥离出一些随机因素的影响。
下面,我们再加入一些因素,使模型变得更加复杂。为了测定音调高低,每个个体都进行了7个不同场景(item)的测定,比如“向老师寻求帮助”、“向同学寻求帮助”,“为自己的迟到辩解”等。这些不同的场景同样会影响到音调的高低。图示如下。

image.png

尽管这些场景的平均音调水平差异不如由于个体因素造成的差异大,但是它们之间还是有差异的,我们最好还是将它们考虑在我们的模型中,以随机效应加入模型,得到新的模型:

pitch ~ politeness + sex + (1|subject) + (1|item) + e

这样我们既解决了因个体差异对结果造成的影响,又解决了因场景差异对结果造成的影响。这就是混合效应模型带给我们的便利之处。既往在遇到这种情况时,我们在分析中通常会去平均值,比如把所有个体取一个平均值,当做整个模型的截距项,虽然这并不是什么错误,但是会丢失到很多信息。【在数据分析中,要慎用去平均值,一平均,就会丢失掉很多变异信息】。

image.png混合效应模型在R语言中的实现

使用R - “lme4”包,数据源如下:
http://www.bodowinter.com/tutorial/politeness_data.csv

 
 

library(lme4)
politeness=read.csv("http://www.bodowinter.com/tutorial/politeness_data.csv")
head(politeness)
#   subject gender scenario attitude frequency
# 1      F1      F        1      pol     213.3
# 2      F1      F        1      inf     204.5
# 3      F1      F        2      pol     285.1
# 4      F1      F        2      inf     259.7
# 5      F1      F        3      pol     203.9
# 6      F1      F        3      inf     286.9

其中subject表示个体因素;gender表示性别因素;scenario表示7种不同的测试场景;attitude表示礼貌程度(pol表示礼貌,inf表示不礼貌);frequency表示因变量音调的高低。

在分析数据之前,我们首先画一个箱式图来直观的感受一些各因素对因变量的影响。

boxplot(frequency ~ attitude*gender, col = c("white","lightgray"), data = politeness)

image.png


可以看出礼貌时候的音调比不礼貌的时候更低,男性普遍比女性的音调低。
拟合混合效应模型:

 
 

politeness.model <- lmer(frequency ~ attitude + (1|subject) + (1|scenario), data = politeness)
summary(politeness.model)

结果如下:

image.png

首先输出结果告诉你了你所使用的模型,然后是模型拟合效果,如AIC,对数似然估计等。然后就是随机效应的拟合结果:

Random effects:
 Groups   Name        Variance Std.Dev.
 scenario (Intercept)  219     14.80   
 subject  (Intercept) 4015     63.36   
 Residual              646     25.42

其中的第三列是随机因素对因变量变异的影响,第一个随机因素(scenario)对结果的影响比第二个随机因素(subject)随结果的影响小,结合我们上面的图,也很容易理解。最后一项Residual是误差项,即还有一部分因变量的变异是模型无法解释的。
接下来就是固定效应拟合的结果:

 Fixed effects:
            Estimate Std. Error t value
(Intercept)  202.588     26.754   7.572
attitudepol  -19.695      5.585  -3.527

其中,attitudepol是对分类变量politeness斜率的估计,即从不礼貌(inf)到礼貌(pol)音调降低了19.695Hz。
那么这儿的斜率202.588Hz表示什么意思?如果你回头看之前的箱式图,可以看出来202.588这个值基本上位于男性和女性不礼貌(inf)分组的中间,也就是说,它是不礼貌情况下的平均值(在上面的模型中,我们没有考虑性别因素,而是将男女作为一个整体来考虑的)。下面我们将性别因素加入。

 
 

politeness.model = lmer(frequency ~ attitude + gender + (1|subject) + (1|scenario), data = politeness)
summary(politeness.model)

结果如下:

image.png

在这个模型中,对随机效应而言,个体因素对因变量造成的影响显著降低,这主要是因为性别因素在个体因素中剥离了出来,使得个体因素的影响变小。
对于固定效应而言,礼貌程度造成的影响和之前的模型相比,基本没有变化;不过性别对因变量影响十分大,即男性比女性的音调低了108Hz。而这时的解决也变大了,它表示在女性中不礼貌时候的平均音调水平。

image.png模型比较和P值估计

不过很遗憾的是,上面的模型结果中,并没有给出各个变了的p值。这儿主要介绍一下通过似然估计来计算P值。似然比是比较两个模型,一个包含了你所感兴趣的研究因素,另一个则没有包括该因素,通过比较两个模型可以判断该因素在模型中扮演作用的大小。 比如,你想研究什么因素影响你行走的速度,首先扔掉随身携带的手电筒,发现行走速度前后变化不大;然后你又扔掉了随身携带的一桶水,发现行走速度明显变快,这样可以来说明一桶水能够显著影响到你的行走速度。

模型1:hiking speed ~ gallon of water + flashlight
模型2: hiking speed ~ flashlight

模型1时一个全模型,即纳入了所有研究的因素,第二个是简化模型,只包含了部分研究因素。通过两个模型的比较可以判断gallon of water在模型中的作用是否显著。

下面我们就结合之前的例子,来判断是礼貌程度在音调中的作用大小。我们先建立一个简化模型,剔除了礼貌程度,然后再建立一个包含了所有因素的全模型。

 
 

politeness.null = lmer(frequency ~  gender + (1|subject) + (1|scenario), data = politeness, REML = FALSE)
politeness.model = lmer(frequency ~ attitude + gender + (1|subject) + (1|scenario), data = politeness, REML = FALSE)
#比较两个模型
anova(politeness.null, politeness.model)

结果如下:

image.png

通过上面的结果,我们可以得到结论:
“礼貌程度影响了说话的音调高低(chisq = 11.62, p = 0.00065),礼貌时候的音调比不礼貌时候的音调低了19.7Hz(SE = 5.6)“
另一点我们需要注意的是,两个变量之间可能存在的交互作用。比如礼貌程度是否受到性别本身的影响呢?我们同样可以通过比较两个不同的模型来判断:

全模型: frequency ~ attitude * gender
简化模型: frequency ~ attitude + gender

在R语言中,“*”表示交互作用。如果两个模型比较的p值有统计学意义,那么就说明attitude和gender之间存在交互作用。

image.png随机截距和随机斜率

上面介绍了很多关于混合模型的概念,但是还没有完!下面才是混合模型最精彩的部分。
在上面的模型中,我们了解了随机效应不是固定的,我们可以通过下面的函数查看一下模型的系数。

coef(politeness.model)

结果如下

image.png

通过上面的可以看到,对于固定效应(attitude和gender),其系数都是固定的,但是对于随机效应(scenario和subject)截距项各不相同。所以这种模型也叫做“随机截距模型”。
但是仔细想想,对于固定效应,其斜率对于每一个个体都是相同的,这符合实际情况吗?会不会存在不同的个体其固定效应大小也不相同(即针对每个个体,固定效应的斜率也不同)?这个时候,就需要我们考虑“随机斜率模型”了。这种模型不仅运行每个测试对象有不同的截距,还可以有不同的斜率。

 
 

politeness.model = lmer(frequency ~ attitude + gender + (1 + attitude | subject) + (1 + attitude | scenario),
                       data = politeness, REML = FALSE)

其中,”(1+attitude|subject)”表示模型针对每一个体(subject)使用不同的截距(“1”)以及针对研究变量的不同斜率(“attitude”)。这个时候在查看一下模型系数:

image.png

可以看到,对于各个个体(subject)和各个场景(scenario),不仅是截距不同,礼貌程度(attitude)的系数也不相同。这表示,每个个体在从不礼貌到礼貌音调降低大小不同。同样的道理,我们还可以把性别(gender)加入到随机斜率模型中。同样,也使用anova对全模型和简化模型比较,得到变量的P值。

通常情况下,我们在混合模型中通常只会加入随机截距,也即”随机截距模型“,但是在实际中,比如在上面的例子中,使用”随机斜率模型“更加符合真实情况。很多通过计算机模拟的研究显示,如果不加入随机斜率,那么混合模型通常会非常激进,有很高的I型错误(假阳性)


最后,再来总结一下随机效应和固定效应。随机效应是一些对实验产生非系统性的、个体性的、不可预测性的因素;而固定效应是对实验产生系统性、预测性的影响的因素。还有一种关于随机效应和固定效应的定义,即这一因素是否是可穷尽的,比如我们上述例子中的性别,只有男女两种,已经被穷尽,所以是固定效应;而个体,是有很多个可能,上述实验只是其中的几个个体,并没有穷尽所有个体,所以是随机效应。

=====  THE END ====

资料来源:www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf

image.png


猜你喜欢

转载自blog.51cto.com/15069450/2577333