因子分析: 主因子法
因子分析は、因子という潜在変数の1次式によってデータ(変量)の変動を説明するモデルであり、次式(1)
(1)
によって表わされ、多くの解法が提案されている。よく用いられるものの1つとして、主因子法がある。主因子法では、標準化された変量に対して、因子と残差項の独立性の仮定の下で、以下の繰り返しにより因子パターン(因子負荷量)が求められる。
(A)誤差項の分散を対角要素とする行列を
とおく。
(B)相関行列を
と分解する。
この(A)対角行列と(B)因子パターンの算出を、交互に値が安定するまで繰り返す。
詳しくは、本書「心理学データ分析と測定」の「第6章 背後の原因を探る」を参照されたい。
データとして、ケースごとの形式のものと、相関行列の形式のものの2つの形式に対するプログラムをそれぞれ作成した。
まず、ケースごとのデータに対するプログラムについて説明する。相関行列を入力データとするプログラムは、このウェブサイトの後半で扱う。
プログラムfa_pf.exeは、主因子法によって因子分析を行うものである。プログラムファイル名fa_pf.exeをクリックしてダウンロード・実行することができる。実行すると図1のフォームが表示される。
図1
ラジオボタンは、「PrintData」にチェックが入っていると、読み込んだデータがファイルに出力される。出力されたファイルを見ることによって、データが正しく読み込まれているかどうか確認することができる。因子数は、求める因子の数qを設定する。図1では因子数を2と設定している。rはプロマックス回転におけるパラメータである。通常はでよいが、他の値を試すこともできる。「GO」ボタンをクリックすると、図1のフォームに設定された条件で因子分析が行われる。まず、入力データファイル名の設定を求めるダイアログウィンドウが表示される(図2)。
図2
入力データファイル(Data6Subj100.txt; DataTable511.txtと同じ)は、以下のような形式で用意する。
======================= 入力データファイルの例 ===========================
/
6
ID Jpn Eng Hist Math Phys Chem
1 48 46 60 47 68 44
2 54 49 63 61 49 45
3 48 55 47 49 49 47
4 83 78 85 79 66 63
5 56 49 56 78 70 73
・
・
・
95 70 71 71 63 70 72
96 28 24 38 64 57 59
97 49 46 44 74 77 75
98 84 84 96 69 60 69
99 39 51 39 59 60 65
100 47 45 60 68 72 70
/
======================== 入力データファイルの例 =========================
データは、スラッシュ「/」で始まる行で挟む。最初のスラッシュ「/」で始まる行の次の行に、因子分析を行うデータの変量の数pを書く。次の行に各変量のラベルを空白で区切って書く。データはその次の行から、1行に1ケースのデータを書いていく。各行の第1番目には、データのケース番号を書く。このケース番号は分析には用いられないが、データの入力を解りやすくするための番号である。また、ケース番号は文字列として読み込まれているので、英字などを含んだ「abc123」のようなものでもよい。ケース番号は区切り文字を含まないものであるが、区切り文字は次のコードで指定されている。
array<wchar_t> ^ separator = { ' ', '\t', ',',' ','/' };
詳しい説明は<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房、p. 209 >を参照されたい。
各ケースのデータの変量の値は、2番目から書く。データの最終行の次の行は、スラッシュ「/」で始まる行を置く。この2つのスラッシュで始まる行で挟まれた部分以外はプログラムでは無視されるのでコメントなどを書くことができる。
図2の入力ファイル名を設定するダイアログウィンドウにおいて、ファイル名を設定して、「開く」ボタンをクリックする。次に、出力ファイル名の設定を求めるダイアログウィンドウが表示される(図3)。
図3
適当なテキストファイル名を設定して「保存」ボタンをクリックする。「保存」ボタンをクリックすると計算が始まる。計算が終了すると、計算結果を出力ファイルに保存したことを知らせるダイアログウィンドウが表示される(図4)。
図4
図4の「OK」ボタンのクリックで、プログラムの実行が終了する。実行終了後、出力ファイルを開くと以下のようになっている。
まず、入力ファイル名が出力されている。
Data
File =
D:\yasuharu\www\LaCoocan\booksetc\pm2010\fa_pf\fa_pf\fa_pf\Data6Subj100.txt
入力ファイル名の出力に続いて、スラッシュで始まる行まで、読み込んだ行がそのまま出力されている(下の例では、空行とスラッシュまで)。
/
次に、読み込んだ変量名と読み込んだケース数nが出力される。
Vars =
Jpn
Eng
Hist
Math
Phys
Chem
n = 100
続いて、各変量の平均値と標準偏差が出力される。
mean sd
Jpn
58.750 15.213
Eng
59.310 15.591
Hist
59.310 15.059
Math
60.520 13.056
Phys
60.090 13.287
Chem
58.940 13.981
相関行列とその特異値が出力される。
相関行列
Jpn
Eng
Hist
Math
Phys
Chem
Jpn 1.00000 0.84066 0.87327 0.23810 0.19741 0.29807
Eng 0.84066 1.00000 0.82001 0.20751 0.12885 0.24563
Hist 0.87327 0.82001 1.00000 0.27644 0.20387 0.24637
Math 0.23810 0.20751 0.27644 1.00000 0.60998 0.67641
Phys 0.19741 0.12885 0.20387 0.60998 1.00000 0.84128
Chem 0.29807 0.24563 0.24637 0.67641 0.84128 1.00000
相関行列の固有値
Cum.Sum
Cum.Prop(%)
1: 3.25276
3.25276
54.2
2:
1.86791
5.12067
85.3
3:
0.42494
5.54561
92.4
4:
0.20646
5.75207
95.9
5:
0.14753 5.89960
98.3
6:
0.10040
6.00000
100.0
上の固有値のパターンから、図1での因子数を2と設定している。本プログラムを用いて因子分析を行うときは、最初の分析では因子数を適当に(但し、1以上で変量の個数より少なく)設定してプログラムを実行して固有値を求め(固有値は、設定された因子数によらず全て算出される)、次に、算出された固有値などを参考にして因子数を決めて分析しなおせばよい。
因子パターンの初期解、および初期解をバリマックス回転(直交回転)したものが次に出力される。
初期解
Factor-1 Factor-2 Communalities
Jpn
0.82978 -0.45147
0.89236
Eng
0.75926 -0.46560
0.79326
Hist
0.81036 -0.44279
0.85276
Math
0.55047 0.44045
0.49701
Phys
0.58987 0.65074
0.77141
Chem
0.70145 0.65671
0.92330
バリマックス回転後の因子パターン
Factor-1 Factor-2 Communalities
Jpn
-0.93158 0.15657
0.89236
Hist
-0.91095 0.15142
0.85276
Eng
-0.88480 0.10194
0.79326
Chem
-0.14694 0.94958
0.92330
Phys
-0.06281 0.87605
0.77141
Math
-0.16152 0.68624
0.49701
Contri.
2.532
2.198
因子パターンでの行(変量の順序)は、因子負荷量の大きさによってまとまるように並べられている。
バリマックス回転の次に、プロマックス回転(斜交回転)されたパターン行列と因子相関行列および構造行列が出力される。
プロマックス回転後の因子パターン (r = 4)
Factor-1 Factor-2
Jpn
-0.93881 0.01992
Hist
-0.91826 0.01775
Eng
-0.89851 -0.02932
Chem
-0.01259 0.95724
Phys
0.06349 0.89417
Math
-0.06622 0.68336
因子相関行列...
Factor-1 Factor-2
Factor-1
1.00000 -0.28331
Factor-2
-0.28331
1.00000
プロマックス回転後の構造行列
Factor-1 Factor-2
Jpn
-0.94445 0.28589
Hist
-0.92329 0.27790
Eng
-0.89021 0.22524
Chem
-0.28378 0.96081
Phys
-0.18984 0.87618
Math
-0.25982 0.70213
プログラムについての詳しい内容はソースコードを参照されたい。ソースコードファイルなどは圧縮ファイルfa_pf.zipとしてまとめた。圧縮ファイル名fa_pf.zipをクリックしてダウンロードすることができる。ダウンロードした圧縮ファイルは、マウスの右ボタンクリックで表示されるメニュから、「展開」あるいは「解凍」を選んで解凍することができる。解凍したファイルはVisual Studio 2013で開くことができる。しかし、Visual Studio 2015で開くとビルドエラーになる。Visual Studio 2015用としてfa_pf_vs2015.zipを用意した。この圧縮ファイルfa_pf_vs2015.zipをクリック・ダウンロード・展開すればVisual Studio 2015で開いてビルドできる。
入力データが相関行列であることを除いて、ケースごとのデータを入力とする場合と同じである。実行形式のプルグラムファイルFA_RdCor.exeはVisual Studio 2015のインストールされているPCにおいてファイル名FA_RdCor.exeをクリックしてダウンロード・実行することが出来る。プログラムのソースコードファイルなどは圧縮ファイルFA_RdCor.zipとしてまとめた。圧縮ファイル名FA_RdCor.zipをクリックしてダウンロード・展開すればVisual Studio 2015で開くことが出来る。
入力データがケースごとであるときは、ケースごとのデータから相関係数が求められ、算出された相関行列に対して分析が行われるが、相関行列を入力データとするときは、読み込まれた相関行列に対して分析が行われる。読み込まれた相関行列から分析がスタートする場合も、ケースごとのデータから相関行列を求めて分析を始める場合と主因子法の場合は同じである。読み込まれた相関行列が負の固有値をもつときは、必要ならばそれに合わせて求める因子数の調整が行われる。
プログラムの使用法は、入力データが相関行列であること以外は、上のケースごとのデータが入力ファイルであるプログラムと同じである。
入力データファイルは図2.1の形式で用意する。
図2.1
第1文字目がスラッシュ / である行の次の行に変数の数を書く。その次の行には、変数のラベルを空白文字などで区切って並べる。続く行に、相関行列の値を書いていく。各行は変数名で始まり、空白文字などで区切る。
プログラムの出力などは、上のケースごとのデータの場合のプログラムの説明を参照されたい。
なお、順序カテゴリ変量の場合は、ポリコリック相関係数を求め、それに基づいて因子分析などが行われるべきであるが、ポリコリック相関係数については別にウェブサイトを用意した。