Multilevel Modeling Using R 第三章
从这一章开始我们就来介绍下用R处理双层次的模型
R包
首先介绍一下在多层次模型中,可以用R包nlme的nlme()函数来实现建模,或者R包lme4的lmer()函数,接下来,我们就看一下这两个函数的用法:
lme(fixed, data, random, correlation, weights, subset, method, na.action, control, contrasts = NULL, keep.data = TRUE)
lmer(formula, data, family = NULL, REML = TRUE, control = list(), start = NULL, verbose = FALSE, doFit = TRUE, subset, weights, na.action, offset, contrasts = NULL, model = TRUE, x = TRUE,...)
下面我们就来看一下怎么具体使用这些函数
nlme包
1. 简单多层次模型
回顾下第二章的固定效应和随机效应
比如这个模型,β0j代表截距,属于随机效应,那么β0j即为随机截距,因为每一个类的截距都不一样;β1j代表斜率,也属于随机效应,不过是β1j = γ10(每个类斜率的均值),所以β1j是固定的
其中Var(εij) = σ^2组内方差;Var(U0j) = τ^2 组间方差
此例子的固定效应是主要研究阅读分数x与词汇分数y的线性关系;而随机效应则是对Level1的线性回归系数的影响
我们以第二章的例子,以学校聚类,阅读分数与词汇分数的相关性的例子为例
Model3.0 <- lme( fixed = geread~1, random = ~1|school, data = Achieve)
其中fixed代表固定效应,random代表随机效应。
Model3.0我们可以看到结果,固定效应中仅有阅读分数,没有其他关系
而随机效应也仅有以学校作为分类的数据,无其他关系(这里的其他是指影响因素)
这是计算的结果,可以看到固定效应和随机效应的参数
就此,我们可以计算下ρΙ :
其中该例子的随机效应是不同的学校,即以学校作为分类
此时的τ^2 = 0.6257199(类间方差), σ^2 = 2.24611(残差,类内方差)
如果我们把模型改写一下:
Model3.1 <- lme( fixed = geread~gevocab , random = ~1|school, data = Achieve)
Model3.1
此时我们可以观察到固定效应的结果,形成了一元线性关系,而随机效应仍然还是和Model3.0一样,无其他关系
我们介绍下R2如何计算,因为这个模型是嵌套模型,所以R2应该分层次计算,首先对于Level1:
Model3.1 Level1 R^2
其中σ(M1)^2 = 1.940760,τ(M1)^2 = 0.3167654 这里的M1代表Model3.1中随机效应的σ2和τ2;σ(M0)^2 = 2.24611,τ(M0)^2 = 0.6257119 这里的M0代表Model3.0中随机效应的σ2和τ2
那么这里的Model3.0即为我们的null model ,Level1的R^2表示为大约Model3.1较Model3.0来说有21%的差异
对于Level2来说:
式子里面的B是10320/160 = 64.5,其中10320为总的观测值,160为分组的数目
其中σ(M1)^2 = 1.940760,τ(M1)^2 = 0.3167654 这里的M1代表Model3.1中随机效应的σ2和τ2;σ(M0)^2 = 2.24611,τ(M0)^2 = 0.6257119 这里的M0代表Model3.0中随机效应的σ2和τ2
Level2的R^2表示为大约Model3.1较Model3.0来说有48%的差异
下面我们来看下一个模型:
Model3.2 <- lme( fixed = geread~gevocab + senroll, random = ~1|school, data = Achieve)
Model3.2
此时的固定效应为二元线性关系,而随机效应还是像Model3.0和3.1
再来看
Model3.3 <- lme( fixed = geread~gevocab, random = ~gevocab|school, data = Achieve)
Model3.3
固定效应为一元线性关系,而随机效应有了交互作用即gevocab|school的交互项,因为有了交互,所以τ^2 = 0.5316640,σ^2 = 1.9146629
再来看随机效应为双因素影响的
Model3.4 <- lme(fixed = geread~gevocab + age, random = ~gevocab + age|school, data = Achieve)
Model3.4
固定效应为二元线性关系;而随机效应有两个因素,其中age|school 的随机方差系数为0.006388612,gevocab的随机方差系数为0.137974552,所以对于随机效应,gevocab(词汇成绩)的影响更大,准确说是对Level1的线性回归系数的影响更大一些
交互项
接下来我们考虑下固定效应模型中含有交互项的情况
Model3.5 <- lme(fixed = geread~gevocab + age + gevocab*age, random = ~1|school, data = Achieve)
Model3.6 <- lme( fixed = geread~gevocab + senroll + gevocab*senroll, random = ~1|school, data = Achieve)
Model3.5
这个模型的固定效应中加入了交互项gevocab:age,其系数为0.005027;随机效应与Model3.0和Model3.1相同
其中gevocab的系数p_value = 0.8814 > 0.5,统计学不显著
Model3.5 correlation
这一块衡量的是固定效应中各项的相关性
Model3.6此例中交互项gevocab:senroll的系数为-0.0001356
Model3.6 correlation
固定效应中各项的相关性
中心化
如果我们对Model3.5的数据进行中心化
#中心化
Cgevocab <- Achieve$gevocab – mean(Achieve$gevocab)
Cage <- Achieve$age – mean(Achieve$age)
#建模
Model3.5.C <- lme( fixed = geread~Cgevocab + Cage + Cgevocab*Cage, random = ~1|school, data = Achieve)
Model3.5 centering
中心化以后各项系数也会随之改变,并且各个系数显著性更加显著了,其中gevocab(Cgevocab的系数是显著的
lme4
接下来我们介绍一下lme4这个包的用法,其实结果与lme()是相同的
Model3.7 <- lmer(geread~gevocab +(1|school), data = Achieve)
这里的固定效应和随机效应写在一个式子里,随机效应项打括号写(1/school)
Model3.7
其实结果解读与lme()相似,这里就不再赘述,其中τ^2 = 0.31588(类间方差), σ^2 = 1.94074(残差,类内方差),不同软件算法有区别故值不同
添加MCMC元素去计算p_value和置信区间
library(coda) library(languageR) Mo del3.7.pvals<-pvals.fnc(Model3.7, nsim = 10000, withMCMC = TRUE)
固定效应:
Model3.7 fix
随机效应:
Model3.7 random
lower是下区间,upper为上区间,pMCMC为MCMC计算的p_value
类似的,我们再看一下多因素的随机效应表示:
Model3.10 <- lmer( geread~gevocab + age+(gevocab + age|school), Achieve)
Model3.11 <- lmer( geread~gevocab + age+ (gevocab|school) + age|school), Achieve)
Model3.10
Model3.11 上
Model3.11 下
总的来说,对于随机效应项lmer()比起lmer()多了随机截距的方差,随机斜率的变化性和随机截距与随机斜率的相关性(corr那一项)
参数估计
1.极大似然法
比方说对Model3.1的参数估计
Model3.12 <- lme( fixed = geread~gevocab, random = ~1|school, data = Achieve, method = "ML")
#REML = FALSE 即为ML
Model3.13 <- lmer( geread~gevocab + (1|school), data = Achieve, REML = FALSE
其中REML为 restricted maximum likelihood
2.控制估计
在参数估计的函数里面加参数
Model3.14 <- lme( fixed = geread~gevocab, random = ~1|school, data = Achieve, method = "ML", control = list(maxIter = 100, opt = "optim"))
Model3.15 <- lmer( geread~gevocab + (1|school), data = Achieve, REML = FALSE, control = list(maxIter = 100, opt = "optim"))
我们知道,大部分求解过程都是没有解析解的,只有数值解,所以常常用迭代的方法求解
其中 control = list(maxIter = 100, opt = "optim") 代表在求解参数最大的迭代次数为100
3.利用Chi squared test比较模型的拟合程度
我们知道,不同的方程,模型其对数据的拟合程度是不同的,那么我们可以利用检验方法选择最优的模型
其中可以利用AIC,BIC判断共线性
比较两个模型哪一个更优我们可以用anova()
Model3.1 <- lme( fixed = geread~gevocab, random = ~1|school, data = Achieve, method = "ML")
Model3.2 <- lme( fixed = geread~gevocab + senroll, random = ~1|school, data = Achieve, method = "ML")
anova(Model3.1, Model3.2)
结果
4.参数估计的置信区间
关于置信区间的内容我之前有推送介绍过
那么在模型中,我们可以利用函数intervals(),我们以Model3.3来做例子,这里求得是95%置信区间
#95%置信区间
intervals(Model3.3)
那么我们的固定效应和随机效应参数置信区间如下图所示:
Model3.3 intervals