PLS(Partial Least Squares)モデルについて。日本語にすると部分的最小二乗回帰である。
PLSモデルは,複数の観測変数によって純粋に指標化された新たな変数が,別の複数の観測変数の背後に仮定される構成概念へ及ぼす影響の強さについて検討するモデルであると捉えることができます。(豊田秀樹『共分散構造分析[R編]』p.55)
前回と同じくlavaanパッケージに同梱されているPoliticalDemocracyのデータを使用してPLSモデルをlavaanパッケージで推定してみたい。
モデル
末尾のsemPlotパッケージで作成したパス図を先に示す。
1) x1-x3から回帰分析を行いf1を作成する。
- x1 1960年の一人当たり国民総生産(GNP)
- x2 1960年の一人当たりの無生物エネルギー消費量
- x3 1960年の産業界における労働力の割合
2) y1-y4からf1という潜在変数を作成する。
3) f1からf2への影響を見る。
コード
パッケージの読み込み
library(lavaan)
モデルの構築
model <- ' # measurement model f1 ~ x1 + x2 + x3 # regression f2 =~ y1 + y2 + y3 + y4 # measurement model f1 =~ f2 f1 ~~ 0*f1 f2 ~~ f2'
f1~~0*f1
は、の分散を0に固定することを表している。特定の値をとるようにあらかじめ指定された母数を固定母数(fixed paramteter)という。固定母数は*
の前に固定したい値を示すことで特定される。ここでは、因子の分散を0に固定することで、当該因子に誤差を仮定しないことを表現している。
fit <- sem(model=model, data=PoliticalDemocracy, estimator="ML") summary(fit, standardized=TRUE) # 標準化
結果。
lavaan 0.6-5 ended normally after 34 iterations Estimator ML Optimization method NLMINB Number of free parameters 11 Number of observations 75 Model Test User Model: Test statistic 22.240 Degrees of freedom 11 P-value (Chi-square) 0.023 Parameter Estimates: Information Expected Information saturated (h1) model Structured Standard errors Standard Latent Variables: Estimate Std.Err z-value P(>|z|) Std.lv Std.all f2 =~ y1 1.000 2.108 0.809 y2 1.400 0.200 6.994 0.000 2.951 0.753 y3 1.093 0.169 6.471 0.000 2.305 0.707 y4 1.413 0.168 8.405 0.000 2.978 0.895 f1 =~ f2 1.000 0.471 0.471 Regressions: Estimate Std.Err z-value P(>|z|) Std.lv Std.all f1 ~ x1 1.097 0.725 1.513 0.130 1.104 0.804 x2 0.237 0.399 0.595 0.552 0.239 0.359 x3 -0.120 0.319 -0.376 0.707 -0.121 -0.168 Variances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all .f1 0.000 0.000 0.000 .f2 3.458 0.864 4.001 0.000 0.778 0.778 .y1 2.343 0.509 4.600 0.000 2.343 0.345 .y2 6.665 1.303 5.116 0.000 6.665 0.434 .y3 5.309 0.989 5.366 0.000 5.309 0.500 .y4 2.198 0.719 3.058 0.002 2.198 0.199
パス図は下記のコードで出力した。rotation
というオプションで90度回転ができるようだ。edge.label.cex
というオプションで推定値の文字の大きさも調整できるようだ。いろいろ調整すればsemPlotパッケージでの作図も悪くないのかもしれない。
library(semPlot) semPaths(fit, layout = "tree", shapeLat="ellipse", whatLabels = "stand", nDigits=3, shapeMan="square", sizeMan =8, sizeLat =8, sizeLat2 =8, style = "lisrel", residScale=12, curve=2, optimizeLatRes=T,edge.color="black", rotation = 2, edge.label.cex=1)