r的功能很强大,有很多各种各样的包。 但是包太多了,引起了很大的麻烦。 必然,许多软件包可以创建结构方程模型,如sem、psych、OpenMx和lavaan。 我选择了lavaan包。 原因:语法概要简单、快捷,支持非正规、连续数据,能够处理缺失值。
lavaan软件包是由比利时根特大学的Yves Rosseel开发的。 lavaan的命名来自latent variable analysis,由每个单词的前两个字符la-va-an——lavaan组成。
为什么这么简单呢? 主要是因为那个lavaan model syntax,如果你能做r的回归分析,那对你来说很容易。
一、语法介绍
语法一: f3~f1 f2 (路径模型) ) ) ) ) ) ) ) ) ) )。
结构方程模型的路径部分可视为回归方程。 另一方面,在r中,回归式可以表示为y~ax1 bx2 c、"~"左边的因子、右边为自变量、" "表示为多个自变量的组合. 那么,把y看作内生潜变量,把x看作外生潜变量,省略截距的话,就是lavaan model syntax的语法1。
语法二: f1=~ item1 item2 item3(测量模型) ) )。
'=~'的左边是潜在变量,右边是观测变量,作为句子整体,潜在变量f1被理解为由观测变量item1、item2、item3来表现。
语法三、item1 ~~ item1,item1 ~~ item2
'~~ '的两边相同,表示该变量的方差,不同则表示两者的协方差
语法四: f1 ~ 1
表示截距
还有其他高级语法。 有关详细信息,请参阅lavaan帮助文档。 因为不能用于一般结构方程的建模分析,所以不列出。
二.模特的三种表示方法
以验证因子分析为例进行说明,下图所示的模型如下。
方法1 :说明最简单
指定最基本的要素即可,除此之外由函数自动实现,对模型的控制力最弱。 仅用于函数cfa (和sem )
模特
textual=~x4 x5 x6
speed=~x7 x8 x9 '
fit
请注意,在指定此模型的方法中,拟合时,潜在变量第一个测量变量的系数载荷缺省为1。 要指定潜在变量的方差为1,请执行以下操作:
model.bis
textual=~ NA*x4 x5 x6
speed=~ NA*x7 x8 x9
visual ~~ 1*visual
文本~~1 *文本
speed ~~ 1*speed '
方法2 :完整说明
必须指定所有元素,对模型的控制力最强,适用于lavaan ()函数,适合高级用户
model.full
textual=~ 1*x4 x5 x6
speed=~ 1*x7 x8 x9
x1 ~~ x1
x2 ~~ x2
x3 ~~ x3
x4 ~~ x4
x5 ~~ x5
x6 ~~ x6
x7 ~~ x7
x8 ~~ x8
x9 ~~ x9
视觉~ ~视觉
文本~ ~文本
引线~~引线
视觉~ ~文本速度
textual ~~ speed '
fit
方法3 :不完全说明
最简单、完整描述的混合版本。 在拟合时添加auto.*参数并将其应用于lavaan ()函数
model.mixed
visual=~ 1*x1 x2 x3
textual=~ 1*x4 x5 x6
speed=~ 1*x7 x8 x9
# factor covariances
视觉~ ~文本速度
textual ~~ speed '
fit
有关可以设置的参数的详细信息,请参阅帮助
PS:将参数mimic='Mplus '设置为lavaan ()函数可获得与Mplus在数值和外观上类似的结果,而将mimic='EQS '设置为输出与EQS在数值上类似的结果
三.拟合结果的显示
显示拟合结果的最简单方法是使用summary ()函数,如下所示
摘要(fit,fit.measures=TRUE ) ) ) )。
但是,summary ) )仅适用于显示结果,而parameterEstimates ) )返回数据框以便于进一步处理
参数定义(fit,ci=FALSE,标准=true ) )。
得到大于10校正指数
MI
p>subset(MI,mi>10)此外,还有其他的展示拟合结果的函数,功能还是蛮强大的
四、结构方程模型
(1)设定模型
model
# measurement model
ind60 =~ x1 + x2 +x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8
# regressions
dem60 ~ ind60
dem65 ~ ind60 + dem60
# redisual covariances
y1 ~~ y5
y2 ~~ y4 +y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8'
(2)模型拟合
fit
summary(fit, standardized = TRUE)
(3)给回归系数设置标签
给回归系数设定标签在做有约束条件的结构方程模型时会很有用。当两个参数具有相同的标签时,会被视为同一个,只计算一次。
model.equal
ind60 =~ x1 + x2 + x3 +
dem60 =~ y1 + d1*y2 + d2*y3 + d3*y4
dem65 =~ y5 + d1*y6 + d2*y7 + d3*y8
# regressions
dem60 ~ ind60
dem65 ~ ind60 + dem60
# residual covariances
y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8'
(4)多组比较
anova(fit, fit.equal)
anova()会计算出卡方差异检验
(5)拟合系数
lavaan包可以高度定制化的计算出你想要的拟合指标值,例如,我想计算出卡方、自由度、p值、CFI、NFI、IFI、RMSEA、EVCI的值
fitMeasures(fit,c("chisq","df","pvalue","cfi","nfi","ifi","rmsea","EVCI"))
(6)多组结构方程
在拟合函数里面设置 group参数即可实现,同样的可以设置group.equal参数引入等式限制
五、作图
Amos以作图化操作见长,目前版本的Mplus也可以实现作图,那R语言呢,自然也是可以的,只不过是另一个包——semPlot,其中的semPaths()函数。
简单介绍一下semPaths()中的主要函数
semPaths(object, what = "paths", whatLabels, layout = "tree", ……)
(1)object:是拟合的对象,就是上文中的“fit”
(2)what:设定图中线的属性, 默认为paths,图中所有的线都为灰色,不显示参数估计值;
semPaths(fit)若what设定为est、par,则展示估计值,并将线的颜色、粗细、透明度根据参数估计值的大小和显著性做出改变
semPaths(fit,what = "est")若设置为stand、std,则展示标准参数估计
semPaths(fit,what = "stand")
若设置为eq、cons,则与默认path相同,如果有限制等式,被限制的相同参数会打上相同的颜色;
(3)whatLabels:设定图中线的标签name、label、path、diagram:将边名作为展示的标签
est、par:参数估计值作为边的标签
stand、std:标准参数估计值作为边的标签
eq、cons:参数号作为标签,0表示固定参数,被限制相同的参数编号相同
no、omit、hide、invisible:隐藏标签
(4)layout:布局
主要有树状和环状两种布局,每种布局又分别有两种风格。
默认为“tree”,树状的第二种风格如下图,比第一种看起来舒服都了
semPaths(fit,layout = "tree2")
第一种环状
semPaths(fit,layout = "circle")
擦,都揉成一团了!
试试第二种风格
semPaths(fit,layout = "circle2")
还好一点。如果把Rstudio默认的图片尺寸设计好,作图效果会更棒。
还有一种叫spring的布局,春OR泉?
semPaths(fit,layout = "spring")
看起来跟环状的很像。
详细内容可以阅读以下文献,以及相应的help文档:
[1]Rosseel Y. lavaan: An R package for structural equation modeling[J]. Journal of Statistical Software, 2012, 48(2): 1-36.