前言
结构方程模型 (Structural Equation Modeling, SEM) 是一种建立、估计和检验因果关系模型的方法,常用于验证性因子分析、高阶因子分析、路径及因果分析、中介分析、多时段设计、单形模型及多组比较等。关于SEM的简介,感兴趣的朋友可以查看往期微信文章《》和《》。其中,中介分析是目前被广泛应用于心理、临床、流行病等医学研究的一种方法,本文将基于R语言介绍如何使用结构方程模型进行中介分析。感兴趣的朋友可以查看往期微信文章《》和《》
中介分析是分析因果关系的一种特殊方法,在统计学中,中介模型通过引入第三个假设变量 (中介变量M) 来识别和解释自变量X与因变量Y之间观察到的关系的内在机制或过程,即研究X对Y产生影响时,是否会先通过M,再去影响Y;即是否有X→M→Y这样的关系,如果存在此种关系,则说明具有中介效应。中介分析主要分为单中介分析、并行多中介分析和链式多中介分析,其各自的路径图如下:
图1. 单中介示意图
图2. 并行多中介示意图
图3. 链式多中介示意图
基本概念
我们以最简单的单中介模型为例来说明中介效应分析的思路及检验流程:
图4. 单中介模型
在不考虑M的情况下,X作用于Y的效应即为总效应。上图是在控制M以后,X和Y之间的关系,其中系数c’代表考虑在控制M后X作用于Y的效应,也就是X和Y之间的直接效应,系数a代表X作用于M的效应,系数 b 表示M作用于Y的效应,a×b即为X和Y之间的间接效应。那么,X和Y之间总效应就应该等于直接效应加上间接效应,即总效应 = a×b + c'。我们做中介效应分析就是要检验 a×b 效应是否存在,以及它在总效应中的占比,体现中介效应的作用程度。
我们引用温忠麟等人的Bootstrap法来阐述中介效应的检验流程 (图5),步骤如下:
第一步,检验总效应的系数c,如果显著,按中介效应立论,否则按遮掩效应立论。但无论是否显著, 都进行后续检验。
第二步,依次检验中介模型中的系数 a 和系数 b,如果两个都显著,则间接效应显著, 转到第四步;如果至少有一个不显著,进行第三步。
第三步,用 Bootstrap 法直接检验H0: ab = 0。如果显著,则间接效应显著,进行第四步;否则间接效应不显著,停止分析。
第四步,检验中介模型中的系数 c',如果不显著,即直接效应不显著,说明只有中介效应。如果显著,即直接效应显著sem 结构方程,进行第五步。
第五步,比较 ab 和 c' 的符号,如果同号,属于部分中介效应,报告中介效应占总效应的比例ab/c。如果异号,属于遮掩效应,报告间接效应与直接效应的比例的绝对值|ab/c'|。
图5. 中介效应检验流程图
软件实现
结构方程模型可通过调用R语言软件中lavaan包实现,本文使用的版本为R-4.2.0。
1. 安装lavaan包,并生成分析数据集
(1)启动R,输入:
install.packages("lavaan", dependencies = TRUE) # 安装lavaan包
library(lavaan) # 载入lavaan包
(2)在R中随机生成一个数据集用于分析展示,输入:
set.seed(20220523)#为了确保结果的可重复性,设置随机数种子
X <- rnorm(100)
0.5*X + rnorm(100)
M2 <- 0.55*X +0.5*M1+ rnorm(100)
Y <- 0.7*M2 + 0.48*M1+0.6*X+ rnorm(100)
Data <- data.frame(X = X, Y = Y, M1 =M1, M2 = M2)
数据集格式如下:
图6. 案例数据集部分截图
2. 单中介分析
构建单中介分析方程 (用c1代表c’):
simpleMediation <- '
Y ~ b * M1 + c1 * X
M ~ a * X
indirect := a * b
c := c1 + (a * b)
'
拟合模型:
fit <- sem(model = simpleMediation, data= Data,se = "bootstrap",bootstrap = 1000)
输出结果:
summary(fit,ci=T)
结果如下:
图7. 单中介模型结果
(4)结果解释
由输出的结果中可知:总效应值(c)为1.215且显著,系数a和系数b均显著,间接效应值(a×b)的置信区间不包含0,故间接效应显著,直接效应值(c') 为0.919且显著,所以此中介模型存在中介效应,中介效应占比约为0.296/1.215=24.4%.
3. 并行多中介分析
(1)构建并行多中介分析方程:
multipleMediation <- '
Y ~ b1 * M1 + b2 * M2 + c1 * X
M1 ~ a1 * X
M2 ~ a2 * X
indirect1 := a1 * b1
indirect2 := a2 * b2
c := c1 + (a1 * b1) + (a2 * b2)
M1 ~~ M2
'
(2)拟合模型:
fit <- sem(model = multipleMediation,data = Data,se = "bootstrap",bootstrap = 1000)
(3)输出结果:
summary(fit,ci=T)
结果如下:
图8. 并行多中介模型结果
(4)结果解释
由输出的结果中可知:总效应值(c) 为1.215且显著,X→M1→Y路径的系数a1和系数b1均显著,间接效应值(a1×b1)的置信区间不包含0,故X→M1→Y路径的间接效应显著,X→M2→Y路径的系数a2和系数b2均显著,间接效应值(a2×b2)的置信区间不包含0,故X→M2→Y路径的间接效应也显著sem 结构方程,总中介效应值为0.51,直接效应值 (c') 为0.706且显著,所以此中介模型存在中介效应,中介效应占比约为(0.194+0.316)/1.215=42%.
4. 链式多中介分析
(1) 构建链式多中介分析方程:
multipleMediation <- '
Y~b1*M1+b2*M2+c1*X
M1~a1*X
M2~a2*X+d1*M1
Indirect1:=a1*b1
Indirect2:=a2*b2
secondInd1:=a1*d1*b2
c:=c1+a1*b1+a2*b2+a1*d1*b2
'
(2) 拟合模型:
fit <- sem(model = multipleMediation,data = Data,se = "bootstrap",bootstrap = 1000)
(3) 输出结果:
summary(fit,ci=T)
结果如下:
图9. 链式多中介模型结果
(4) 结果解释
由输出的结果中可知:总效应值(c) 为1.215且显著,X→M1→Y路径的系数a1和系数b1均显著,间接效应值(a1×b1)的置信区间不包含0,故X→M1→Y路径的间接效应显著,X→M2→Y路径的系数a2和系数b2均显著,间接效应值(a2×b2)的置信区间不包含0,故X→M2→Y路径的间接效应也显著,X→M1→M2→Y路径的系数a1、d1和系数b2均显著,间接效应值(a1×d1×b2)的置信区间不包含0,故X→M1→M2→Y路径的间接效应也显著,总中介效应值为0.51,直接效应值 (c') 为0.706且显著,所以此中介模型存在中介效应,中介效应占比约为(0.194+0.213+0.103)/1.215=42%.
5. 拓展
在R语言中,基于lavaan包开发出来的bruceR包与processR包也可用于结构方程模型的中介分析。bruceR包是一个集合包,可以通过调用mediation、interactions和lavaan等R包的功能来实现中介、调节和交互作用。其中bruceR包可以通过lavaan包的功能实现结构方程模型的链式中介作用分析。processR包目前涵盖52种模型,可以实现上述多种中介分析。
参考文献
温忠麟, 叶宝娟. 中介效应分析: 方法和模型发展[J]. 心理科学进展, 2014, 22(05): 731-745.
▼RCT随机化小程序推荐▼
限 时 特 惠:本站每日持续更新海量各大内部创业教程,一年会员只需98元,会员全站资源免费获取点击查看会员权益
站 长 微 信:ryenlii666