Rで構造方程式モデリングのパス図を出力する
Rとは
統計解析に特化したプログラミング言語です https://cran.ism.ac.jp/index.html
lavaanとは
多変量解析、構造方程式モデリングを扱うためのRのパッケージ http://lavaan.ugent.be/index.html
インストール
環境
- masOS High Sierra (10.13.6)
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)
良い感じにパス図が出てきました。
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)
それっぽい図ができあがりましたね。
トラブルシューティング
semPlotのインストール時に依存しているglasso
, OpenMx
がビルドできない...
エラーを見てみるとgfortran
の実行で失敗していたので、以下で解決。
$ brew cask install gfortran
まとめ
SEMは大学以来?なので構造方程式モデリングについてはもっと深めたいと思います。
参考記事
- The Comprehensive R Archive Network
- The lavaan Project
- semPlot Examples |
- Network Analysis in R Cookbook
- dplyr tutorial
- Network Model Selection Using qgraph 1.3 | psychosystems.org blog
- (株)日科技研:SEM(構造方程式モデリング)とは(因果分析)|製品案内
- PythonとRを連携させて分散共分散構造分析(SEM)のパス図を出力したい - Qiita
- 心理データ解析第10回(1)
- Running R at Scale on Compute Engine | Solutions | Google Cloud