Rによるパス解析
エクセル統計で回帰分析

奥村太一 (2015.11.28)

概要
[データ]
[分析]
左下のデータは、25人の生徒について得られた学力テスト、学習意欲尺度、学校生活適応度尺度、自尊感情尺度それぞれの得点を示したものである。1 ここでは、パス解析によりこのデータを右下
http://www.juen.ac.jp/lab/
操作の様子は、YouTubeでも見られます。のパス図に示されたモデルに当てはめることにする。
okumura/data/regpath.csv
http://youtu.be/ONELpgaTcLA
v1

e1

1e2

1

意欲

学力b4

v2

v4

b1

b3

自尊b2

適応1v3

e3

※パス係数はb、分散はvで表している。eは残差である。

データの読み込み
まず、このデータを data01 として読み込んでおく。2
data01 <- read.csv(file="/Users/Name/Desktop/regpath.csv",header=T,
fileEncoding="Shift-JIS")data01

パッケージのインストールと読み込み
Rでパス解析を実行するには、専用のパッケージをインストールしておく必要がある。パス解析を含め構造方程式モデリングを実行するためのパッケージとしては、sem や lavaan などが知られている。ここでは、sem パッケージを用いることにする。
パッケージのダウンロードとインストールパッケージをウェブ上でダウンロードし、インストールする関数は install.packages() である。
カッコ内にパッケージ名を“”でくくって指定する。sem パッケージをインストールするコマンドは以下の通りとなる。
install.packages("sem")

1 最初の5名分だけを表示してある。なお、このデータは http://www.juen.ac.jp/lab/okumura/data.html から”regpath.csv” としてダウンロード可能である (リンクを右クリックして保存)。
2 外部ファイルの読み込みについては、回帰分析のレジュメを参照のこと。
ページ 1
1//42このコマンドを実行すると、上のようにCRANのミラーサイト一覧が別ウィンドウで表示される。
どれを選んでもよいが、とりあえずここでは Japan (Tokyo) を選択しておく。いずれかを選択して [OK] ボタンをクリックすると、Rに sem パッケージがダウンロード、インストールされるはずである。
パッケージの読み込みインストールしたパッケージを利用するには、R内にそれを呼び出す (ロードする) 必要がある。
この関数は library() である。カッコ内にパッケージ名を“”でくくって指定する。sem パッケージをロードするコマンドは以下の通りとなる。正常にロードされれば、特に出力はされない。
library("sem")semパッケージの利用
semパッケージを用いてパス解析を実行するステップは、①モデルの指定、②モデルの当てはめ、 ③結果の表示、の3つに大きく分けられる。
モデルの指定
ここでは、モデルの指定に関数 specifyModel() を用いることにする。この関数では、単方向のパスを “->” で、双方向のパスを “<->” で表す。今回のモデルでは双方向のパスはないが、左右に同じ変数を指定して変数の分散を表す際に用いる。
specifyModel()モデルの指定を行う関数。
->

単方向のパスとその係数を指定する。([独立変数] -> [従属変数])<->

双方向のパスとその係数 (共分散/相関係数) を指定する。左右同じ変数の場
合は、内生変数の残差分散か外生変数の分散を指定することになる。

上記のモデルを指定するコマンドは、以下の通りである (右は実行結果)。
model01 <- specifyModel()意欲 -> 学力, b1, NA
意欲 -> 適応, b2, NA
適応 -> 学力, b3, NA
学力 -> 自尊, b4, NA
学力 <-> 学力, v1, NA
自尊 <-> 自尊, v2, NA
適応 <-> 適応, v3, NA
意欲 <-> 意欲, v4, NA> model01 <- specifyModel()1: 意欲 -> 学力, b1, NA
2: 意欲 -> 適応, b2, NA
3: 適応 -> 学力, b3, NA
4: 学力 -> 自尊, b4, NA
5: 学力 <-> 学力, v1, NA
6: 自尊 <-> 自尊, v2, NA
7: 適応 <-> 適応, v3, NA
8: 意欲 <-> 意欲, v4, NA
9:Read 8 records>!

