構造方程式モデリング（共分散構造分析）をGUIで実行するRのパッケージ"lavaangui"の紹介

今回紹介するのは構造方程式モデリング（共分散構造分析）をGUIで実行するRのパッケージ **"lavaangui"** です。

https://github.com/karchjd/lavaangui

近年の機械学習の隆盛の中で、構造方程式モデリングは流行らなくなってきた感もありますが、まだまだ活用している界隈もあります。
特に心理学系では、GUIで操作できる商用ソフトが人気でよく使われている印象があります。

じつは、 **"lavaangui"** パッケージを使うとRでもGUIで操作しながら構造方程式モデリングを実行することができるのです。
こちらにGUI操作している様子の動画があります。これでイメージがつかめるでしょうか。

https://x.com/bob3bob3/status/1871533403226673381

***
lavaanguiパッケージはCRANに登録されているのでインストールはこれだけでOK。
依存するパッケージ類も一緒にインストールされます。
```r
install.packages("lavaangui")
```

インストールが済んだらlibrary()で呼び出します。
```r
library(lavaangui)
```

# GUIで操作する

`lavaangui()`関数を実行するとでブラウザが立ち上がり、操作画面が表示されます。
```r
lavaangui()
```

![02_gui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/f13ceea2-d98a-41c9-968d-c42fa09b5f74.png)

分析対象のデータはFileメニューからLoad Dataを選択し読み込みます。
読み込めるファイル形式は*.csv, *.sav, *.rds, *.txt, *.xlsxとなっています。

今回は[『共分散構造分析[Ｒ編]』（豊田秀樹 編著）](http://www.tokyo-tosho.co.jp/books/978-4-489-02180-0/)で公開されているのデータの中から intelligence.csv をデモデータとして使います。

ファイルが読み込まれると表形式でデータ内容が表示されます。
![03_gui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/61f205a4-07c6-45bb-89a0-f33bfd428ee2.png)

データの表示画面を閉じて元の画面に戻ると、メニューの下に読み込んだデータに含まれる変数が四角で囲って表示されています。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/10439b0a-f8fd-4ecd-b1a9-b357056eb73e.png)

データを読み込めたらモデルの作成に入りましょう。
四角で囲まれた変数（観測変数）をドラッグ&ドロップで下のフィールドに置いていきます。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/7c381046-e18f-4681-8c88-324813bdd776.png)

次に潜在変数を配置します。
左上の丸いアイコンをドラッグ&ドロップで置いていきます。

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/3d3a953b-9ad6-4c74-8ebb-d4f757f76a91.png)

パスを引きます。
左上の一方通行の矢印アイコンをクリックしたら、パスの始まりとなる変数からパスの刺さる先の変数へドラッグするとパスが引かれます。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/a4c044d3-a39b-46ad-8fa3-4fab85473fbe.png)

切片を設定します。
左上の両方向矢印アイコンをクリックして、切片を付けたい変数から同じ変数へドラッグします。これはちょっと文字だと伝わりづらいかも。動画を見て確認してください。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/31e4c5dd-fdeb-4243-a2f0-a7f51a3c37f5.png)

潜在変数間の共分散（因子間相関）のパスを設定します。
切片と同様に左上の両方矢印アイコンをクリックして、パスを引きたい潜在変数間でドラッグします。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/56f77ef2-1e7d-41a2-96e8-55f26189f604.png)

ここまでで、右のウィンドウにlavaanパッケージで使えるモデルのコードが表示されます。
GUIではなく通常のR言語で同様のモデルを使いたい場合はこちらを参考にしましょう。

このままだと不格好ですね。
Apply Layoutメニューを使うと自動整列してくれます。
Tree2を適用したのが下の図です。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/27a45f19-2b6d-4413-9a41-4b3de94fd3bc.png)

分析を実行する前にいくつかの制約を設定しなければいけません。
画面下の「Autocompleted Model」をクリックしますると、必要な制約を自動的に設定してくれます。（もちろん任意での指定も可能。）
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/e958f95c-db80-4bec-aad9-d45c793fbfe0.png)

いよいよ分析の実行です。
下の「Estimates」をクリックすると計算が始まります。
結果はパス図上に係数として表示されます。
また、右のウィンドウに各種指標値が表示されます。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/13375b90-4112-444a-8fb6-e1e650968129.png)

下の「More Results」をクリックすると結果の詳細やWald検定の結果などを確認できます。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/cc189e56-b431-45ee-abc1-dd2de0e72d7b.png)

# CUIで作ったモデルをlavaanguiで表示する。

先にlavaanで作ったモデルをlavaanguiで表示することも可能です。

```r
library(lavaangui)
library(lavaan)

data(HolzingerSwineford1939) #lavaanパッケージに含まれるデータをデモデータとして使う

model <- "
  visual  =~ x1 + x2 + x3
  textual =~ x4 + x5 + x6
  speed   =~ x7 + x8 + x9
"

fit <- cfa(model, data = HolzingerSwineford1939)
```
こうして作ったlavaanのモデルを`plot_lavaan()`関数に与えればRStudio上で以下のウィンドウが開き、パス図が表示されます。
```r
plot_lavaan(fit)
```

![16_plot_lavaan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/27d45838-fef1-4b40-be6a-a37cd6b64b93.png)

また、モデルを`lavaangui()`関数に与えれば、ブラウザ上でlavaanguiのGUIが表示され通常のlavaangui上で操作ができるようになります。

![17_lavaangui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/f6950b15-9411-4f9e-a361-dc5592de6808.png)

# 終わりに
このように、GUIで操作する商用ソフトで構造方程式モデリングを扱っていた人でも、抵抗なく使えるようになっているので、ぜひお試しください。

以上です。

Enjoy!