作者丨Lily
来源丨医数思维云课堂(ID:Datamedi)
在医学临床实验研究中,我们经常会收集到患者的多次重复测量纵向随访数据,即每一个患者都有多次观测值,这些观测值是在不同时间记录的,观测次数、时间和间隔都不一定一样,且多次观测值都具有潜在相关性,往往在做分析时是我们更需要关注的。
那么问题来了,面对不同于我们经常收集到的横断面数据,该如何处理分析这些纵向数据呢?别急,听小编慢慢道来。
针对纵向随访数据,结合数据特点,应利用线性混合效应模型进行建模。该模型包含了固定效应以及随机效应,其中随机效应描述的是在不同层次的不同水平中,各变量对总体观察变量的贡献。
那针对线性混合效应模型,如何建模分析呢?今天小编推荐R语言当中线性混合效应模型的两个包:
1、nlme包,这是相对成熟的R包,它除了可以分析分层的线性混合效应模型,也可以处理非线性模型。在优势方面,个人认为它可以处理相处复杂的线性和非线性模型,可以定义方差协方差结构,也可以在广义线性模型中定义连接函数。缺点呢,随机效应的定义过于呆板,并且当数据量很大时,速度很慢,也不能处理多元数据。
2、lme4包,相对于nlme包而言,它的运行速度快一点,对于固定效应、随机效应的结构也可以相对更复杂一点。但是不能处理协方差和相关系数结构。
接下来通过案例,让我们更好的理解这个模型:
例:牛奶蛋白质含量这个数据是纵向数据的一个典型的例子。曾经被Diggle,et.al.(2013)等研究过,这个数据关于79头澳大利亚的奶牛牛奶蛋白质含量和三种饲料的关系,对每一头奶牛计划观测19次,每周一次,但是结果得到,有些奶牛观测了19周,有些不到19周,还有最少的观察了12次。
变量名称变量解释
id牛的编号
week第几周
protein蛋白质含量
diet饲料种类:1.barley;2.lunpins;3.mixed
01 数据的基本描述
library(lattice)
data_milk<-read.csv("milk.csv")
head(data)
xyplot(protein ~ week | diet, data = data_milk,
type = c("b", "smooth"), lwd = 2,
as.table = TRUE, ylab = "protein",
xlab = "Time (weeks)")
02 建立线性混合效应模型
1、nlme包
library(nlme)
model1<-lme(protein~week+diet,random=~week|id,data_milk,method="ML")
summary(model1)
结果如下:
接下来我们可以用F检验来看各个变量的显著性:
anova(model1)
结果如下:
通过上述结果来看,两个变量都显著,但week的系数是负数,这是由于总体上,一开始试验时牛奶的蛋白质含量大多相对较高,后面有几周下降,然后有回升,所以总体来说似乎随时间是下降的。
2、lme4包,但是推荐使用lmerTest包,它的结果可以输出P值,即显著性结果值。
library(lme4)
library(lmerTest)
model2<-lmer(protein~week+diet+(week|id),data_milk)
summary(model2)
结果如下:
通过上述两个包建立的模型可以看出,得到的结果几乎一样,但是lmer()函数针对变量较多时建立模型较好,运行速度较快。同时也可以看得出,我们的响应变量是定量变量,因此,我们选择建立线性混合效应模型,但若是我们的响应变量是分类变量,那方法就不一样咯。
怎么样?是不是挺简单的,希望大家多多练习。如果你有关于回归分析方面的问题,可以及时联系小编,小编一定不遗余力哟,期待我们的再次相约。