Up

因子分析: 主因子法

 

 因子分析は、因子という潜在変数の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.exeVisual Studio 2015のインストールされているPCにおいてファイル名FA_RdCor.exeをクリックしてダウンロード・実行することが出来る。プログラムのソースコードファイルなどは圧縮ファイルFA_RdCor.zipとしてまとめた。圧縮ファイル名FA_RdCor.zipをクリックしてダウンロード・展開すればVisual Studio 2015で開くことが出来る。

 入力データがケースごとであるときは、ケースごとのデータから相関係数が求められ、算出された相関行列に対して分析が行われるが、相関行列を入力データとするときは、読み込まれた相関行列に対して分析が行われる。読み込まれた相関行列から分析がスタートする場合も、ケースごとのデータから相関行列を求めて分析を始める場合と主因子法の場合は同じである。読み込まれた相関行列が負の固有値をもつときは、必要ならばそれに合わせて求める因子数の調整が行われる。

プログラムの使用法は、入力データが相関行列であること以外は、上のケースごとのデータが入力ファイルであるプログラムと同じである。

入力データファイルは図2.1の形式で用意する。

2.1

 

第1文字目がスラッシュ / である行の次の行に変数の数を書く。その次の行には、変数のラベルを空白文字などで区切って並べる。続く行に、相関行列の値を書いていく。各行は変数名で始まり、空白文字などで区切る。

プログラムの出力などは、上のケースごとのデータの場合のプログラムの説明を参照されたい。

なお、順序カテゴリ変量の場合は、ポリコリック相関係数を求め、それに基づいて因子分析などが行われるべきであるが、ポリコリック相関係数についてはウェブサイトを用意した。

 

 

 

Up