加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

multilevel模型的不同做法

(2018-12-13 07:13:46)
标签:

研究

分类: 知无涯
两年前开始做multilevel models,先用SAS,后来用R的"multilevel" package (build on R package "nlme")。之前模型的大框架是Hierarchical Linear Modeling(HLM),对这些模型本身也没有想太多。最近,因为一些缘故想把latent variable放进去,尝试了一些新的做multilevel的模型框架(multilevel SEM)和统计软件包。先从R中"lavaan 0.6-3"开始,后来考虑到有cross-level interaction,lavaan 0.6-3未必OK,就参照Mplus 中MULTILEVEL MODELING WITH COMPLEX SURVEY DATA(用户手册Version 8 Chapter 9的内容)又把模型重新estimate了一遍。结果做了之后对比了各种output发现,其实cross-level interaction也未必不能用lavaan,取决于想做的细节。

过程虽一言难尽,但确实让我对multilevel model本身,以及怎么看interaction effect有了更多的理解。写下来完全是梳理和存档自己的理解,所以内容非常的个人化,权威解释和操作方法请查阅经典论文、教程和统计教科书,或者咨询专业人士。

[HLM和multilevel SEM的区分]
HLM是比较传统的一种方法,至今用得也很广泛。它无法handle某些复杂的模型。比如,想从predictor到dependent variable中间再加一个变量(mediation),或者模型中任何一个变量要以latent variable的形式出现。这时候放到SEM的大框架下去考虑问题更加方便,简称multilevel SEM。原本SEM里头对multilevel的考虑较少,后来随着SEM统计思想和软件的发展,也可以把multilevel类型的数据中的一些关系更好的写进Model进行estimate。这两者的根本的区分如下:
1)regression和复杂模型的区分,后者因为涉及到的component很多通常需要画示意图来精确表达;
2)对random effect前者当作变量,后者当作潜变量[注1];
mean和variance在变量那里是直接计算的 ,但在潜变量那里只能估算出来。至于变量和其他变量之间的预测关系以及error variance,不管它潜还是不潜,都需要估算。在HLM中,一切变化的东西都可以变量化。比如变量A对变量B的效应随着cluster不同而变化,这种变化就可以被变量化。Within Level上回归公式里的的截距intercept和斜率slope可以在between level上当作变量来被其他变量预测
而在multilevel SEM中,更进一步,一切变化的东西都可以潜变量化在multilevel SEM 中任何random effect,不管是random slope还是random intercept都可以把它看作一个潜变量latent variable。Mplus可以直接把 random slope也当作潜变量,而Lavaan0.6-3还不行。

[R-multilevel, R-Lavaan0.6-3, 和Mplus具体模型的一些区别]
首先,它们的Default estimator不同。HLM通常用的是REML,用REML而不用ML为的是得到更精准的一种variance estimates。而Mplus没有REML,对variance estimate是否精准它似乎不太关心。Mplus的multilevel estimator的标准设定是MLR,全称maximum likelihood estimation with robust standard errors,能给出Robust的SE(又称sandwich or Huber-White)。这种SE是对数据non-normality和model misspecification的一种“校正”,它最后影响的是fixed effect中的p值,让p值更不容易显著。Lavaan的default用的是ML,最后为了让它们可比较一些,暂时都调成了ML。

如何改写estimator的default?如果在R-multilevel中想把REML改ML,在写lme()那一串的时候,可以在data=dataset,后加上method="ML" ;而Mplus是在ANALYSIS命令部分写完ANALYSIS: TYPE = TWOLEVEL RANDOM;后加上  estimator = ml; 顺便,在multilevel package中如果把REML改写成ML,对fixed effect那部分没有丝毫影响。差异只在random effect,需要输入VarCorr(Final.Model)来查看那部分信息,Final.Model是这次自己给的模型的名字。

其他差异可以从Mplus有两种方式来估算cross-level interaction effect说起。Mplus的操作手册里只说了第一种,我自己尝试了另一种。第一种充分利用了Mplus把random slope当作潜变量的功能,如果在within level里头某个slope(比如y2 ON y1)是random的,写上s2 | y2 ON y1; 即可,不需要再单独写一句 y2 ON y1,最后s2就会被当作latent variable,会被estimate mean,error variance。如果要看w是否moderate y1和y2的关系,在between level里头就写s2 ON w;且这里的自由度很大,可以对这个潜变量做各种操作,比如可以把它的error variance跟最初的dependent variable的error variance关联起来,操作手册就给了这样的样例y WITH s2;但这样做意义不明,也不是必须的,如果有具体的理论指导另当别论。

