日誌

Rメモ >> Article details

2015/07/08

lavaanで確認的(確証的/検証的)因子分析:confirmatory factor analysis(CFA)

Tweet ThisSend to Facebook | by mtsuchi
※結果出力部分が折り返して表示される可能性があるので,そうなった場合
ブラウザを画面いっぱいに開くか表示フォントの大きさを変えるかの対処が推奨です。



いつもどおり,パッケージpsychのbfiデータを使います。
bfiデータについてはこちら参照

以下のパッケージを読み込みます。

library(psych)
library(lavaan)

まず,どういうモデルを解析するのかの指定です。
bfimodelというオブジェクトに' 'で囲まれた部分の
式を格納します。最初と最後を' 'で囲むのを忘れないように。

bfimodel <-  'A  =~ A1 + A2 + A3 + A4 + A5
              C  =~ C1 + C2 + C3 + C4 + C5
              E  =~ E1 + E2 + E3 + E4 + E5
              N  =~ N1 + N2 + N3 + N4 + N5
              O  =~ O1 + O2 + O3 + O4 + O5'


A-Oの潜在変数(因子)から,A1-A5~O1-O5の観測変数にそれぞれ
パスが引かれているイメージです。デフォルトでは,因子間相関
を仮定してます。

そして次がCFAの実行です。解析結果をオブジェクトのfit
に格納します。

fit <- cfa(bfimodel, data = bfi)

結果の出力は次のようにすると基本的に必要な情報がすべて
出てきます。

summary(fit, fit.measures = TRUE, standardized = TRUE)

lavaan (0.5-18) converged normally after  55 iterations

                                                  Used       Total
  Number of observations                          2436        2800

  Estimator                                         ML
  Minimum Function Test Statistic             4165.467
  Degrees of freedom                               265
  P-value (Chi-square)                           0.000

Model test baseline model:

  Minimum Function Test Statistic            18222.116
  Degrees of freedom                               300
  P-value                                        0.000

User model versus baseline model:

  Comparative Fit Index (CFI)                    0.782
  Tucker-Lewis Index (TLI)                       0.754

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -99840.238
  Loglikelihood unrestricted model (H1)     -97757.504

  Number of free parameters                         60
  Akaike (AIC)                              199800.476
  Bayesian (BIC)                            200148.363
  Sample-size adjusted Bayesian (BIC)       199957.729

Root Mean Square Error of Approximation:

  RMSEA                                          0.078
  90 Percent Confidence Interval          0.076  0.080
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.075

Parameter estimates:

  Information                                 Expected
  Standard Errors                             Standard

                   Estimate  Std.err  Z-value  P(>|z|)   Std.lv  Std.all
Latent variables:
  A =~
    A1                1.000                               0.484    0.344
    A2               -1.579    0.108  -14.650    0.000   -0.764   -0.648
    A3               -2.030    0.134  -15.093    0.000   -0.983   -0.749
    A4               -1.564    0.115  -13.616    0.000   -0.757   -0.510
    A5               -1.804    0.121  -14.852    0.000   -0.873   -0.687
  C =~
    C1                1.000                               0.680    0.551
    C2                1.148    0.057   20.152    0.000    0.781    0.592
    C3                1.036    0.054   19.172    0.000    0.705    0.546
    C4               -1.421    0.065  -21.924    0.000   -0.967   -0.702
    C5               -1.489    0.072  -20.694    0.000   -1.012   -0.620
  E =~
    E1                1.000                               0.920    0.564
    E2                1.226    0.051   23.899    0.000    1.128    0.699
    E3               -0.921    0.041  -22.431    0.000   -0.847   -0.627
    E4               -1.121    0.047  -23.977    0.000   -1.031   -0.703
    E5               -0.808    0.039  -20.648    0.000   -0.743   -0.553
  N =~
    N1                1.000                               1.300    0.825
    N2                0.947    0.024   39.899    0.000    1.230    0.803
    N3                0.884    0.025   35.919    0.000    1.149    0.721
    N4                0.692    0.025   27.753    0.000    0.899    0.573
    N5                0.628    0.026   24.027    0.000    0.816    0.503
  O =~
    O1                1.000                               0.635    0.564
    O2               -1.020    0.068  -14.962    0.000   -0.648   -0.418
    O3                1.373    0.072   18.942    0.000    0.872    0.724
    O4                0.437    0.048    9.160    0.000    0.277    0.233
    O5               -0.960    0.060  -16.056    0.000   -0.610   -0.461

