今天本来想看看交叉滞后怎么做,然后给粉丝写写教程,查资料的过程中发现了一篇很好的文献,记录下来分享给大家。
这篇文献主要是讲如何用R的lavaan包做交叉滞后模型的。
文献一开始首先介绍Measurement invariance
Measurement invariance测量不变性
在心理学的很多情形下,我们都不能直接测量我们想要的构象,比如饮酒动机,这些不能直接测量的变量叫做潜变量,叫做因子,叫做构象,叫做维度。
下次你看到上面的红字你都可以把它们理解为一个东西,那么构象这个东西就得靠多个问卷条目进行反应。
这个时候问题来了,你的问卷条目是不是很好地反应了你要测量的构象呢?
总得有个指标吧,或者有个方法检验吧。
这个指标就叫做效度,方法就可以用Confirmatory factor analysis (CFA),验证性因子分析。
Confirmatory factor analysis (CFA) is a statistical technique that allows us to test whether clusters of items in our measure are indeed reflective of the latent construct to which we have assigned them
还有,很多时候,我们会进行纵向设计,或者追踪随访,我们会把我们的测量工具发放很多遍,比如追踪学生,一年级追踪到初三,每年都让学生们填写某个问卷等等。
这个时候新问题又来了
你要记住我们的测量工具是要测量构象的,通过追踪随访我们也是想要了解构象的随时间变化的情况,而构象又是通过条目反应的,新的问题就是随着时间的变化,这些条目还能不能准确的反应构象呢?或者说随着时间的变化学生对条目的理解会不会变呢?
To make logical claims about how latent variables change across time, we must first establish that our instruments are measuring the construct consistently over time
这就引出了Measurement invariance测量不变性的概念:
Measurement invariance (MI) is upheld in a study when “participants across all [time periods] interpret the individual questions, as well as the underlying latent factor, in the same way"
就是说每个人随时间变化他对条目以及条目的隐含构象的理解都是一样的。直白一点说,就是一年级的时候我问卷得5分,二年级的时候同一个问卷得6分,这1分的差异确实是构象本身的变化,而不是学生对条目理解的变化引起的。
如果在随访中测量不变性不能保证的话,我们就很难去比较构象随时间变化的差异了。
这个测量不变性在纵向设计中很重要,作者举了个例子,有研究发现从1990s到2010s学生的自恋水平有所上升,Wetzel这个人就去检查了一下这个纵向测量的测量不变性,然后他就发现了:
facets of leadership and vanity were not invariant, suggesting that students’ interpretations of questions pertaining to these aspects were changing over time
自恋量表的leadership and vanity这两个维度测量不变性是不成立的,也就是随着时间的推移学生们对这两个维度条目的理解不同了,也就是说去年测的和今年测的不是一个东西。
然后Wetzel把这个测量不变性的问题解决了之后,发现学生的自恋从1990s到2010s其实是越来越低的。
这个也就提示我们,分析纵向数据时有必要考虑测量不变性问题。
Checking for MI is thus an important practice prior to interpreting longitudinal results.
测量不变性的测量
听起来有点怪哈,就是如何测量纵向数据的测量不变性,用的方法也是验证性因子分析,原理就是用一系列的验证性因子分析,通过逐步加强模型的限制来看我们纵向数据的测量不变性水平。
这个时候,我们关心的指标主要有3个
一个是因子载荷,二是截距,三是残差方差
factor loadings, which show how representative each item is of its latent factor;
intercepts, which relate to the mean levels of each item; and
residual variances, which represent the other unexplained influences predicting item responses besides latent variables
通过这3个指标我们就可以把测量不变性分为4个水平:
首先是构形不变性configural invariance:
configural invariance, allows factor loadings, item intercepts, and residual variances to vary across waves
只要求因子(潜在变量)和项(观测变量)间的基本结构关系相同,而不对任何参数设定限制。
就是说不同时间的测量中同一个问卷的因子结构应该是不变的。
第二是单位等值(Metric invariance)或弱等值(Weak Invariance):
constrains factor loadings to equality across waves. This establishes that items do not become more (or less) representative of the latent construct at different measurement occasions
这个水平要求测量因子与条目之间的关系——因子负荷(factor loading)是相等的。等因子负荷意味着观测项和潜在因子之间在不同时间具有着相同的意义,即不同时间的被试对同一个构念(construct)的理解是一致的。
第三尺度等值(Scalar invariance)或强等值(Strong Invariance)
scalar invarianceconstrains not only factor loadings, but also item intercepts to equality across waves
这个水平要求因子载荷和条目截距在不同时间的测量相同,意味着不同时间被试对测量内容的系统倾向性一致。
如果尺度等值不符就意味着随着时间的推移,个体对条目的理解会变。尺度等值不符的情况下,你得到的随着时间变化的构象变化有可能并不是真正的构象变了,而是随着时间推移个体对条目的理解变了,条目均值变了。
第四严格等值( Strict Invariance)也叫残差等值
residual invariance constrains factor loadings, item intercepts, and residual variances to equality across waves
这个水平要求因子载荷,条目均值和构象的误差随着时间的推移也不变,意味着外部影响测量的变量随着时间都没有发生变化,很严格。
写完测量不变性滞后,再写交叉滞后模型
交叉滞后面板模型
利用纵向数据还可以研究变量间关系的方向性,比如使用交叉滞后模型cross-lagged panel models (CLPM)。
举个例子,有人在横断面研究中发现感知社会支持和学习成绩有关系,这个时候我很好奇,到底是社会支持影响了学习成绩还是学习成绩影响了社会支持,这个时候我们用交叉滞后模型就可以发现其实是学习成绩造成了感知社会支持的提高。
交叉滞后模型就是干上面这个事的。
因为交叉滞后模型用的一定是纵向数据,所以它的测量不变性问题一定要考虑
实例操作
还是给大家写个实际例子
在这个例子中我们的构象有2:
- perfectionistic self-presentation (PSP)
- state social anxiety (SSA)
分别是完美主义和社交焦虑,对于这两个构象我们从第7天一直测量到第11天,共5天,于是我们就形成了一个面板数据,而且,我们的PSP有3个条目,SSA有7个条目。
我们今天要做的就是检验我们的测量的测量不变性并做一个交叉滞后模型
检验测量不变性
做交叉滞后首先就得检验测量不变性,之前已经给大家写了测量不变性的几个水平,我们现在要做的就是检验我们的数据的测量不变性到底符合哪一个水平。
首先从最宽松的构形不变性configural invariance开始检验:
configural.v1 <-
'
# PSP 因子载荷
PSP.7 =~ NA*psp1.7 + psp2.7 + psp3.7
PSP.8 =~ NA*psp1.8 + psp2.8 + psp3.8
PSP.9 =~ NA*psp1.9 + psp2.9 + psp3.9
PSP.10 =~ NA*psp1.10 + psp2.10 + psp3.10
PSP.11 =~ NA*psp1.11 + psp2.11 + psp3.11
# PSP 方差固定为1
PSP.7 ~~ 1*PSP.7
PSP.8 ~~ 1*PSP.8
PSP.9 ~~ 1*PSP.9
PSP.10 ~~ 1*PSP.10
PSP.11 ~~ 1*PSP.11
# SSA 因子载荷
SSA.7 =~ NA*ssa1.7 + ssa2.7 + ssa3.7 + ssa4.7 + ssa5.7 + ssa6.7 + ssa7.7
SSA.8 =~ NA*ssa1.8 + ssa2.8 + ssa3.8 + ssa4.8 + ssa5.8 + ssa6.8 + ssa7.8
SSA.9 =~ NA*ssa1.9 + ssa2.9 + ssa3.9 + ssa4.9 + ssa5.9 + ssa6.9 + ssa7.9
SSA.10 =~ NA*ssa1.10 + ssa2.10 + ssa3.10 + ssa4.10 + ssa5.10 + ssa6.10 +
ssa7.10
SSA.11 =~ NA*ssa1.11 + ssa2.11 + ssa3.11 + ssa4.11 + ssa5.11 + ssa6.11 +
ssa7.11
# SSA 固定方差为 1
SSA.7 ~~ 1*SSA.7
SSA.8 ~~ 1*SSA.8
SSA.9 ~~ 1*SSA.9
SSA.10 ~~ 1*SSA.10
SSA.11 ~~ 1*SSA.11
'
同时我们还需要将残差方差进行设置:
errorstructure <- 'psp1.7 ~~ psp1cov*psp1.8
psp1.7 ~~ psp1cov*psp1.9
psp1.7 ~~ psp1cov*psp1.10
psp1.7 ~~ psp1cov*psp1.11
psp1.8 ~~ psp1cov*psp1.9
psp1.8 ~~ psp1cov*psp1.10
psp1.8 ~~ psp1cov*psp1.11
psp1.9 ~~ psp1cov*psp1.10
psp1.9 ~~ psp1cov*psp1.11
psp1.10 ~~ psp1cov*psp1.11
psp2.7 ~~ psp2cov*psp2.8
psp2.7 ~~ psp2cov*psp2.9
psp2.7 ~~ psp2cov*psp2.10
psp2.7 ~~ psp2cov*psp2.11
psp2.8 ~~ psp2cov*psp2.9
psp2.8 ~~ psp2cov*psp2.10
psp2.8 ~~ psp2cov*psp2.11
psp2.9 ~~ psp2cov*psp2.10
psp2.9 ~~ psp2cov*psp2.11
psp2.10 ~~ psp2cov*psp2.11
psp3.7 ~~ psp3cov*psp3.8
psp3.7 ~~ psp3cov*psp3.9
psp3.7 ~~ psp3cov*psp3.10
psp3.7 ~~ psp3cov*psp3.11
psp3.8 ~~ psp3cov*psp3.9
psp3.8 ~~ psp3cov*psp3.10
psp3.8 ~~ psp3cov*psp3.11
psp3.9 ~~ psp3cov*psp3.10
psp3.9 ~~ psp3cov*psp3.11
psp3.10 ~~ psp3cov*psp3.11
ssa1.7 ~~ ssa1cov*ssa1.8
ssa1.7 ~~ ssa1cov*ssa1.9
ssa1.7 ~~ ssa1cov*ssa1.10
ssa1.7 ~~ ssa1cov*ssa1.11
ssa1.8 ~~ ssa1cov*ssa1.9
ssa1.8 ~~ ssa1cov*ssa1.10
ssa1.8 ~~ ssa1cov*ssa1.11
ssa1.9 ~~ ssa1cov*ssa1.10
ssa1.9 ~~ ssa1cov*ssa1.11
ssa1.10 ~~ ssa1cov*ssa1.11
ssa2.7 ~~ ssa2cov*ssa2.8
ssa2.7 ~~ ssa2cov*ssa2.9
ssa2.7 ~~ ssa2cov*ssa2.10
ssa2.7 ~~ ssa2cov*ssa2.11
ssa2.8 ~~ ssa2cov*ssa2.9
ssa2.8 ~~ ssa2cov*ssa2.10
ssa2.8 ~~ ssa2cov*ssa2.11
ssa2.9 ~~ ssa2cov*ssa2.10
ssa2.9 ~~ ssa2cov*ssa2.11
ssa2.10 ~~ ssa2cov*ssa2.11
ssa3.7 ~~ ssa3cov*ssa3.8
ssa3.7 ~~ ssa3cov*ssa3.9
ssa3.7 ~~ ssa3cov*ssa3.10
ssa3.7 ~~ ssa3cov*ssa3.11
ssa3.8 ~~ ssa3cov*ssa3.9
ssa3.8 ~~ ssa3cov*ssa3.10
ssa3.8 ~~ ssa3cov*ssa3.11
ssa3.9 ~~ ssa3cov*ssa3.10
ssa3.9 ~~ ssa3cov*ssa3.11
ssa3.10 ~~ ssa3cov*ssa3.11
ssa4.7 ~~ ssa4cov*ssa4.8
ssa4.7 ~~ ssa4cov*ssa4.9
ssa4.7 ~~ ssa4cov*ssa4.10
ssa4.7 ~~ ssa4cov*ssa4.11
ssa4.8 ~~ ssa4cov*ssa4.9
ssa4.8 ~~ ssa4cov*ssa4.10
ssa4.8 ~~ ssa4cov*ssa4.11
ssa4.9 ~~ ssa4cov*ssa4.10
ssa4.9 ~~ ssa4cov*ssa4.11
ssa4.10 ~~ ssa4cov*ssa4.11
ssa5.7 ~~ ssa5cov*ssa5.8
ssa5.7 ~~ ssa5cov*ssa5.9
ssa5.7 ~~ ssa5cov*ssa5.10
ssa5.7 ~~ ssa5cov*ssa5.11
ssa5.8 ~~ ssa5cov*ssa5.9
ssa5.8 ~~ ssa5cov*ssa5.10
ssa5.8 ~~ ssa5cov*ssa5.11
ssa5.9 ~~ ssa5cov*ssa5.10
ssa5.9 ~~ ssa5cov*ssa5.11
ssa5.10 ~~ ssa5cov*ssa5.11
ssa6.7 ~~ ssa6cov*ssa6.8
ssa6.7 ~~ ssa6cov*ssa6.9
ssa6.7 ~~ ssa6cov*ssa6.10
ssa6.7 ~~ ssa6cov*ssa6.11
ssa6.8 ~~ ssa6cov*ssa6.9
ssa6.8 ~~ ssa6cov*ssa6.10
ssa6.8 ~~ ssa6cov*ssa6.11
ssa6.9 ~~ ssa6cov*ssa6.10
ssa6.9 ~~ ssa6cov*ssa6.11
ssa6.10 ~~ ssa6cov*ssa6.11
ssa7.7 ~~ ssa7cov*ssa7.8
ssa7.7 ~~ ssa7cov*ssa7.9
ssa7.7 ~~ ssa7cov*ssa7.10
ssa7.7 ~~ ssa7cov*ssa7.11
ssa7.8 ~~ ssa7cov*ssa7.9
ssa7.8 ~~ ssa7cov*ssa7.10
ssa7.8 ~~ ssa7cov*ssa7.11
ssa7.9 ~~ ssa7cov*ssa7.10
ssa7.9 ~~ ssa7cov*ssa7.11
ssa7.10 ~~ ssa7cov*ssa7.11'
设定好模型后我们就可以跑我们的验证性因子分析了:
configural.model <- paste(configural.v1, errorstructure, sep = ' ', collapse
= NULL)
configural.fit <- cfa(configural.model,
data = model.test.dat,
estimator = "MLR",
se = "robust",
missing = "ML",
std.lv = TRUE)
纵览上面的模型设定,我们的模型中factor loadings, item intercepts, and residual variances都是可以自由估计的,所以如果上面的模型拟合不错,我们就可以认为我们的数据达到了最低水平的测量不变性,即**构形不变性configural invariance。**
运行上面的代码,输出结果如下:
![文献解读:纵向数据的测量不变性和交叉滞后模型(一)](https://upload-images.jianshu.io/upload_images/25664580-00ea6059a3a17aa6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
结果很棒,说明我们的数据构型不变性确实是达到了,我们才仅仅做完了第一步,还有很多步骤呢,文章太长了,期待下一篇吧。
# 小结
本来准备给大家写交叉滞后模型的,没办法太长了,今天给大家写了纵向数据的测量不变性,而且还没写完,就这样吧,下一篇文章接着写。
感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请关注后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞转发。