第二种是直接先define interaction term,这个时候Interaction本身就不是潜变量而是一个直接的变量了。能对它做的操作相对会少些,而且Mplus的标准是不会估计exogenous variable的error variance。虽然random slope不是潜变量,但random intercept依然是潜变量。两种方法本身的结果:包括fixed effect,error variance,还有AIC, BIC差异都不大。但是第一种方法无法提供大家喜闻乐见的CFI, TLI,RMSEA和SRSR,这是Mplus目前的设定[注2]。

另外,不仅Mplus两种结果差异微乎其微,它们和R-mulitlevel算出来的差异也不是很大,相对来说R-multilevel的结果跟第二种方法更近一些,差异体现在within level的error variance的数值上。R-lavaan 0.6-3虽然不支持random slope,但如果要搞cross-level interaction,还是可以采用上面说的和Mplus对应的第二种方法,即先创建乘积项放入within level。结果显示,Lavaan和Mplus第二种方法output对比差异也很小。


[Mplus本身的使用笔记]
A. 基本操作
1,把自己要用的数据先按variable去subset一下,否则吃不消mplus读入命令中每个变量都要命名;缺失值先recode成999,存csv,然后把第一行的变量名去掉。
2,第一行的变量名可以直接复制粘贴的到Mplus的“VARIABLE: NAMES =”后面(功能:赋予每一列变量名),赋予的变量名中不能有点。原数据库中变量名中有点的可以替换成"_",方便以后在别的软件做同一个模型时,再替换回去。如果变量名略长且自己在读output的时候会难以区分,可以修改变量名,因为output中对一个变量的显示只有前8个character。但是只要符合命名规范,赋予的变量名再长也不会影响model正常运行。所以改不改全看自己能否在读output的时候清晰区分。在结束 “VARIABLE: NAMES =XXX XXX ”那一串之后,得把缺失值的情况也根据实际“missing = all (999);”输入进去。
3,操作命令本身分成data, variable, define, analysis, model五个命令部分,可以用DVDam(早上看DVD)来助记;不一定要按照这个顺序来,换一换比如define, variable, data, analysis, model,对运行无影响
4,如果是在define命令部分创建了新变量,那在variable命令中说清model要用哪些变量的部分(“usevar =”)就要先列出本就有的变量名 ,然后再是新变量名。usevar中不能漏任何变量名。

B. multilevel操作笔记(从用户手册v8 chapter 9中找了对自己来说有用的)
1,variable命令部分中变量到底是within还是between的如何判断和标定?
The WITHIN option: identify the variables measured on the individual level and modeled only on the within level. 
The BETWEEN option: identify the variables measured on the cluster level and modeled only on the between level. 
Variables not mentioned on the WITHIN or the BETWEEN statements are measured on the individual level and can be modeled on both the within and between levels.
2,define命令中的center功能很棒,一句 CENTER x (GROUPMEAN); 就可以搞定。是目前见过所有统计软件中命令最简洁的,括号里也可以写(GRANDMEAN)
3,如果以后忘记了random slope和random intercept的细节,可以试试用对比example 9.3和example 9.5的方法更快的搞清楚一些东西
4, Analysis命令部分”TYPE = “后一般的multilevel model只要写TWOLEVEL,而遇到把random slope当潜变量的模型则要在后面再多写一个RANDOM


注1:SEM的好处就是很多东西都可以被当作latent variable,涉及到multilevel也不只是一种,所以multilevel SEM其实可以指代很多东西。情况1:Preacher 等人2016的文章就是用single indicator把所有的predictor都弄成了潜变量,而且分成within和between两部分。代码解释自己写过http://blog.sina.com.cn/s/blog_70fa07fd0102ym7j.html。情况2:就是正文中说的各种random effect可以做为潜变量;情况3:各种变量本身按照弄measurement model的方法来搞出latent variable,不管是把它用作predictor(exogenous)还是dependent variable(endogenous).其他情况还有很多……比如growth model中的slope和intercept,Joop J. Hox的一个chapter Multilevel Regression and Multilevel Structural Equation Modeling里有简明的例子,贴个链接,http://www.joophox.net/publist/Chap14ProofsX.pdf不再详述。

注2: "Mplus doesn't currently offer overall model fit statistics for multilevel SEM models" 出自http://www.statmodel.com/cgi-bin/discus/show.cgi?12/788,另外当model中有这句时"ALGORITHM = INTEGRATION"也没有常规的fit statistics,Chi-square and related fit statistics are not available with numerical integration.出自http://www.statmodel.com/discussion/messages/22/72

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有