中介分析(三):R语言实现多重中介分析

往期:

中介分析(一)

中介分析(二):多重中介分析

R语言lavaan包可以实现结构方程模型(SEM),而中介分析是SEM的核心环节。简单中介模型以及多重中介模型都可以用lavaan包实现。

安装载入lavaan包

install.packages("lavaan")
library(lavaan)

首先介绍一下lavaan包构建模型的几个基础语法:

y ~ x1 + x2 + x3   # ~左边为y,右边为3个自变量
y1 ~1 #只包含截距项的方程
:= #Define a new parameter.

简单中介实现

set.seed(1)
X<-rnorm(100)  #随机生成X,Y,M
M<-0.5*X+rnorm(100)
Y<-0.7*M+rnorm(100)
Data<-data.frame(X=X,Y=Y,M=M)
## 模型定义
model <- ' # direct effect
             Y ~ c*X
           # mediator
             M ~ a*X
             Y ~ b*M
           # indirect effect (a*b)
             ab := a*b
           # total effect
             total := c + (a*b)
         '
fit <- sem(model, data = Data)
summary(fit)

中介分析(三):R语言实现多重中介分析_第1张图片
我们可以得到直接效应(c),间接效应(ab),总效应(total),X-M(a)以及M-Y(b)的效应。

链式多重中介实现

中介分析(三):R语言实现多重中介分析_第2张图片
以上图为例,lavaan代码如下:

model <- ' M1 ~ a1*X
           M2 ~ a2*X + d21*M1
           Y ~ b2*M2+b1*M1+c1*X
            
           ie := a1*d21*b2
           total := c1 + (a1*d21*b2) + (a1*b1)+(a2*b2)
          '
fit <- sem(model, data = Data)
summary(fit)

并行多重中介实现

中介分析(三):R语言实现多重中介分析_第3张图片

以上图为例,lavaan代码如下:


model <- ' 
           #outcome model
           Y ~ b1*M1+b2*M2+b3*M3+c1*X
           M1 ~ a1*X
           M2 ~ a2*X 
           M3 ~ a3*X 
            
           ie1 := a1*b1
           ie2 := a2*b2
           ie3 := a3*b3
           sumie := a1*b1+a2*b2+a3*b3

           total := c1 + a1*b1+a2*b2+a3*b3
          '
fit <- sem(model, data = Data)
summary(fit)

在fit时加入se=‘bootstrap’即可使用自助抽样法进行是否显著的估计,默认1000次,可通过bootstrap参数修改次数

用下面的语句就可以显示置信区间:

boot.fit<-parameterEstimates(fit, boot.ci.type='bca.simple')

总的来说,lavaan包功能强大,模型可以灵活构建,很适通路分析。

欢迎关注我的微信公众号
中介分析(三):R语言实现多重中介分析_第4张图片

你可能感兴趣的:(统计学,统计模型,机器学习)