Covariances:
  A ~~
    C                -0.110    0.012   -9.254    0.000   -0.334   -0.334
    E                 0.304    0.025   12.293    0.000    0.683    0.683
    N                 0.141    0.018    7.712    0.000    0.223    0.223
    O                -0.093    0.011   -8.446    0.000   -0.303   -0.303
  C ~~
    E                -0.224    0.020  -11.121    0.000   -0.357   -0.357
    N                -0.250    0.025  -10.117    0.000   -0.283   -0.283
    O                 0.130    0.014    9.190    0.000    0.301    0.301
  E ~~
    N                 0.292    0.032    9.131    0.000    0.244    0.244
    O                -0.265    0.021  -12.347    0.000   -0.453   -0.453
  N ~~
    O                -0.093    0.022   -4.138    0.000   -0.112   -0.112

Variances:
    A1                1.745    0.052                      1.745    0.882
    A2                0.807    0.028                      0.807    0.580
    A3                0.754    0.032                      0.754    0.438
    A4                1.632    0.051                      1.632    0.740
    A5                0.852    0.032                      0.852    0.528
    C1                1.063    0.035                      1.063    0.697
    C2                1.130    0.039                      1.130    0.650
    C3                1.170    0.039                      1.170    0.702
    C4                0.960    0.040                      0.960    0.507
    C5                1.640    0.059                      1.640    0.615
    E1                1.814    0.058                      1.814    0.682
    E2                1.332    0.049                      1.332    0.512
    E3                1.108    0.038                      1.108    0.607
    E4                1.088    0.041                      1.088    0.506
    E5                1.251    0.040                      1.251    0.694
    N1                0.793    0.037                      0.793    0.320
    N2                0.836    0.036                      0.836    0.356
    N3                1.222    0.043                      1.222    0.481
    N4                1.654    0.052                      1.654    0.672
    N5                1.969    0.060                      1.969    0.747
    O1                0.865    0.032                      0.865    0.682
    O2                1.990    0.063                      1.990    0.826
    O3                0.691    0.039                      0.691    0.476
    O4                1.346    0.040                      1.346    0.946
    O5                1.380    0.045                      1.380    0.788
    A                 0.234    0.030                      1.000    1.000
    C                 0.463    0.036                      1.000    1.000
    E                 0.846    0.062                      1.000    1.000
    N                 1.689    0.073                      1.000    1.000
    O                 0.404    0.033                      1.000    1.000


因子から各項目への標準化係数はLatent variables:のStd.all
(完全標準化解)の列を見ます。

必要な出力だけ選びたい場合は

fitMeasures(fit,c("cfi","tli","rmsea","rmsea.ci.lower","rmsea.ci.upper"))

 
      cfi            tli        rmsea   rmsea.ci.lower rmsea.ci.upper
     0.782          0.754       0.078          0.076          0.080


parameterEstimates(fit, standardized = TRUE)

   lhs op rhs    est    se       z pvalue ci.lower ci.upper std.lv std.all std.nox