<注：最終行の後は1行空けること>

specifyModel() に続く各行では、モデルに含まれるパラメタ (パス係数や分散・共分散など) を“パスの指定,係数のラベル,値の指定” の順で記述する。3
例えば、“意欲 -> 学力, b1, NA” は、[意欲] から [学力] へ単方向のパスを引き、そのパス係数にb1 というラベルをふること、またb1の値は未知 (NA: not available) であることを表している。
同様に、“学力 <-> 学力, v1, NA” は、[学力] と [学力] の間に双方向のパスを引き、そのパス係数に v1 というラベルをふること、またv1の値は未知であることを表している。この場合は “<->”3 モデルの指定とそれ以外のコマンドを区別するために、モデルを記述した後は1行空けておかないといけないので注意が必要である。

ページ 2/4

が同じ変数同士に引かれているので、v1は [学力] のうち [意欲] と [適応] で予測できなかった残差の分散を意味することになる。なお、このモデルでは [意欲] は外生変数であり、この場合のv4は [意欲] 自身の分散となる。冒頭のパス図とコマンドとを見比べて、対応を確認して欲しい。
以上のプログラムを実行することで、冒頭のパス図で指定したモデルが model01 というオブジェクトに代入される。
モデルの当てはめ
次に、model01 に代入されたモデルを、data01に当てはめる。ここで、パス解析を実行するには生データではなく、各変数の分散と変数間の共分散、そしてデータの規模 (人数) が分かれば十分である。そこで、まず関数 cov() を用いて、data01の2〜5列目に格納されている4つの変数について、分散と共分散を算出しておくことにする。ここでは、それを cov01 に代入しておく。
cov01 <- cov(data01[,2:5])
cov01

cov01 の中身は、以下のような行列 (分散共分散行列) となっている。対角成分が分散、非対角成分が共分散である。これが次にパス解析を実行する際のデータとなる。
学力意欲
適応自尊
学力 457.00000 51.950000 39.0333333 55.1500000
意欲 51.95000 17.026667 6.2933333 6.2950000
適応 39.03333 6.293333 14.2266667 0.2033333
自尊 55.15000 6.295000 0.2033333 28.6566667

モデルの当てはめには、関数 sem() を用いる。この関数には多くの引数があるが、ここでは次の3つを知っておけば問題ない。
sem()

モデルをデータに当てはめて分析を実行する関数。
model=データに当てはめるモデルを特定する。

S=データとなる分散共分散行列を指定する。

N=データの規模 (人数) を指定する。

すでに作成したパス解析のモデル model01 をデータ (分散共分散行列) cov01 に当てはめる場合のコマンドは、以下のようになる。ここで、nrow() は、データフレームが何行あるか (つまり何人分のデータがあるか) を算出する関数である。分析結果は、fit01 に代入されることになる。
fit01 <- sem(model=model01, S=cov01, N=nrow(data01))

結果の表示
関数 summary() によって、fit01に代入された結果を表示させることができる。ただし、引数rsquare=T は、各内生変数について決定係数 R2 を表示させることを、fit.indices=c("GFI",…) はc() 内で指定された適合度指標 (指標名を“”に入れ、カンマで区切って並べる) を表示させる指示である。また、標準化されたパス係数については、関数 stdCoef() によって得られる。
summary(fit01,rsquare=T,fit.indices=c("GFI","AGFI","SRMR","RMSEA","AIC","BIC"))
stdCoef(fit01)

ページ 3/4

!
上記のプログラムを実行すると、以下の通り分析結果が得られる。4モデルの適合度

決定係数

