这一章我们就要介绍横断数据的多层次模型了
Multilevel Longitudinal Framework
我们前面的章节介绍了什么是线性的多层次模型,这次我们介绍下横断数据的多层次分析
横断数据的多层次模型的结构如上
其中,Yit为响应变量,Xit为受时间影响的决策变量(其中i为第i个变量,t为时间);πit为Level1的回归系数,βit为Level2的回归系数; εit 是Level1的误差, rit 为Level2的随机效应
我们可以看到横断数据最显著的特点是会受时间的影响(t代表不同的时间点)
我们发现这里有两个决策变量,一个是时间点,另一个是每个时间点内的决策变量;举个例子,我们提供了12个月这12个时间点,另一个决策变量是学生在花在学习上的时间,响应变量为学生考试成绩
那么我们可以看到每个月,学生在学习上花的时间与学生考试成绩的关系
Person Period Data Structure
我们的第一步就是要确认一下是都为多层次的横断数据结构
我们以一个例子来说明:
1.我们的响应变量是语言成绩
- 有4个评分标准(写作特征[featurn],写作的应用性[application],语法[grammar]和结构[mechanics])
3.语言成绩可以区分每个学生和学校的水平
我们通常利用stack()函数来进行操作
#Lang是个集合包括所有的data
#将这几个因素重新组合成数据框
#
LangPP <- data.frame(ID = Lang$ID,
school = Lang$school,
Process = Lang$Process,
Application = Lang$Application,
Grammar = Lang$Grammar,
Mechanics = Lang$Mechanics,
stack(Lang, select = LangScore1:LangScore6))
#重新命名
names(LangPP)[c(7)] <- c("Language")
#利用recode()函数
LangPP$Time <- recode(LangPP$ind, '"Lang Score1" = 0; "LangScore2" = 1; "LangScore3" = 2; "LangScore4" = 3; "LangScore5" = 4; "LangScore6" = 5;', as.factor.result = FALSE)
其中recode()函数的作用是将LangScore1,LangScore2,LangScore3,LangScore4,LangScore5,LangScore6建立一个专用的时间变量的index
nlme与lme4
那么我们接下来看一下怎么用这两个包分析:
Mode l_5.1 <- lme(fixed = Language~Time, random = ~1|ID, data = LangPP)
通过这个命令我们知道固定效应是语言成绩和时间点的关系,随机效应是不同的学生带来的影响
结果不再过多赘述
下面我们看下lmer()怎么操作
Model_5.2 <- lmer(Language~Time +(1|ID), LangPP)
#计算pMCMC
Model5.2.pvals<-pvals.fnc(Model_5.2, nsim = 10000, withMCMC = TRUE) Model5.2.pvals$fixed
再看看固定效应多元情况:
Model _5.3 <- lme(fixed = Language~Time + Grammar,
random = ~1|ID, data = LangPP)
lmer()也是一样的
Model_5.4 <- lmer(Language~Time + Grammar +(1|ID), LangPP)
#计算pMCMC
Model5.4.pvals<-pvals.fnc(Model_5.4, nsim = 10000, withMCMC = TRUE) Model5.4.pvals$fixed
接下来是随机效应有交互的:
Mode l_5.5 <- lme(fixed = Language~Time + Grammar,
random = ~Time|ID, data = LangPP)
lmer():
Model_5.6 <- lmer(Language~Time + Grammar +(Time|ID), LangPP)
还有就是多层次的随机效应:
Mode l_5.7 <- lme(fixed = Language~Time, random = ~1|school/ID, data = LangPP)
Changing Covariance Structures of Longitudinal Models
这块不清楚的可以自学下时间序列分析
一般来说,在做此类分析的时候,R一般都默认随机效应的每一个噪声是相等的
那么我们在分析过程中想了解相邻两个时间点语言分数的相关性怎么办?
在时间序列有AR模型,CAR和ARMA模型可以解决我们的问题
这样做的目的是对横断数据进行有效的时间序列分析,即通过不同的时间序列模型(AR,ARMA等模型)计算时间序列的自相关系数
Mode l_5.8 <- lme(fixed = Language~Time, random = ~1|ID,
correlation = corAR1(), data = LangPP)
我们可以通过上述语句,来计算相邻两个时间点语言分数的自相关系数
一样的,我们也可以求该自相关系数的置信区间
intervals(Model_5.8)
那么我们可以看到相邻两个时间点语言分数的自相关系数(Phi)为0.188,95%置信区间为0.165—0.212,说明相邻两个时间点语言分数相关性较高;什么意思呢?即第一个时间点的语言分数高,可以带动下一个时间点的语言成绩也会高
我们换一个时间序列模型看看:
Mode l_5.9 <- lme(fixed = Language~Time, random = ~Time|ID, correlation = corAR1(form = ~Time|ID), data = LangPP)
#置信区间
intervals(Model_5.9)
至于结果参照上面,这里不再赘述