井出草平の研究ノート

lavaanで順序カテゴリカル因子分析[R]

IPIP-NEOデータの呼び出しと格納

library("psych")
data(bfi) # IPIP-NEOデータ
d1 <- bfi[1:10] # 因子分析に使用するのは1~10列目。2つの因子のみ。
d1 <-na.omit(d1) # 欠損値のあるケースを削除

モデルと実行

library(lavaan)
model <- '
   Ag =~ A1 + A2 + A3 + A4 + A5
   Co =~ C1 + C2 + C3 + C4 + C5 '
fit <- cfa(model, d1, std.lv=TRUE, 
   ordered=c(paste("A", 1:5, sep=""),paste("C", 1:5, sep="")))
summary(fit)

orderedで指定するのは順序カテゴリの変数である。 ordered=c("A1","A2","A3","A4","A5","C1","C2","C3","C4","C5"))と書いてもかまわないが、上のようにpaste関数を使うと少し楽にかけるかもしれない。どちらにしろダブルクォーテーションだけは忘れないようにしないといけない。

結果

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of free parameters                         61
                                                      
  Number of observations                          2632
                                                      
Model Test User Model:
                                              Standard      Robust
  Test Statistic                               449.278     593.496
  Degrees of freedom                                34          34
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  0.764
  Shift parameter                                            5.648
       simple second-order correction                             

Parameter Estimates:

  Standard errors                           Robust.sem
  Information                                 Expected
  Information saturated (h1) model        Unstructured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  Ag =~                                               
    A1                0.408    0.019   21.980    0.000
    A2               -0.722    0.013  -54.306    0.000
    A3               -0.787    0.012  -65.032    0.000
    A4               -0.570    0.017  -33.417    0.000
    A5               -0.676    0.014  -49.721    0.000
  Co =~                                               
    C1                0.595    0.016   38.092    0.000
    C2                0.664    0.014   45.869    0.000
    C3                0.593    0.015   39.140    0.000
    C4               -0.722    0.014  -51.692    0.000
    C5               -0.644    0.014  -44.940    0.000
    
Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)
    A1|t1            -0.439    0.025  -17.362    0.000
    A1|t2             0.322    0.025   12.918    0.000
    A1|t3             0.734    0.027   27.211    0.000
    A1|t4             1.230    0.032   37.847    0.000
    A1|t5             1.881    0.049   38.482    0.000
    A2|t1            -2.100    0.059  -35.765    0.000
    A2|t2            -1.526    0.038  -39.968    0.000
    A2|t3            -1.178    0.032  -37.152    0.000
    A2|t4            -0.470    0.025  -18.477    0.000
    A2|t5             0.485    0.026   19.015    0.000

推定法がDWLSになっている。角上重み付け最小2乗法(Diagonally Weighted Least Squares)のことである。ロバスト標準誤差や平均,平均と分散を調整した検定統計量が出力できる。 Standardの隣のRobustの欄には順序カテゴリカル変数であることを考慮したカイ二乗値、標準誤差が表示。Thresholdsは順序カテゴリーがカテゴリー化される境界点である。

ちなみに、通常の因子分析、つまり連続変数だと仮定して、最尤法で推定したものも出しておこう。

fit2 <- cfa(model, d1, std.lv=TRUE)
summary(fit2)

結果。

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                         21
                                                      
  Number of observations                          2632
                                                      
Model Test User Model:
                                                      
  Test statistic                               503.340
  Degrees of freedom                                34
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  Ag =~                                               
    A1                0.521    0.030   17.222    0.000
    A2               -0.784    0.024  -33.134    0.000
    A3               -0.980    0.026  -37.894    0.000
    A4               -0.748    0.031  -24.078    0.000
    A5               -0.796    0.026  -31.164    0.000
  Co =~                                               
    C1                0.680    0.026   26.320    0.000
    C2                0.816    0.027   30.022    0.000
    C3                0.728    0.027   27.110    0.000
    C4               -0.928    0.028  -33.224    0.000
    C5               -0.968    0.034  -28.778    0.000

ほとんど変わらない印象だが、一部値が違っているところがちらほらある。
シミュレーションでは、8件法か9件法以上は連続変数とみなしても良いらしいが、社会学がよく使っている4件法、5件法くらいのものを因子分析するのであれば、カテゴリカル因子分析は必須である。このデータは6件法のデータだが、それでもちらほらと違った数値があるため、カテゴリカル因子分析をした方がよいだろう。

リッカート尺度で7件法とか9件法などはデータ分析は入門教科書に書いてある方法でできるので研究者に優しいが、調査の回答者にとっては厳しい。研究者は9件法の回答用紙になれているが、普通の人はそれほど慣れていないためである。例えば、質問紙は5件法にして、カテゴリカル因子分析を使えば、測定誤差を抑えられ、かつ適正な統計処理ができるという点で良い解決策になるのではないだろうか。