1    A =~  A1  1.000 0.000      NA     NA    1.000    1.000  0.484   0.344   0.344
2    A =~  A2 -1.579 0.108 -14.650      0   -1.790   -1.368 -0.764  -0.648  -0.648
3    A =~  A3 -2.030 0.134 -15.093      0   -2.293   -1.766 -0.983  -0.749  -0.749
4    A =~  A4 -1.564 0.115 -13.616      0   -1.789   -1.339 -0.757  -0.510  -0.510
5    A =~  A5 -1.804 0.121 -14.852      0   -2.042   -1.566 -0.873  -0.687  -0.687
6    C =~  C1  1.000 0.000      NA     NA    1.000    1.000  0.680   0.551   0.551
7    C =~  C2  1.148 0.057  20.152      0    1.036    1.259  0.781   0.592   0.592
8    C =~  C3  1.036 0.054  19.172      0    0.930    1.142  0.705   0.546   0.546
9    C =~  C4 -1.421 0.065 -21.924      0   -1.548   -1.294 -0.967  -0.702  -0.702
10   C =~  C5 -1.489 0.072 -20.694      0   -1.630   -1.348 -1.012  -0.620  -0.620
11   E =~  E1  1.000 0.000      NA     NA    1.000    1.000  0.920   0.564   0.564
12   E =~  E2  1.226 0.051  23.899      0    1.125    1.326  1.128   0.699   0.699
13   E =~  E3 -0.921 0.041 -22.431      0   -1.002   -0.841 -0.847  -0.627  -0.627
14   E =~  E4 -1.121 0.047 -23.977      0   -1.213   -1.029 -1.031  -0.703  -0.703
15   E =~  E5 -0.808 0.039 -20.648      0   -0.884   -0.731 -0.743  -0.553  -0.553
16   N =~  N1  1.000 0.000      NA     NA    1.000    1.000  1.300   0.825   0.825
17   N =~  N2  0.947 0.024  39.899      0    0.900    0.993  1.230   0.803   0.803
18   N =~  N3  0.884 0.025  35.919      0    0.836    0.932  1.149   0.721   0.721
19   N =~  N4  0.692 0.025  27.753      0    0.643    0.741  0.899   0.573   0.573
20   N =~  N5  0.628 0.026  24.027      0    0.577    0.679  0.816   0.503   0.503
21   O =~  O1  1.000 0.000      NA     NA    1.000    1.000  0.635   0.564   0.564
22   O =~  O2 -1.020 0.068 -14.962      0   -1.154   -0.887 -0.648  -0.418  -0.418
23   O =~  O3  1.373 0.072  18.942      0    1.231    1.515  0.872   0.724   0.724
24   O =~  O4  0.437 0.048   9.160      0    0.343    0.530  0.277   0.233   0.233
25   O =~  O5 -0.960 0.060 -16.056      0   -1.077   -0.842 -0.610  -0.461  -0.461
26  A1 ~~  A1  1.745 0.052  33.725      0    1.644    1.846  1.745   0.882   0.882
27  A2 ~~  A2  0.807 0.028  28.396      0    0.751    0.862  0.807   0.580   0.580
28  A3 ~~  A3  0.754 0.032  23.339      0    0.690    0.817  0.754   0.438   0.438
29  A4 ~~  A4  1.632 0.051  31.796      0    1.531    1.732  1.632   0.740   0.740
30  A5 ~~  A5  0.852 0.032  26.800      0    0.789    0.914  0.852   0.528   0.528
31  C1 ~~  C1  1.063 0.035  30.073      0    0.993    1.132  1.063   0.697   0.697
32  C2 ~~  C2  1.130 0.039  28.890      0    1.053    1.207  1.130   0.650   0.650
33  C3 ~~  C3  1.170 0.039  30.194      0    1.094    1.246  1.170   0.702   0.702
34  C4 ~~  C4  0.960 0.040  24.016      0    0.882    1.038  0.960   0.507   0.507
35  C5 ~~  C5  1.640 0.059  27.907      0    1.524    1.755  1.640   0.615   0.615
36  E1 ~~  E1  1.814 0.058  31.047      0    1.699    1.928  1.814   0.682   0.682
37  E2 ~~  E2  1.332 0.049  26.928      0    1.235    1.429  1.332   0.512   0.512
38  E3 ~~  E3  1.108 0.038  29.522      0    1.035    1.182  1.108   0.607   0.607
39  E4 ~~  E4  1.088 0.041  26.732      0    1.008    1.167  1.088   0.506   0.506
40  E5 ~~  E5  1.251 0.040  31.258      0    1.173    1.330  1.251   0.694   0.694
41  N1 ~~  N1  0.793 0.037  21.575      0    0.721    0.865  0.793   0.320   0.320
42  N2 ~~  N2  0.836 0.036  23.458      0    0.766    0.906  0.836   0.356   0.356
43  N3 ~~  N3  1.222 0.043  28.271      0    1.138    1.307  1.222   0.481   0.481
44  N4 ~~  N4  1.654 0.052  31.977      0    1.553    1.756  1.654   0.672   0.672
45  N5 ~~  N5  1.969 0.060  32.889      0    1.851    2.086  1.969   0.747   0.747
46  O1 ~~  O1  0.865 0.032  27.216      0    0.803    0.927  0.865   0.682   0.682
47  O2 ~~  O2  1.990 0.063  31.618      0    1.867    2.114  1.990   0.826   0.826
48  O3 ~~  O3  0.691 0.039  17.717      0    0.615    0.767  0.691   0.476   0.476
49  O4 ~~  O4  1.346 0.040  34.036      0    1.269    1.424  1.346   0.946   0.946
50  O5 ~~  O5  1.380 0.045  30.662      0    1.292    1.469  1.380   0.788   0.788
51   A ~~   A  0.234 0.030   7.839      0    0.176    0.293  1.000   1.000   1.000
52   C ~~   C  0.463 0.036  12.810      0    0.392    0.533  1.000   1.000   1.000
53   E ~~   E  0.846 0.062  13.693      0    0.725    0.968  1.000   1.000   1.000
54   N ~~   N  1.689 0.073  23.034      0    1.546    1.833  1.000   1.000   1.000
55   O ~~   O  0.404 0.033  12.156      0    0.339    0.469  1.000   1.000   1.000
56   A ~~   C -0.110 0.012  -9.254      0   -0.133   -0.087 -0.334  -0.334  -0.334
57   A ~~   E  0.304 0.025  12.293      0    0.256    0.352  0.683   0.683   0.683
58   A ~~   N  0.141 0.018   7.712      0    0.105    0.176  0.223   0.223   0.223
59   A ~~   O -0.093 0.011  -8.446      0   -0.115   -0.072 -0.303  -0.303  -0.303
60   C ~~   E -0.224 0.020 -11.121      0   -0.263   -0.184 -0.357  -0.357  -0.357
61   C ~~   N -0.250 0.025 -10.117      0   -0.299   -0.202 -0.283  -0.283  -0.283
62   C ~~   O  0.130 0.014   9.190      0    0.102    0.158  0.301   0.301   0.301
63   E ~~   N  0.292 0.032   9.131      0    0.229    0.354  0.244   0.244   0.244
64   E ~~   O -0.265 0.021 -12.347      0   -0.307   -0.223 -0.453  -0.453  -0.453
65   N ~~   O -0.093 0.022  -4.138      0   -0.136   -0.049 -0.112  -0.112  -0.112


