HLM很厉害,但其实就是纳入考虑了组间的变异,和mixed model是比较像的,所以导致网上的很多资料都将两者混为一谈。但我觉得还是HLM对分组的限制更显著,mixed model更像是线性和HLM之间的一种模型。
HLM有自己的一套软件和操作,安装包可见附件。
我是用R实现的,整个过程和mixed model的建立非常相近,主要是需要考虑组间的变异。
具体R代码可见:
setwd("C:/Users/jack/Desktop/mission/BMI_HLM")
library(readxl)
mydata <- as.data.frame(read_excel("mydata_new_RCS.xlsx"))
names(mydata)<-c('id','age_week','weight_gain','BMI_group','age1','age2','age3','age4')
#delete the outliers
mydata<-mydata[mydata$weight_gain<39,]#丢去8个异常值
#if need to create the dependant variable
for (i in 1:nrow(mydata)){
if (mydata[i,4]==1) {
mydata[i,'LOGWTGAINKG']<-log(mydata[i,3]+4.5)
} else if (mydata[i,4]==2) {
mydata[i,'LOGWTGAINKG']<-log(mydata[i,3]+5.9)
} else if (mydata[i,4]==3) {
mydata[i,'LOGWTGAINKG']<-log(mydata[i,3]+7)
}
}
#build up the model
library(lme4)
Model3.1 = lmer(weight_gain ~ age1+age2+age3+age4+ (1|id) +(1+age1|BMI_group)+(1+age2|BMI_group)+(1+age3|BMI_group)+(1+age4|BMI_group), data=mydata,REML=FALSE)
coef(Model3.1)
RCS_data <- unique(mydata[c(2,5,6,7,8)])
for (i in 1:nrow(RCS_data)){
RCS_data[i,'mean1'] <- -1.596829+ 0.3326625*RCS_data[i,2]+ 0.7824231*RCS_data[i,3] -2.950797*RCS_data[i,4]+ 5.523618*RCS_data[i,5]
RCS_data[i,'mean2'] <- -1.697974+ 0.3303238*RCS_data[i,2]+ 0.7823930*RCS_data[i,3] -3.063787*RCS_data[i,4]+ 5.523501*RCS_data[i,5]
RCS_data[i,'mean3'] <- -4.860473+ 0.2571978*RCS_data[i,2]+ 0.7824119*RCS_data[i,3] -2.943460*RCS_data[i,4]+ 5.523661*RCS_data[i,5]
}
#BMI 1
pl