这与正常变化系数模型相比有何优势,例如:
fit<-lmer(score~1+vector of class_attributes+vector of student attributes
+(1+vector of class attributes+vector of student attributes)
+(1+vector of student attributes|class)
+(1+vector of class attributes|student))
?
在这个例子中,有一个整体的截距和属性效应,但是每个类都有不同的可能系数,可以通过键入 ranef(fit) 来查看
贝茨关于 lme4 的书的第 3.2 节似乎与您的情况完全相似。
https://r-forge.r-project.org/scm/viewvc.php/*checkout*/www/lMMwR/lrgprt.pdf?revision=656&root=lme4&pathrev=656
更新(我更新了上面的代码行):
我还运行了这些行来尝试模拟您的情况,但没有任何学生属性
library(lme4)
n<-100 #class size
pool<-200 #student pool size
class=c(rep(1,n), rep(2,n), rep(3,n))
min_in_class=c(rep(45,n), rep(60,n), rep(90,n))
min_hw=c(rep(90,n), rep(60,n), rep(60,n))
student_id=c(sample(1:pool,n), sample(1:pool,n), sample(1:pool,n))
performance=55+10*class +.1*min_in_class +.2*min_hw+ -.001*min_in_class*min_hw +rnorm(3*n, 0,10)
df<-data.frame(class=as.factor(class), min_in_class, min_hw, student_id=as.factor(student_id), performance)
library(reshape2)
melted<-melt(df, id.vars=c('student_id', 'class'))
casted<-dcast(melted, student_id~class+variable)
casted$score<-rowMeans(casted[,c(4,7,10)],na.rm=T)+rnorm(nrow(casted),0,5)
df$score<-casted$score[match(df$student_id, casted$student_id)]
我认为您需要尝试做的是:
fit<-lmer(score~1+min_in_class+min_hw+(1|class)+(1+min_in_class+min_hw|student_id), data=df)
我用各种班级规模和池子运行它,但没有得到我期望的结果;但也许有更多的课程,事情会看起来更好。