Up

因子分析

 

主因子法による因子分析のプログラムを作成した。計算式は、<岡本安晴「心理学データ分析と測定」勁草書房>の第6章のものを用いた。プログラムとサンプルデータファイルは、まとめて圧縮ファイルFAPrg.zipとした。ダウンロード・展開すれば自由に利用できる。プログラムはPythonで書かれているが、Pythonの簡単な準備(インストール)の説明ウェブサイトを用意している。

上掲書のデータ表5.1.1を用いて説明する。

 

5.1.1 6教科<国語、英語、歴史、数学、物理、化学>の100人の点数

(シミュレーションで作成)

  48  46  60  47  68  44

  54  49  63  61  49  45

  48  55  47  49  49  47

  83  78  85  79  66  63

  56  49  56  78  70  73

  78  86  76  67  67  75

  62  64  59  62  69  57

  80  78  82  82  80  75

  55  49  58  79  67  75

  53  65  63  75  89  77

  45  52  53  47  41  42

  59  62  72  56  72  72

  44  34  49  54  65  59

  79  64  75  37  15   9

  62  69  66  71  67  66

  72  63  66  80  84  72

  78  82  83  81  67  81

  62  73  63  60  64  67

  66  60  61  64  43  63

  70  66  71  50  55  52

  43  36  46  53  62  46

  43  48  29  41  48  52

  68  55  60  76  63  68

  72  80  66  78  64  79

  66  46  59  67  70  68

  49  66  51  26  29  34

  20  28  32  51  34  33

  75  78  83  68  69  66

  39  41  40  72  60  63

  54  59  57  43  50  50

  72  57  69  66  75  75

  59  47  45  43  68  69

  43  49  44  78  60  55

  59  66  62  49  48  41

  41  47  49  51  50  51

  76  91  89  95  89  85

  75  88  58  45  57  58

  79  75  75  46  45  46

  64  78  62  70  52  49

  39  52  55  53  59  52

  55  68  65  50  51  49

  59  63  57  55  54  74

  30  24  34  53  41  33

  74  76  77  66  63  54

  71  73  76  56  74  54

  71  73  78  61  50  47

  50  52  60  49  55  48

  55  71  57  49  50  43

  57  52  46  60  68  61

  64  64  65  48  57  45

  88  84  79  60  57  60

  38  41  39  41  39  45

  49  45  59  74  65  64

  68  73  65  65  42  49

  48  46  54  65  54  52

  58  72  55  70  55  69

  55  63  58  46  67  67

  56  47  50  71  57  59

  58  56  49  50  57  59

  60  59  56  87  84  82

  73  65  63  39  38  30

  63  74  58  56  71  70

  50  58  47  62  60  57

  26  23  18  51  70  61

  65  54  62  52  53  51

  51  42  50  53  39  42

  63  63  58  69  70  71

  75  77  73  76  77  78

  49  55  48  69  79  82

  50  68  60  60  50  52

  23  33  19  65  51  44

  65  52  55  68  48  54

  75  82  69  73  65  80

  65  63  56  67  73  63

  60  65  82  87  68  77

  39  53  53  47  50  50

  51  64  54  62  53  50

  86  81  82  72  66  65

  60  56  61  71  60  66

  47  41  39  57  79  69

  87  77  84  55  77  76

  40  48  37  55  57  56

  84  62  77  37  46  56

  53  53  61  47  67  59

  76  80  73  48  55  49

  62  72  71  48  40  37

  55  55  66  77  60  44

  71  52  54  69  69  82

  80  77  84  54  66  58

  53  55  56  38  47  43

  56  45  49  68  66  60

  79  74  69  73  66  66

  43  32  53  57  90  77

  29  26  24  47  48  41

  70  71  71  63  70  72

  28  24  38  64  57  59

  49  46  44  74  77  75

  84  84  96  69  60  69

  39  51  39  59  60  65

  47  45  60  68  72  70

 

圧縮ファイルFAPrg.zipを展開して得られるフォルダ内のスクリプトファイルFA.pyを実行する。実行においては、ライブラリ(モジュール)numpy, matplotlib, pandas, xlrdが必要であるので、これらを予めpipコマンドなどでインストールしておく必要がある。例えば、

 

pip install numpy matplotlib pandas xlrd

 

と実行する。

プログラムFA.pyを実行すると、図1のように入力ファイル名の設定が求められる。

図1

 

入力データファイルは、Excelファイルとして用意する(図2.a、図2.b)。

2.a ファイル名Data511.xlsx

図2.b ファイル名Data511.xlsx

 

