Rによるデータサイエンス】因子分析

【定義】
因子分析の定義は、次のように書かれている。

変数の間の相関関係から共通因子を求めること

「観測データ=独自因子+共通因子」と分解できることを前提とし、観測データを最もうまく表現する独自因子と共通因子を求めることを因子分析と呼ぶと、理解した。

共通因子、独自因子の定義は、次のように書かれている。

共通因子:観測データにおける変数の間の関連成分をまとめたもの
独自因子:他の変数と関係がなく、その変数のみを持っている成分

これをモデル化すると次のようになる。

x=Af+e

ここで

x:観測データを表す列ベクトル、
A:共通因子と観測データの関連性を表す行列(因子負荷量と呼ばれ、共通因子と分析に使用された変数との相関係数とかんがえる)、
f:共通因子を表す列ベクトル(因子得点
e:独自因子を表す列ベクトル

【具体例を使用した練習】
1.データの準備

> seiseki<-matrix(c(89,90,67,46,50,57,70,80,85,90,80,90,35,40,50,40,60,50,45,55,78,85,45,55,60,55,65,80,75,85,90,85,88,92,95),7,5,byrow=TRUE)
> colnames(seiseki)<-c("math","science","japanese","english","society")
> rownames(seiseki)<-c("tanaka","sato","suzuki","honda","kawabata","yoshino","saito")
> seiseki
         math science japanese english society
tanaka     89      90       67      46      50
sato       57      70       80      85      90
suzuki     80      90       35      40      50
honda      40      60       50      45      55
kawabata   78      85       45      55      60
yoshino    55      65       80      75      85
saito      90      85       88      92      95
> 

2.因子分析の実施
次に、因子分析の関数factanal(x,factors,rotation,scores)を使用して因子分析を実施する。
因子の数factorsは必ず指定しなければならない。
因子得点を求める方法はscoresで指定し、回帰方法とバートレット法の中から指定する。
下記では、因子の数を2、因子得点は求めないという設定で因子分析を実施する。

> (seiseki.fac<-factanal(seiseki,factors=2))

Call:
factanal(x = seiseki, factors = 2)

Uniquenesses:
    math  science japanese  english  society 
   0.005    0.029    0.241    0.005    0.006 

Loadings:
         Factor1 Factor2
math              0.997 
science  -0.188   0.967 
japanese  0.871         
english   0.997         
society   0.989  -0.128 

               Factor1 Factor2
SS loadings      2.768   1.946
Proportion Var   0.554   0.389
Cumulative Var   0.554   0.943

Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 1.73 on 1 degree of freedom.
The p-value is 0.188 
> 

3.結果の整理
1つ1つ結果を見ていく。

まず、独立因子(Uniquenesses)。

Uniquenesses:
math science japanese english society
0.005 0.029 0.241 0.005 0.006

次に、因子負荷量。

Loadings:
Factor1 Factor2
math 0.997
science -0.188 0.967
japanese 0.871
english 0.997
society 0.989 -0.128

寄与度、寄与率、累積寄与率。
第2因子までで累積寄与率が94.3%となっているので、第2因子までで十分だろうと解釈できる。

Factor1 Factor2
SS loadings 2.768 1.946
Proportion Var 0.554 0.389
Cumulative Var 0.554 0.943

元データの分散とモデルによる分散との検定統計量。
Test of the hypothesis that 2 factors are sufficient.」とのメッセージが出力されており、因子が2つで十分であることが示されている。

Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 1.73 on 1 degree of freedom.
The p-value is 0.188

4.因子の解釈
因子の解釈は、因子負荷量の値の大小で意味付けを行う

まず、因子負荷量($loadings)の1列目(第1因子負荷量)、2列目(第2因子負荷量)をそれぞれグラフ化する。
・第1因子負荷量

・第2因子負荷量

この2つの結果を見ると、第1因子負荷量が大きいのは、japanese,engilish,societyの3つのかたまりであり、第2因子負荷量が大きいのは、math,scienceのかたまりである。この2つのかたまりを共通因子と考え、それぞれ「文系」共通因子、「理系」共通因子とする。

さて、ここではscoresを指定しなかったため、因子得点を求めていないが、次は因子得点を求めて因子負荷量と因子得点を1つの散布図で作成する。
まず、因子得点を求める。

> seiseki.fac2<-factanal(seiseki,factors=2,rotation="none",scores="regression")
> biplot(seiseki.fac2$scores,seiseki.fac2$loading)