今回扱うのは構造方程式によって作成した概念の因果を検証するモデルである。
データ
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)