今回扱うのは構造方程式によって作成した概念の因果を検証するモデルである。
データ
lavaanに同梱されているPoliticalDemocracyを使用する。詳細はこちらのエントリ。
y1 1960年の報道の自由に関する専門家の評価
y2 1960年の政治的反対運動の自由
y3 1960年の選挙の公平性
y4 1960年の選出立法府の有効性
y5 1965年の報道の自由に関する専門家の評価
y6 1965年の政治的反対運動の自由
y7 1965年の選挙の公平性について
Y8 1965年の選出立法府の有効性
x1 1960年の一人当たり国民総生産(GNP)
x2 1960年の一人当たりの無生物エネルギー消費量
x3 1960年の産業界における労働力の割合む
経済発展が民主化を促進するというモデルの検討を行う。
モデル
library(lavaan) model <- ' f1 =~ x1+x2+x3 f2 =~ y1+a*y2+b*y3+c*y4 f3 =~ y5+a*y6+b*y7+c*y8 f2 ~ f1 f3 ~ f1+f2 y1 ~~ d*y1 + y5 y2 ~~ e*y2 + y6 y3 ~~ f*y3 + y7 y4 ~~ g*y4 + y8 y5 ~~ d*y5 y6 ~~ e*y6 y7 ~~ h*y7 y8 ~~ i*y8 '
y1-y4とy5-y8はそれぞれ同じ項目である。1960年に計測したものと、1965年に計測したもので計測時点に違いがある。 同じ項目であるy1がy5は、時点が変わっても大きく変わらないと推測できるため、ここではそれぞれ同じ影響指標で推定される「等値制約」で推定している。
f2 =~ y1+a*y2+b*y3+c*y4 f3 =~ y5+a*y6+b*y7+c*y8
y2とy6は同じ項目なためa*という記号を付け、同じようにbとcをつける。
モデルの実行
fit <- sem(model, data=PoliticalDemocracy) summary(fit,fit.measures=T,standardized=T)
時点間の相関
等値制約を課した民主化の程度の4項目の誤差の相関は次のようになっている。
Covariances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all .y1 ~~ .y5 0.869 0.364 2.386 0.017 0.869 0.364 .y2 ~~ .y6 1.937 0.785 2.468 0.014 1.937 0.356 .y3 ~~ .y7 1.129 0.627 1.801 0.072 1.129 0.252 .y4 ~~ .y8 0.161 0.471 0.343 0.732 0.161 0.063
y1 ~~ y5: 報道の自由に関する専門家の評価
y2 ~~ y6: 政治的反対運動の自由
y3 ~~ y7: 選挙の公平性
y4 ~~ y8: 選出立法府の有効性
'y4 ~~ y8'は0.063と低く、他の3項目は0.2-0.4の間にあり、y1 ~~ y5の報道の自由が民主化の程度の予測として使用できることがわかる。
ちなみに、パス図に出力されている値は右から2列目の標準化されていない共変量である。
どうでもよいことだが、semPlotの中のコードをwhatLabels="stand"にすると相関係数を出力できる。
結果
lavaan 0.6-6 ended normally after 57 iterations Estimator ML Optimization method NLMINB Number of free parameters 29 Number of equality constraints 5 Number of observations 75 Model Test User Model: Test statistic 57.739 Degrees of freedom 42 P-value (Chi-square) 0.054 Model Test Baseline Model: Test statistic 730.654 Degrees of freedom 55 P-value 0.000 User Model versus Baseline Model: Comparative Fit Index (CFI) 0.977 Tucker-Lewis Index (TLI) 0.969 Loglikelihood and Information Criteria: Loglikelihood user model (H0) -1557.598 Loglikelihood unrestricted model (H1) -1528.728 Akaike (AIC) 3163.196 Bayesian (BIC) 3218.815 Sample-size adjusted Bayesian (BIC) 3143.174 Root Mean Square Error of Approximation: RMSEA 0.071 90 Percent confidence interval - lower 0.000 90 Percent confidence interval - upper 0.112 P-value RMSEA <= 0.05 0.222 Standardized Root Mean Square Residual: SRMR 0.067 Parameter Estimates: Standard errors Standard Information Expected Information saturated (h1) model Structured Latent Variables: Estimate Std.Err z-value P(>|z|) Std.lv Std.all f1 =~ x1 1.000 0.670 0.920 x2 2.179 0.138 15.743 0.000 1.460 0.973 x3 1.818 0.152 11.973 0.000 1.218 0.872 f2 =~ y1 1.000 2.127 0.809 y2 (a) 1.345 0.151 8.926 0.000 2.862 0.775 y3 (b) 1.205 0.133 9.066 0.000 2.563 0.739 y4 (c) 1.367 0.128 10.700 0.000 2.908 0.881 f3 =~ y5 1.000 2.056 0.799 y6 (a) 1.345 0.151 8.926 0.000 2.766 0.765 y7 (b) 1.205 0.133 9.066 0.000 2.477 0.791 y8 (c) 1.367 0.128 10.700 0.000 2.810 0.864 Regressions: Estimate Std.Err z-value P(>|z|) Std.lv Std.all f2 ~ f1 1.420 0.379 3.752 0.000 0.447 0.447 f3 ~ f1 0.563 0.210 2.676 0.007 0.184 0.184 f2 0.835 0.069 12.060 0.000 0.864 0.864 Covariances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all .y1 ~~ .y5 0.869 0.364 2.386 0.017 0.869 0.364 .y2 ~~ .y6 1.937 0.785 2.468 0.014 1.937 0.356 .y3 ~~ .y7 1.129 0.627 1.801 0.072 1.129 0.252 .y4 ~~ .y8 0.161 0.471 0.343 0.732 0.161 0.063 Variances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all .y1 (d) 2.389 0.368 6.488 0.000 2.389 0.346 .y2 (e) 5.436 0.791 6.869 0.000 5.436 0.399 .y3 (f) 5.457 1.012 5.394 0.000 5.457 0.454 .y4 (g) 2.448 0.637 3.845 0.000 2.448 0.225 .y5 (d) 2.389 0.368 6.488 0.000 2.389 0.361 .y6 (e) 5.436 0.791 6.869 0.000 5.436 0.415 .y7 (h) 3.666 0.708 5.180 0.000 3.666 0.374 .y8 (i) 2.680 0.629 4.258 0.000 2.680 0.253 .x1 0.081 0.019 4.173 0.000 0.081 0.153 .x2 0.121 0.070 1.730 0.084 0.121 0.054 .x3 0.467 0.090 5.175 0.000 0.467 0.239 f1 0.449 0.087 5.175 0.000 1.000 1.000 .f2 3.619 0.840 4.310 0.000 0.800 0.800 .f3 0.332 0.189 1.758 0.079 0.079 0.079
プロット
パス図の出力のコードは以下。
library(semPlot) semPaths(fit,layout="tree",whatLabels="est", style="lisrel",sizeMan=7,sizeLat=10,sizeLat2=8, edge.color="black",curve=1,curvePivot=F,edge.label.cex=1.2)