カテゴリカル因子分析について その2

前回の記事で、「カテゴリカル因子分析について」を書きました。
今回は、それへの追記です。
内容は、
1.Rでも多次元のカテゴリカル因子分析を実行するパッケージがあったので、それを紹介
2.Mplusで探索的因子分析を使ってカテゴリカル因子分析をする方法
興味ある人は続きをどうぞ


◆Rのmirtパッケージ
前回の記事では、Rでは多次元IRTを実行するパッケージは知らない、と書いてましたが、
先輩がTwitterでつぶやいていたので、知りました。
それは、mirtパッケージで(mirtは全部小文字)、詳しい説明はパッケージのペーパーに書いてますので、こちらも参照してみてください。
なお、mirtパッケージはR2.14以上のバージョンじゃないとインストールできません。古いバージョンを使っている人は先にRを更新する必要があります。
ここでは、一番簡単な関数のmirt()関数について紹介します。
mirt()関数は、多次元項目反応理論(以下、多次元IRT)を実行するための関数です。
この関数を使って、カテゴリカル因子分析を実行することができます。
以下、Rのコードを書きます。
まず、データをデータフレームにしてdatに入れます。今回は2因子が想定される10変数を入れました。
あとは、以下のように書きます。
result.mirt <- mirt(dat,2)
ここで、result.mirtは結果が入るリストで名前は任意です。
mirt()の中には、最初にデータセットを指定して、次に因子数を指定します。これだけです。
result.mirtを表示すると以下のような結果が出力されます。
Call:
mirt(data = dat, nfact = 2)
Full-information factor analysis with 2 factors
Converged in 11 iterations using 15 quadrature points.
Log-likelihood = -1797.795
AIC = 3713.591
BIC = 3908.191
G^2 = 1789.62, df = 133, p = 0
TLI = 0.267, RMSEA = 0.25
収束情報と適合度が出力されます。
では、気になる因子負荷量ですが、summary()関数を使います。
summary(result.mirt, rotate = "promax")
このとき、最初に結果が入っているリストを指定し、次に回転方法を指定します。
回転はGPArotationに入っているものから選べます。以下に例を挙げておきます。
varimax,promax,oblimin,geominT,geominQなどなど。
結果は以下のような感じになります。
actor correlations:
F_1 F_2
F_1 1.00 -0.67
F_2 -0.67 1.00
Rotation: promax
Rotated factor loadings:
F_1 F_2 h2
vc1 0.113 -0.725 0.648
vc2 0.034 -0.763 0.618
vc3 0.095 -0.670 0.544
vc4 -0.017 -0.795 0.614
vc5 -0.078 -0.870 0.671
vc6 0.868 0.037 0.711
vc7 0.745 -0.091 0.654
vc8 0.811 -0.085 0.758
vc9 0.779 -0.031 0.641
vc10 0.819 0.060 0.608
Rotated SS loadings: 3.273 2.966
このように、mirt関数を使えば、多次元のカテゴリカル因子分析が可能です。
ただし、今調べた限りでは、回転後の因子得点を計算することができないようです。
もうちょっと調べればできそうな気がするんですが・・・。
また、ここには書きませんが、探索的因子分析だけでなく検証的因子分析も可能です。
confmirt()関数を使えばできるようです。ただ、モデルを記述する必要があって、やや不便です。
◆Mplusで探索的カテゴリカル因子分析
Mplusでも同様に、多次元の探索的カテゴリカル因子分析ができます。
やり方は2種類あって、探索的因子分析用の方法であるEFAを使うか、探索的構造方程式モデリングの方法であるESEMを使うかです。
EFAの利点は、モデリングが簡単(使用変数と因子数を指定するだけ)なことがメリットです。また、回転の種類が多い(promax回転が使える)こともあげられます。ただし、短所として因子得点の推定ができません。
ESEMを利用する場合は、基本的にはSEMで推定することになるので、モデリングをいろいろ指定する必要があります。しかし、因子得点も推定できる、SEMのモデリングに組み込むことができるなど、メリットが多いです。
今回はESEMを使った方法を紹介します。
SEMを使った因子分析といえば、普通検証的因子分析をイメージするかと思います。
しかし、最新の統計モデルでは、因子分析の部分だけ探索的因子分析で推定して、潜在因子をパスモデルに組み込む、といったモデリングが可能になってきました。これを探索的構造方程式モデリング(ESEM)といいます。
名前からすると、全部モデリングしてくれそうな感じがしますがそうではなくて、因子分析部分を探索的にできるだけで、後は普通のSEMと同じです。
しかし、これが便利な時があります。「SEMを使いたいけど検証的因子分析だと適合度が非常に低い」ということが多いからです。また、微妙に負荷量が小さい変数も推定に使えるというメリットもあります。
さて、ESEMの説明はこのあたりにして、これを使ったカテゴリカル因子分析のコードを書いておきます。
ただ、ESEMではpromax回転が使えないので、デフォルトのGeomin回転を書いておきます。
もしvarimax回転が使いたい場合は、CF-Varimaxと書けば利用できます。斜交ならoblimin回転なんかもあります。
ここから
DATA:
FILE IS "test.txt";
VARIABLE:
NAMES ARE v1-v10;
USEVARIABLES ARE v1-v10;
CATEGORICAL ARE v1-v10;
ANALYSIS:
TYPE IS GENERAL;
 ESTIMATOR IS WLSMV;
ROTATION = GEOMIN(OBLIQU);
!直交回転にしたい場合はGEOMIN(ORTHOGONAL)
MODEL:
F1-F2 by v1-v10(*1);
!(*1)は、ESEMの場合につける呪文
OUTPUT:STAND(STDYX);
Savedata: save = fscores;
file is score.txt;
!ファイル名は任意
ここまで
※カテゴリカル変数がある場合、ESEMではMLは使えません。Mplus7からBayesは使えるそうですが。
※回転方法は、それぞれ以下のように書く。
 varimax回転 CF-varimx
quartimax回転 CF-quatimax
oblimin回転 oblimin
 あと、面白いのは斜交バリマックス回転とかもできます。
 斜交varimax回転 CF-varimax(obliqu)
  ただし、斜交バリマックス回転は解としては微妙です。
今回は以上です。

This entry was posted in 研究生活. Bookmark the permalink.