修正指標を出すには以下のようにします。全部出すと長いので,
引数のminimum.value = 100で修正指標が100以上の値に限定します。

modificationIndices(fit, minimum.value = 100)

   lhs op rhs      mi    epc sepc.lv sepc.all sepc.nox
1    C =~  E5 121.499  0.504   0.343    0.255    0.255
2    E =~  A5 108.587 -0.488  -0.449   -0.354   -0.354
3    E =~  N4 200.790  0.487   0.448    0.285    0.285
4    E =~  O3 114.202 -0.429  -0.395   -0.328   -0.328
5    E =~  O4 113.863  0.372   0.343    0.287    0.287
6    N =~  C2 107.010  0.219   0.285    0.216    0.216
7    N =~  C5 108.754  0.271   0.352    0.216    0.216
8    O =~  E3 153.715  0.672   0.427    0.316    0.316
9    O =~  E4 122.558 -0.636  -0.404   -0.276   -0.276
10  A1 ~~  A2 101.428 -0.276  -0.276   -0.166   -0.166
11  C1 ~~  C2 106.979  0.288   0.288    0.177    0.177
12  E2 ~~  O4 104.693  0.310   0.310    0.161    0.161
13  N1 ~~  N2 418.812  0.841   0.841    0.348    0.348
14  N3 ~~  N4 134.104  0.403   0.403    0.161    0.161


これを見ると,項目N1とN2の間のmiが418.812なので,
誤差項の相関が特に高いことが分かります。

N1 すぐに怒る
N2 すぐにイライラする

という項目なので,確かに同じようなことを聞いている項目です。
この相関を仮定したモデルbfimodel2をさらに作ってみます。


bfimodel2 <- '
A  =~ A1 + A2 + A3 + A4 + A5
C  =~ C1 + C2 + C3 + C4 + C5
E  =~ E1 + E2 + E3 + E4 + E5
N  =~ N1 + N2 + N3 + N4 + N5
O  =~ O1 + O2 + O3 + O4 + O5

# residual correlations
N1~~N2
'

今度はfit2というオブジェクトにCFAの解析結果を
格納します。

fit2 <- cfa(bfimodel2, data = bfi)
fitMeasures(fit2,c("cfi","tli","rmsea","rmsea.ci.lower","rmsea.ci.upper"))


         cfi            tli          rmsea rmsea.ci.lower rmsea.ci.upper
       0.802          0.775          0.074          0.072          0.076


このように,少し適合度が改善しましたがまだあまりよくない感じです。
22:35 | Impressed! | Voted(0) | Comment(0)