カテゴリ変量の因子分析
変量が順序カテゴリ項目であるときの因子分析を行うスクリプトを書いてみた。カテゴリ変量に対して、その潜在変数として設定した連続変量の相関係数をテトラコリック相関係数/ポリコリック相関係数として求める方法を扱ったウェブサイトのプログラムと因子分析を扱ったウェブサイトのプログラムを1つにまとめたものある。詳しい説明は、それぞれのウェブサイトを参照されたい。
プログラムファイルとサンプルデータファイルは、圧縮ファイルfacatfiles.zipにまとめた。ダウンロード・解凍して利用することができる。
Pythonのインストールの説明のウェブサイトも用意している。また、本ウェブサイトのスクリプトの実行には、パッケージnumpy、matplotlibが必要である。これは、Pythonのインストール後、コマンドpipを
pip install
numpy matplotlib
と実行すればよい。パッケージのインストールも上記Pythonのインストールの説明のウェブサイトで説明している。
圧縮ファイルfacatfiles.zipをダウンロード・解凍したフォルダのPythonメインスクリプトMain.pyを実行すると図1のように入力データファイル名の設定が求められる。
図1
入力データファイルは、CSV(カンマ区切りファイル)ファイルとして用意するが、これはExcelで簡単に作成できる。
まず、Excelで図2に示すようにデータを作成する。
図2
1行目には、変数名を並べる。1番目は、データの通し番号など識別用(ID用)変数である。2番目から、分析したいカテゴリ変量名を並べる。
2行目は、各カテゴリ変量におけるカテゴリ数である。1番目の識別用変数は、カテゴリ数は関係ないので、データの形式を合わせるため、適当な数値を書いておく。
3行目から、各行にデータを入力していく。これは、1行目の変数の並びに合わせて書いていく。カテゴリ数がKの変量のカテゴリ値は、1からKまでの整数値で表す。原データのカテゴリ値が1からKまでの整数値でない場合は、Excelの「検索と選択|置換」メニュ項目を選択して、適切な整数値に変換することは簡単である。
図3
図2の形式で作成したデータを「名前を付けて保存」メニュ項目を選んで保存する(図4)。ファイルの種類として「CSV(カンマ区切り)(*.csv)」を選び、ファイル名のファイル拡張子を「.csv」として保存すると、CSVファイルが作成される。
図4
入力データファイル名を設定すると、次に計算結果の出力ファイル名の設定が求められる(図5)。
図5
出力ファイル名は、適当なテキストファイル名を設定する。出力ファイル名を設定すると、計算が始まる。
まず、相関係数の推定が行われる。この推定法については、ポリコリック相関係数/テトラコリック相関係数のウェブサイトを参照されたい。
相関係数の推定が終わると、それに基づいて因子分析が行われる。因子分析については、因子分析のウェブサイトを参照されたい。
因子分析が始まると、固有分解が行われる。算出された固有値が表示され、因子数の設定が求められる(図6)。
図6
因子数を設定すると、計算が始まり、初期解のパターン行列の表示における、横軸(x軸)と縦軸(y軸)の因子の指定が求められる(図7)。
図7
図8では、横軸に第1因子、縦軸に第2因子を指定している。
図8
横軸(ydim)の指定をして、Enterキーを押すと、指定した次元でパターン行列の値が散布図として表示される(図9)。
図9
表示されている描画画面は、下端に並んでいるアイコンの一番右端のフロッピーディスクのアイコンをクリックすると保存できる。
フォーム右上のX印をクリックしてフォームを閉じると、次の表示用の縦軸、横軸の因子の指定が求められる(図10)。
横軸の指定に0以下の整数値を設定すると、初期解のパターン行列による散布図の描画は終わり、直交回転(Varimax rotation)が行われ、バリマックス回転後のパターン行列の散布図の表示が行われる。
図10
横軸と縦軸の因子を指定すると、指定した因子によるパターン行列の散布図が表示される(図11)。
図11
フォーム右上のX印をクリックしてフォームを閉じると、次の表示用因子の指定が求められる(図12)。
図12
横軸の因子指定に0以下の整数値を設定すると、直交回転後のパターン行列の散布図による表示は終わり、promax回転による斜交回転が行われる。プロマックス回転が終わると、プログラムの実行終了である。
出力ファイル名として設定したファイル名は、実行終了時に表示されている。
出力ファイルをテキストエディタで開くと、まず入力データファイル名が
Data file =
DataV6.csv
と出力されている。その後、相関係数の推定時の出力があり、最後に推定された相関係数が相関行列の形で書き出されている。
MAP estimates of rhos...
VarA
VarB VarC VarD VarE VarF
VarA 1.000 0.006 0.631 0.055 0.598 -0.021
VarB 0.006 1.000 -0.029 0.656 -0.003 0.624
VarC 0.631 -0.029 1.000 0.061 0.640 0.058
VarD 0.055 0.656 0.061 1.000 0.014 0.715
VarE 0.598 -0.003 0.640 0.014 1.000 -0.005
VarF -0.021 0.624 0.058 0.715 -0.005 1.000
因子分析の結果は、以下のように出力されている。
Lambda...
Lambd cum.sqr
%
Lambda-1 =
2.35234 2.35234 39.21
Lambda-2 =
2.22729 4.57963 76.33
Lambda-3 =
0.43086 5.01049 83.51
Lambda-4 =
0.40560 5.41610 90.27
Lambda-5 =
0.31389 5.72999 95.50
Lambda-6 =
0.27001 6.00000 100.00
Pattern matrix for the initial factors
fctr.1
fctr.2
communality
VarA -0.25038 -0.72585
0.58955
VarB -0.71048 0.25964
0.57219
VarC -0.28806 -0.77171
0.67851
VarD -0.83697 0.23305
0.75482
VarE -0.23955 -0.73966
0.60448
VarF -0.78385 0.25733
0.68063
Varimax rotation was applied...
Pattern for the Varimax rotated
factors =
fctr.1 fctr.2
VarA -0.00654 -0.76780
VarB -0.75616 0.02020
VarC -0.02767 -0.82325
VarD -0.86763 -0.04524
VarE 0.00812 -0.77744
VarF -0.82499 -0.00532
Sorted Pattern for Varimax rotation =
fctr.1 fctr.2
VarD -0.86763 -0.04524
VarF -0.82499 -0.00532
VarB -0.75616 0.02020
VarC -0.02767 -0.82325
VarE 0.00812 -0.77744
VarA -0.00654 -0.76780
Promax rotation was applied...
Pattern for the Promax rotated factors
=
fctr.1 fctr.2
VarA 0.00375 -0.76792
VarB -0.75666 0.03123
VarC -0.01665 -0.82308
VarD -0.86728 -0.03260
VarE 0.01854 -0.77778
VarF -0.82516 0.00671
Correlation matrix of the factors...
fctr.1 fctr.2
fctr.1 1.00000 0.02797
fctr.2 0.02797 1.00000
Sorted Pattern for Promax rotation =
fctr.1 fctr.2
VarD -0.86728 -0.03260
VarF -0.82516 0.00671
VarB -0.75666 0.03123
VarC -0.01665 -0.82308
VarE 0.01854 -0.77778
VarA 0.00375 -0.76792
Structure Matrix
fctr.1 fctr.2
VarA -0.01773 -0.76782
VarB -0.75579 0.01007
VarC -0.03967 -0.82355
VarD -0.86819 -0.05685
VarE -0.00321 -0.77726
VarF -0.82498 -0.01637