図2のExcelデータは、上の表5.1.1を打ち込んだものである。第1行目に変数名が入力されている。第2行目は、その変数を分析の対象とするかどうかを示すものである。1であれば分析の対象となるが、0であれば分析から除外される。図2では、第1列目の変数DataIDはデータの通し番号なので、0を設定して分析対象の変数から除外している。第2列目の変数[「国語」から第7列目の変数「化学」までは、すべて1が設定されているので、「国語」から「化学」までのすべての変数を対象として因子分析が行われる。用意した変数の一部の変数を選んで分析する例は、本ウェブサイトの後半で説明する。

図2のファイルを入力データファイルとして指定するときは、図3のようにファイル名Data511.xlsxを設定すればよい。Excelファイルなので、ファイル拡張子が「.xlsx」であることに注意。

図3

 

入力データファイル名を設定してEnterキーを押すと、次に計算結果の出力用テキストファイル名の設定が求められる(図4)。

図4

 

出力テキストファイルには、固有値や因子負荷量などが出力される。適当なテキストファイル名を設定するが、ファイル拡張子が「.txt」であることに注意。

出力ファイル名を設定してEnterキーを押すと、計算が始まる。

相関行列の固有分解が終了すると、スクリープロットが表示される(図5)。

図5

 

図5のスクリープロットのフォームを閉じると、因子の数の入力が求められる(図6)。図5で表示されている固有値も端末に出力されている。

図6

 

固有値のパターンを参考にして、2を設定してみる(図7)。

図7

 

2を設定してEnterキーを押すと、因子負荷量の初期値が算出される。その後、因子負荷量パターンの描画を行うかどうか聞いてくる(図8)。

図8

 

xdim = 」に1より小さい整数を設定すると、このパターンの描画は行われない。

正整数を設定すると、各変数が、xdimydimに設定した番号の因子の負荷量を横座標値、縦座標値とする点として描画される。因子の番号として大き過ぎる値が設定されたときは、可能な最大値が設定される。図9では、1と2が設定されている。

図9

 

ydim = 」の値を設定してEnterキーを押すと、図10のように各変数に対して、指定した因子の負荷量を座標とする点がプロットされる。

10

 

10のウィンドウの右上のX印をクリックして閉じると、図11のように次の描画におけるxdimの値が求められる。

11

 

別の組み合わせの描画を行うときは、それらの値を設定すればよい。初期値のパターンの描画を終えるときは、「xdim」に1より小さい整数値を設定する。

12では、「xdim = 0」と設定している。

12

 

12の画面で、「xdim = 0」と設定した後、Enterキーを押すと、図12のようにVarimax回転後の因子パターンの描画について聞いてくる。

12

 

設定方法は、先の初期値因子パターンの場合と同様である。図13のように設定してみる。

13

 

14のように、回転されたパターンが表示される。

14

 

14のウィンドウを閉じると、図15のように次のxdimの値の設定が求められる。

15

 

15のようにxdimに1より小さい整数値を設定すると、因子パターンの描画は終わる。続いて、プロマックス回転が行われ、その後、出力ファイルの保存が行われたというメッセージが表示されて、プログラムの実行終了となる(図16)。

16

 

プログラムの実行終了後、出力ファイルを開くと、計算結果を見ることができる。

出力テキストファイルをPython IDLEのエディタで開こうとすると、図17のようなボックスが表示されることがある。

17

 

このときは、図18のように「s-jis」と設定して「OK」ボタンをクリックすればよい。

18

 

 

 

図2のデータの場合は、出力テキストファイルを開くと図19のようになっている。

19

 

相関行列の出力において、上段の変数名の位置がずれているが、これは全角日本語文字が出力されているからである。全角日本語文字の出力が無い場合は、横位置の書式制御はプログラムで意図されている通りに行われる。図20のデータは、図2のデータにおいて変数名を半角の英字で表記したものである。

20 Excelデータファイル(Data511en.xlsx

 

20のデータの場合の出力ファイルは図21のようになる。変数名の位置が正しく揃っていることが分かる。

21

 

出力ファイルには、相関行列の固有値Lambdaも以下のように出力されている。

 

Lambda...

                        Lambd    cum.sqr         %

         Lambda-1 =    3.25276   3.25276     54.21

         Lambda-2 =    1.86791   5.12067     85.34

         Lambda-3 =    0.42494   5.54561     92.43

         Lambda-4 =    0.20646   5.75207     95.87

         Lambda-5 =    0.14753   5.89960     98.33

         Lambda-6 =    0.10040   6.00000    100.00

 

これは、図5のスクリープロットの値である。

Varimax回転後のパターン行列の値は以下のように出力されている。ここで、「fctr.1」などは「因子1」などを表している。

 

Varimax rotation was applied...

 

 

Pattern for the Varimax rotated factors =

              fctr.1    fctr.2

        国語  -0.15657   0.93158

        英語  -0.10194   0.88480

        歴史  -0.15142   0.91095

        数学  -0.68624   0.16152

        物理  -0.87605   0.06281

        化学  -0.94958   0.14694

 

 

Sorted Pattern for Varimax rotation =

              fctr.1    fctr.2

        化学  -0.94958   0.14694

        物理  -0.87605   0.06281

        数学  -0.68624   0.16152

        国語  -0.15657   0.93158

        歴史  -0.15142   0.91095

        英語  -0.10194   0.88480

 

これらの値は、図14に示されているものである。

出力テキストファイルの最後には、Promax回転後のパターン行列、因子間相関行列、構造行列が以下のように出力されている。

 

Promax rotation was applied...

 

 

Pattern for the Promax rotated factors =

              fctr.1    fctr.2

        国語  -0.01992   0.93881

        英語   0.02932   0.89851

        歴史  -0.01775   0.91826

        数学  -0.68336   0.06622

        物理  -0.89417  -0.06349

        化学  -0.95724   0.01259

 

 

Correlation matrix of the factors...

              fctr.1    fctr.2

    fctr.1   1.00000  -0.28331

    fctr.2  -0.28331   1.00000

 

 

Sorted Pattern for Promax rotation =

              fctr.1    fctr.2

        化学  -0.95724   0.01259

        物理  -0.89417  -0.06349

        数学  -0.68336   0.06622

        国語  -0.01992   0.93881

        歴史  -0.01775   0.91826

        英語   0.02932   0.89851

 

Structure Matrix

              fctr.1    fctr.2

        国語  -0.28589   0.94445

        英語  -0.22524   0.89021

        歴史  -0.27790   0.92329

        数学  -0.70213   0.25982

        物理  -0.87618   0.18984

        化学  -0.96081   0.28378

 

 

因子分析の変数の選択

因子分析においては、共通性の小さい変数を除いて分析するというように、用意した変数の一部を対象として因子分析を行うことも多い。また、変数全体に対する因子分析に基づいて下位尺度ごとのグループに分けて因子分析することもある。下位尺度単位の分析により、他の下位尺度の項目の影響を排除した因子分析が行える。なお、心理尺度の信頼性係数についてのウェブサイトも用意している。

以下では、文系の科目と理系の科目とに分けて因子分析を行う場合について説明する。

まず、「国語」、「英語」、「社会」の3教科に対して因子分析を行う。この3教科を選ぶために図A.1のように「国語」、「英語」、「歴史」の3教科の第2行には1を設定して、他の変数には0を設定する。

A.1 ファイル名Data511_10.xlsx

 

プログラムFA.pyの実行時の入力データファイル名として、図A.1のファイル名Data511_10.xlsxを設定する(図A.2)。

A.2

 

このとき、スクリープロットは図A.3のようになる。

A.3

 

因子数として1が適していることが分かる。図A.3のフォームを閉じると因子数の入力が求められる。

因子数として1を設定する(図A.4)。

A.4

 

因子数に1を設定すると、初期解のパターン行列のグラフが図A.5のように描かれる。

A.5

 

因子数が1なので、X軸もY軸も同じ因子番号1を表し、各変数は対角線上にプロットされている。X軸あるいはY軸に1より大きい整数値を指定しても、1に修正されてグラフが描かれる。

A.5の因子負荷量の値は、出力テキストファイルに以下のように出力されている。

 

 

Pattern matrix for the initial factors

              fctr.1    communality

        国語   0.94619        0.89527

        英語   0.88847        0.78939

        歴史   0.92294        0.85182

 

 

Varimax rotation was applied...

 

 

Pattern for the Varimax rotated factors =

              fctr.1

        国語   0.94619

        英語   0.88847

        歴史   0.92294

 

回転後の因子負荷量も出力されているが、1因子解なので初期値と同じである。

 

 

次の理系の科目「数学」、「物理」、「化学」に対して因子分析を行ってみる。入力データファイルを図B.1のように用意する。

B.1 ファイル名Data511_01.xlsx

 

3教科「数学」、「物理」、「化学」の変数のみ2行目に1が設定され、他の変数は0が設定されている。

プログラムFA.pyを実行して入力データファイルとして図B.1のファイル名Data511_01.xlsxを設定する(図B.2)。

B.2

 

スクリープロットは図B.2のようになる。

B.3

 

因子数は1であることが確認できる。図B.3のフォームを閉じると因子数の入力が求められる。

B.4では因子数として1が設定されている。

B.4

 

初期解のパターン行列のグラフが表示される(B.5)。

B.5

 

因子数が1なので、X軸とY軸は同じ因子を表している。

プログラム実行終了後に出力テキストファイルを見ると、図B.5に表示されている因子負荷量が出力されている。回転後の負荷量も出力されているが、1因子なので同じ値である。

 

Pattern matrix for the initial factors

              fctr.1    communality

        数学   0.70031        0.49044

        物理   0.87102        0.75867

        化学   0.96586        0.93289

 

 

Varimax rotation was applied...

 

 

Pattern for the Varimax rotated factors =

              fctr.1

        数学   0.70031

        物理   0.87102

        化学   0.96586

 

 

 

Up