井出草平の研究ノート

共分散行列からモデルを推定する

lavaanは共分散行列からもモデルの推定ができる。

http://lavaan.ugent.be/tutorial/cov.htmllavaan.ugent.be

例題はこの論文のようである。 https://www.jstor.org/stable/270754?seq=1

共分散行列を作成し、変数に名前をつける。 getCovコマンドを使用する。

library(lavaan)
lower <- '
 11.834
  6.947   9.364
  6.819   5.091  12.532
  4.783   5.028   7.495   9.986
 -3.839  -3.889  -3.841  -3.625  9.610
-21.899 -18.831 -21.748 -18.775 35.522 450.288 '

wheaton.cov <- 
    getCov(lower, names = c("anomia67", "powerless67", 
                            "anomia71", "powerless71",
                            "education", "sei"))

下記のようなデータマトリックスができる。

            anomia67 powerless67 anomia71 powerless71 education     sei
anomia67      11.834       6.947    6.819       4.783    -3.839 -21.899
powerless67    6.947       9.364    5.091       5.028    -3.889 -18.831
anomia71       6.819       5.091   12.532       7.495    -3.841 -21.748
powerless71    4.783       5.028    7.495       9.986    -3.625 -18.775
education     -3.839      -3.889   -3.841      -3.625     9.610  35.522
sei          -21.899     -18.831  -21.748     -18.775    35.522 450.288

下記のようなモデルを作成する。

f:id:iDES:20200523151429p:plain

sample.nobsは標本数を指定するコマンド。共分散行列から分析すると標本数が不明なため。

# classic wheaton et al model
wheaton.model <- '
  # latent variables
    ses     =~ education + sei
    alien67 =~ anomia67 + powerless67
    alien71 =~ anomia71 + powerless71
  # regressions
    alien71 ~ alien67 + ses
    alien67 ~ ses
  # correlated residuals
    anomia67 ~~ anomia71
    powerless67 ~~ powerless71
'
fit <- sem(wheaton.model, 
           sample.cov = wheaton.cov, 
           sample.nobs = 932)
summary(fit, standardized = TRUE)

結果。

lavaan 0.6-5 ended normally after 84 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         17
                                                      
  Number of observations                           932
                                                      
Model Test User Model:
                                                      
  Test statistic                                 4.735
  Degrees of freedom                                 4
  P-value (Chi-square)                           0.316

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
  ses =~                                                                
    education         1.000                               2.607    0.842
    sei               5.219    0.422   12.364    0.000   13.609    0.642
  alien67 =~                                                            
    anomia67          1.000                               2.663    0.774
    powerless67       0.979    0.062   15.895    0.000    2.606    0.852
  alien71 =~                                                            
    anomia71          1.000                               2.850    0.805
    powerless71       0.922    0.059   15.498    0.000    2.628    0.832

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  alien71 ~                                                             
    alien67           0.607    0.051   11.898    0.000    0.567    0.567
    ses              -0.227    0.052   -4.334    0.000   -0.207   -0.207
  alien67 ~                                                             
    ses              -0.575    0.056  -10.195    0.000   -0.563   -0.563

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .anomia67 ~~                                                           
   .anomia71          1.623    0.314    5.176    0.000    1.623    0.356
 .powerless67 ~~                                                        
   .powerless71       0.339    0.261    1.298    0.194    0.339    0.121

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .education         2.801    0.507    5.525    0.000    2.801    0.292
   .sei             264.597   18.126   14.597    0.000  264.597    0.588
   .anomia67          4.731    0.453   10.441    0.000    4.731    0.400
   .powerless67       2.563    0.403    6.359    0.000    2.563    0.274
   .anomia71          4.399    0.515    8.542    0.000    4.399    0.351
   .powerless71       3.070    0.434    7.070    0.000    3.070    0.308
    ses               6.798    0.649   10.475    0.000    1.000    1.000
   .alien67           4.841    0.467   10.359    0.000    0.683    0.683
   .alien71           4.083    0.404   10.104    0.000    0.503    0.503