lavaan - Mediation
https://lavaan.ugent.be/tutorial/mediation.html
Yが従属変数、Xが独立変数(予測変数)、Mが媒介変数とする。

データは仮想のもの。
library(lavaan)
set.seed(1234)
X <- rnorm(100)
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)
'
ラベルをそれぞれにつける。
独立変数Xにはc
従属変数Yにはb
媒介変数Mにはa
これは任意でいいが、間接効果の書き方が変わってくる。
まず:=は母数を定義づけるための記号である。
abはa*bと定義づけられている。ここが間接効果に相当する。間接効果は構成する2つのパスの積であるため定義が積になっている。
totalというのは総合効果であり、c + (a*b)と定義づけられる。ちなみにcは直接効果である。
実行
fit <- sem(model, data = Data) summary(fit, ci=T) ## 95%区間を追加
結果。
Regressions:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
Y ~
X (c) 0.036 0.104 0.348 0.728 -0.168 0.241
M ~
X (a) 0.474 0.103 4.613 0.000 0.273 0.675
Y ~
M (b) 0.788 0.092 8.539 0.000 0.607 0.969
Variances:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
.Y 0.898 0.127 7.071 0.000 0.649 1.147
.M 1.054 0.149 7.071 0.000 0.762 1.346
Defined Parameters:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
ab 0.374 0.092 4.059 0.000 0.193 0.554
total 0.410 0.125 3.287 0.001 0.166 0.654
間接効果はabなので0.374[95%LC: 0.193-0.554]、総合効果は0.410[95%CI: 0.166-0.654]となる。
この方法はデルタ法で、ブートストラップで標準誤差を算出できるようだ。
fit2 <- sem(model, data = Data, se = "bootstrap", bootstrap = 10000) summary(fit2, ci=T)