Rで構造方程式モデリングのパス図を出力する

Rとは

統計解析に特化したプログラミング言語です https://cran.ism.ac.jp/index.html

lavaanとは

多変量解析、構造方程式モデリングを扱うためのRのパッケージ http://lavaan.ugent.be/index.html

インストール

環境

Rパッケージ

  • R 3.5.1 https://cran.ism.ac.jp/ をダウンロードして、pkgを開いてインストールする
  • brewでインストールしようとしたが、問題解決できず失敗した

lavaan

Rを立ち上げてpackageをインストールします。

$ R
> install.packages("lavaan", dependencies=TRUE)

libraryを実行してバージョンが確認できれば完了です。

> library(lavaan)
This is lavaan 0.6-1
lavaan is BETA software! Please report any bugs.

semPlot

パス図を書くために必要なので、こちらもインストール。

$ R
> install.packages("semPlot")

実行

以下をRで実行して、挙動を確認してみます。

library(semPlot)
# 適当なデータセット
X <- rnorm(100)
Y <- rnorm(100)
Z <- rnorm(100)
F1 <- rnorm(1) * X + rnorm(1) * Y + rnorm(1) * X * Y
F2 <- rnorm(1) * Y + rnorm(1) * Z
DF <- data.frame(X, Y, Z, F1, F2)

# 回帰
res1 <- lm(F1 ~ X * Y, data = DF)
res2 <- lm(F2 ~ Y * Z, data = DF)

# パス図を描画
semPaths(res1 + res2, "model", "est", intercepts = FALSE)

良い感じにパス図が出てきました。

f:id:nafu003:20180715110110p:plain

http://lavaan.ugent.be/tutorial/sem.html を参考に SEM(構造方程式モデリング)を実行してみます。

library(lavaan)
library(semPlot)
model <- '
  # 測定モデル
    ind60 =~ x1 + x2 + x3
    dem60 =~ y1 + y2 + y3 + y4
    dem65 =~ y5 + y6 + y7 + y8
  # 回帰
    dem60 ~ ind60
    dem65 ~ ind60 + dem60
  # 因子相関
    y1 ~~ y5
    y2 ~~ y4 + y6
    y3 ~~ y7
    y4 ~~ y8
    y6 ~~ y8
'
fit <- sem(model, data=PoliticalDemocracy)
semPaths(fit, "model", "est", intercepts = FALSE)

f:id:nafu003:20180715110959p:plain

それっぽい図ができあがりましたね。

トラブルシューティング

semPlotのインストール時に依存しているglasso, OpenMxがビルドできない...

エラーを見てみるとgfortranの実行で失敗していたので、以下で解決。

$ brew cask install gfortran

まとめ

  • Rは統計解析用の便利な言語だよ
  • lavaanはSEMに使うよ
  • semPlotはSEMを良い感じに描画してくれるよ

SEMは大学以来?なので構造方程式モデリングについてはもっと深めたいと思います。

参考記事