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件法にして、カテゴリカル因子分析を使えば、測定誤差を抑えられ、かつ適正な統計処理ができるという点で良い解決策になるのではないだろうか。