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)