Model Chisquare = 2.195402
Df = 2 Pr(>Chisq) = 0.3336373
Goodness-of-fit index = 0.9581224
Adjusted goodness-of-fit index = 0.7906121
RMSEA index = 0.06380338
90% CI: (NA, 0.4152706)
SRMR = 0.07058997
AIC = 18.1954
BIC = -4.24235(…一部省略…)
R-square for Endogenous Variables
学力適応自尊0.4192 0.1635 0.2322!
パラメータの推定値
パス係数
分散共分散(相関係数)

Parameter Estimates
Estimate
Std Error
z value Pr(>|z|)b12.4351462 0.88122407 2.763368 0.0057208266 学力 <--- 意欲
b2
0.3696163 0.17065265 2.165898 0.0303189609 適応 <--- 意欲
b3
1.6664583 0.96405007 1.728601 0.0838804592 学力 <--- 適応b4
0.1206783 0.04478783 2.694445 0.0070505997 自尊 <--- 学力v1 265.4467334 76.62787148 3.464102 0.0005320055 学力 <--> 学力
v2 22.0012564 6.35121565 3.464102 0.0005320055 自尊 <--> 自尊v3 11.9005482 3.43539234 3.464102 0.0005320055 適応 <--> 適応v4 17.0266667 4.91517529 3.464102 0.0005320055 意欲 <--> 意欲

標準化された係数
b1b2
b3b4
v1v2v3v4

Std. Estimate
0.4700367
0.4043564
0.2940275
0.4819196
0.5808462
0.7677535
0.8364959
1.0000000

分析結果

Rによるパス解析

モデルの適合度適合度検定の結果、このモデルが正しくないという帰無仮説は5%水準で棄却されなかった (χ2(2)奥村太一 (2015.11.28)
エクセル統計で回帰分析= 2.195, p = .334)。また、適合度指標の値は、このモデルがデータによく適合していることを示している (GFI=.958, AGFI=.791, RMSEA=.064, SRMR=.071)。

概要

決定係数
[データ]
[分析]
左下のデータは、25人の生徒について得られた学力テスト、学習意欲尺度、学校生活適応度尺度、
2
内生変数[学力]、[適応]、[自尊]の決定係数は、それぞれ.164, .232であった。
自尊感情尺度それぞれの得点を示したものである。R1 s=.419,
ここでは、パス解析によりこのデータを右下
http://www.juen.ac.jp/lab/
操作の様子は、YouTubeでも見られます。のパス図に示されたモデルに当てはめることにする。
okumura/data/regpath.csv
http://youtu.be/ONELpgaTcLA
パラメータの推定値
R2=.419

ここには、パス係数、内生変数の残差分散、外生変数の分散の値が検定結果とともに表示されている。[適e11応]から[意欲]へのパスを除き、パス係数はすべて5%
右図は、パス図に分析結果 (標準化解) を書き入れたものである。パスにふられた数値がパス係数、内生e2

1

意欲

学力.482水準で有意となっている。

.470.294.404

自尊

適応

R2=.232

R2=.1641

e3

変数の肩にふられているのが決定係数の値である。 ※パス係数はb、分散はvで表している。eは残差である。

データの読み込みv1〜v3 の標準化解をよく見てみよう。これらは、決定係数 R2 とのここで、内生変数の残差分散2 という関係にあることがわかる。従って、標準化解を報告する場合は、決定係数か残差間に 1-R
まず、このデータを.+>+ pとして読み込んでおく。2分散かのいずれか一方を記載するので十分ということになる。標準化解においては外生変数の分.+>+ pp</+.-=@036/ '=/<="+7/</1:+>2-=@2/+./<&
散はもちろん1であるから、[意欲]の分散(v4)/=5>9:については報告するまでもない。
ppppppppppppppppppp036/8-9.381%230> %.+>+4 標準化された結果については枠内に並べて記載した。

ページ 4/4
パッケージのインストールと読み込み

Rでパス解析を実行するには、専用のパッケージをインストールしておく必要がある。パス解析を