lavaanパッケージを用いてMIMICモデルを推定する[R]

複数の観測変数によって1つの構成概念が規定され、その構成概念が別の観測変数群に影響を与えているようなモデルをMIMIC(Multiple Indicator Multiple Cause)モデルと呼ぶ。

前回と同じくPoliticalDemocracyのデータを使用してPLSモデルをlavaanパッケージで推定してみたい。

f:id:iDES:20200610214258p:plain

1.x1-x3から潜在変数f(経済)を作成。
x1 1960年の一人当たり国民総生産(GNP)
x2 1960年の一人当たりの無生物エネルギー消費量
x3 1960年の産業界における労働力の割合

2.y1-y4の4つの観測変数が潜在変数f(経済)に影響を与える。
y1 1960年の報道の自由に関する専門家の評価
y2 1960年の政治的反対運動の自由
y3 1960年の選挙の公平性
y4 1960年の選出立法府の有効性

モデルの作成

library(lavaan)
model <- '
    f =~ x1 + x2 + x3 # Latent Variables
    f ~ y1 + y2 + y3 + y4' # Regression

分析

fit <- sem(model=model, data=PoliticalDemocracy, estimator="ML")
summary(fit, standardized=TRUE) # 標準化

結果

lavaan 0.6-5 ended normally after 25 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         10
                                                      
  Number of observations                            75
                                                      
Model Test User Model:
                                                      
  Test statistic                                 9.217
  Degrees of freedom                                 8
  P-value (Chi-square)                           0.324

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
  f =~                                                                  
    x1                1.000                               0.672    0.923
    x2                2.164    0.138   15.725    0.000    1.455    0.969
    x3                1.814    0.150   12.077    0.000    1.219    0.873

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  f ~                                                                   
    y1                0.015    0.043    0.360    0.719    0.023    0.059
    y2               -0.033    0.026   -1.263    0.207   -0.049   -0.193
    y3                0.008    0.030    0.268    0.789    0.012    0.039
    y4                0.109    0.036    3.069    0.002    0.163    0.542

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .x1                0.078    0.019    4.033    0.000    0.078    0.147
   .x2                0.136    0.071    1.905    0.057    0.136    0.060
   .x3                0.463    0.090    5.143    0.000    0.463    0.237
   .f                 0.344    0.067    5.164    0.000    0.762    0.762

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.5, optimizeLatRes=T,edge.color="black",
         rotation = 2, edge.label.cex=1)

説明モデルとしていまいちなので、もう少し良い例を見つけないといけない気がする。