Goodな生活

Goodな生活

データサイエンスと弦楽器を探究する

因子分析の直感的理解

主成分分析と因子分析の違い

主成分分析と同様、因子分析も多次元のデータを要約するため新しい座標軸を設定する。主成分分析では偏差の平方和が最大になるような座標軸を求め、これを繰り返し第1主成分、第2主成分と順に求め、累積寄与率が十分になった時点でデータを要約する。要約とは、元データと主成分の相関を解釈し、座標軸(主成分)に名前を付けて解釈する(例えば元データが算数、国語、理科、社会の4科目の成績である場合、第1主成分は理数系能力、第2主成分は文系能力等)。主成分とは、観察されたデータの合成変数つまり線形結合を意味する。一方、因子分析では分析者があらかじめ因子を設定し、因子によって観察されたデータを説明する。つまり観察されたデータを因子の合成変数(線形結合)で表す。因子に解釈を与え、名前を付ける点は主成分分析と同じ。

主成分分析では、観察データの情報の損失が最小になるように主成分に要約する。因子分析では、分析者が設定した共通因子によって観察データを説明する*1。共通因子によって説明されなかった部分は独自因子によって説明されるため情報の損失は起こらない。

f:id:good_na_life:20210602083649p:plain
図1 主成分分析と因子分析(石井(2014)を元に作成)
主成分分析はデータの要約という記述統計としての性格が強い一方、因子分析はあらかじめ想定した仮説やストーリーを裏付けていく演繹的な手法。同じ観察データを使っても落とし込みたいストーリーによって結果が変わる恣意的な面がある。

1因子モデル

3変量x,y,zを1つの因子fで分析する。  {\begin{eqnarray}
\begin{pmatrix}
x_i \\
y_i \\
z_i \\
\end{pmatrix} 
&=& f_i \begin{pmatrix}
a \\
b \\
c \\
\end{pmatrix} +
\begin{pmatrix}
e_{xi} \\
e_{yi} \\
e_{zi} \\
\end{pmatrix} \tag{1}
\end{eqnarray}} 3変量のデータx_i,y_i,z_i、共通因子f_iは各個体によって値の異なる観測可能なデータ。因子分析では、共通因子の影響の大きさ(因子負荷量)a,b,cはどのような値で、共通因子は3つの変数をどのくらい説明できるかを把握する。また共通因子で説明できなかった要因(独自因子)e_x,e_y,e_zの影響の大きさVar[e_x],Var[e_y],Var[e_z]はどのくらいかを把握する。前者を共通性、後者を独自性と呼ぶ。
1因子モデルの図示
f:id:good_na_life:20210602085027p:plain
図2 1因子モデル(石井(2014)を元に作成)
図2において黒字は観察データ、赤字のベクトルは因子分析によって求める値。
因子についての仮定条件
分析にあたって以下の3つの仮定を置く。
  • 共通因子は標準化されている
 {\begin{eqnarray}
E[f] = 0, Var[f] = 1  \tag{2}
\end{eqnarray}}
  • 独自因子の平均はゼロ
 {\begin{eqnarray}
E[e_x] = 0, E[e_y] = 0,E[e_z] = 0  \tag{3}
\end{eqnarray}}
  • すべての因子は独立であり共分散はゼロ
 {\begin{eqnarray}
Cov[f,e_x] &=& 0, Cov[f,e_y] &=& 0,Cov[f,e_z] &=& 0 \\
Cov[e_x,e_y] &=& 0, Cov[e_x,e_z] &=& 0,Cov[e_y,e_z] &=& 0  \tag{4}
\end{eqnarray}}
連立方程式を解く
変数の分散は、  {\begin{eqnarray}
Var[x] &=& Var[af+e_x] \\
             &=& a^2 Var[f] + 2a Cov[f,e_x] + Var[e_x] \\
             &=& a^2 + Var[e_x] \tag{5} 
\end{eqnarray}} 同様に、  {\begin{eqnarray}
Var[y] &=& a^2 + Var[e_y] \tag{6} \\
Var[z] &=& a^2 + Var[e_z] \tag{7} 
\end{eqnarray}} 共分散は  {\begin{eqnarray}
Cov[x,y] &=& Cov[af+e_x,bf + e_y] \\
             &=& ab Var[f] + a Cov[f,e_y] + b Cov[e_x,f]+ Cov[e_x,e_y] \\
             &=& ab \tag{8} 
\end{eqnarray}} 同様に  {\begin{eqnarray}
Cov[y,z] &=& bc \tag{9} \\
 Cov[z,x] &=& ca \tag{10}
\end{eqnarray}} したがってデータから共分散の推定値であるCov[x,y]=σ_{xy}, Cov[y,z]=σ_{yz},Cov[z,x]=σ_{zx}が求まれば、因子負荷量a,b,c、独自因子の分散e_{x},e_{y},e_{z}は、次の連立方程式を解くことで計算できる。(5)(6)(7)より、  {\begin{eqnarray}
1 &=& a^2 + Var[e_x] \tag{11} \\
1 &=& a^2 + Var[e_y] \tag{12} \\
1 &=& a^2 + Var[e_z] \tag{13}  
\end{eqnarray}} (8)(9)(10)より  {\begin{eqnarray}
Cov[y,z] &=& bc \tag{14} \\
Cov[y,z] &=& bc \tag{15} \\
 Cov[z,x] &=& ca \tag{16}
\end{eqnarray}}

2因子モデル

3変量x,y,zを2つの因子f,gで分析する方法。  {\begin{eqnarray}
\begin{pmatrix}
x_i \\ y_i \\ z_i \\
\end{pmatrix} 
&=& f_i \begin{pmatrix}
a_1 \\ a_2 \\ a_3 \\
\end{pmatrix} + g_i \begin{pmatrix}
b_1 \\ b_2 \\ b_3 \\
\end{pmatrix} +
\begin{pmatrix}
e_{xi} \\ e_{yi} \\ e_{zi} \\
\end{pmatrix} \tag{17}
\end{eqnarray}}
2因子モデルの図示
f:id:good_na_life:20210602085924p:plain
図3 2因子モデル(石井(2014)を元に作成)
図2の1因子モデルと同様に、黒字は観察データ、赤字のベクトルは因子分析によって求める値を表す。注意が必要なのは、赤字のベクトル(a_1,a_2,a_3)(b_1,b_2,b_3)はどちらも大きさが1でもなければ、直交してもいない。分散共分散行列(もしくは相関行列)の固有ベクトルを求め、第k主成分が第k-1主成分に対して直交するような座標軸を設定する主成分分析と異なる点。
因子についての仮定条件
  • 共通因子は標準化されている
 {\begin{eqnarray}
E[f] = 0, Var[f] = 1 \\
E[g] = 0, Var[g] = 1 \tag{18}
\end{eqnarray}}
  • 独自因子の平均はゼロ
 {\begin{eqnarray}
E[e_x] = 0, E[e_y] = 0,E[e_z] = 0  \tag{19}
\end{eqnarray}}
  • すべての因子は独立であり共分散はゼロ
 {\begin{eqnarray}
Cov[f,e_x] &=& 0, Cov[f,e_y] &=& 0,Cov[f,e_z] &=& 0 \\
Cov[g,e_x] &=& 0, Cov[g,e_y] &=& 0,Cov[g,e_z] &=& 0 \\
Cov[e_x,e_y] &=& 0, Cov[e_x,e_z] &=& 0,Cov[e_y,e_z] &=& 0 \\
Cov[f,g] &=& 0  \tag{20}
\end{eqnarray}} ベクトルと行列でこれらの仮定条件を表すと、  {\begin{eqnarray}
x &=&\begin{pmatrix}
x \\
y \\
z \\
\end{pmatrix} ,A &=&\begin{pmatrix}
a_1 & b_1 \\
a_2 & b_2 \\
a_3 & b_3 \end{pmatrix} \\ \\
f &=& \begin{pmatrix} f\\g  \end{pmatrix},
e &=& \begin{pmatrix} e_x \\ e_y \\ e_z \end{pmatrix} \tag{21}
\end{eqnarray}} (17)は  {\begin{eqnarray}
x = Af + e  \tag{22}
\end{eqnarray}} (22)にx^\mathrm{T} = (Af + e)^\mathrm{T} を右からかけると  {\begin{eqnarray}
xx^\mathrm{T} &=& (Af + e)(Af + e)^\mathrm{T} \\
                         &=& (Af + e)(f^\mathrm{T} A^\mathrm{T} + e^\mathrm{T}) \\
                         &=& Aff^\mathrm{T}A^\mathrm{T} +Afe^\mathrm{T} + ef^\mathrm{T} A^\mathrm{T} + ee^\mathrm{T} \tag{23}
\end{eqnarray}} 期待値を取ると、  {\begin{eqnarray}
E[xx^\mathrm{T}] &=& AE[ff^\mathrm{T}] + AE[fe^\mathrm{T}] + E[ef^\mathrm{T}] + E[ee^\mathrm{T}] \\
                                &=& AIA^\mathrm{T} + AO + O^\mathrm{T}A^\mathrm{T} + E[ee^\mathrm{T}] \\
                                &=& AA^\mathrm{T} +E[ee^\mathrm{T}] \tag{24}
\end{eqnarray}} (24)の成分を表すと、
 {\begin{eqnarray}
\begin{pmatrix} 1 & σ_{xy} & σ_{zx} \\ σ_{xy} & 1 & σ_{yz} \\ σ_{zx} & σ_{yz} & 1 \end{pmatrix} &=&
\begin{pmatrix} a_1 & b_1 \\a_2 & b_2 \\ a_3 & b_3 \end{pmatrix} 
\begin{pmatrix} a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{pmatrix} + 
\begin{pmatrix} Var[e_x] & 0 & 0 \\ 0 & Var[e_y] & 0 \\ 0 & 0& Var[e_z] \end{pmatrix} \tag{25}
\end{eqnarray}}
ここに9本の連立方程式が立式される。しかし(25)の行列は対角行列になっているため、独立な方程式は6本となる。求めたいパラメータが9個(a_1,a_2,a_3,b_1,b_2,b_3,Var[e_x],Var[e_y],Var[e_z])に対して方程式が6本であるため解が一意に定まらない。また条件が過剰になり解を持たないこともある。このような場合に主因子法や最尤法等が用いられる。

共通性

共通因子が各変数をどの程度説明しているかを表す。各変数の因子負荷量の二乗和を計算する。1因子モデルの場合、  {\begin{eqnarray}
\begin{pmatrix}
x_i \\
y_i \\
z_i \\
\end{pmatrix} 
&=& f_i \begin{pmatrix}
a \\
b \\
c \\
\end{pmatrix} +
\begin{pmatrix}
e_{xi} \\
e_{yi} \\
e_{zi} \\
\end{pmatrix} \tag{26}
\end{eqnarray}}
  • xの共通性)= a^2
  • yの共通性)= b^2
  • zの共通性)= c^2
2因子モデルの場合、  {\begin{eqnarray}
\begin{pmatrix}
x_i \\
y_i \\
z_i \\
\end{pmatrix} 
&=& f_i \begin{pmatrix}
a_1 \\
a_2 \\
a_3 \\
\end{pmatrix} + g_i \begin{pmatrix}
b_1 \\
b_2 \\
b_3 \\
\end{pmatrix} +
\begin{pmatrix}
e_{xi} \\
e_{yi} \\
e_{zi} \\
\end{pmatrix} \tag{27}
\end{eqnarray}}
  • xの共通性)= a_1^2 + b_1^2
  • yの共通性)= a_2^2 + b_2^2
  • zの共通性)= a_3^2 + b_3^2
共通性は1を超えない。

独自性

各変数の因子では説明できなかったものの大きさ(独自因子の影響力)を表す。独自因子の分散。(独自性)=1-(共通性)と計算する。 1因子モデルの場合、
  • xの独自性)=1-a^2 = Var[e_x]
  • yの独自性)=1-b^2 = Var[e_y]
  • zの独自性)=1-c^2 = Var[e_z]
2因子モデルの場合、
  • xの独自性)=1-a_1^2 - b_1^2 = Var[e_x]
  • yの独自性)=1-a_2^2 - b_2^2 = Var[e_y]
  • zの独自性)=1-a_3^2 - b_3^2 = Var[e_z]

因子の回転

因子負荷量を平面上にプロットしたとき、さしたる傾向が導けない場合には因子を回転してもよい。1因子モデル(1)をベクトルと行列を使って表し、fの左から回転行列R(θ)を、Aの右側から回転行列R(-θ)を掛ける。  {\begin{eqnarray}
x &=& Af + e \\
   &=& AR(-θ)R(θ)f + e \\
  &=& A \begin{pmatrix} \cos(-θ) & -\sin(-θ) \\ \sin(θ) & \cos(-θ)  \end{pmatrix} 
               \begin{pmatrix} \cos(θ) & -\sin(θ) \\ \sin(θ) & \cos(θ) \end{pmatrix} f + e \\
  &=& A \begin{pmatrix} \cos^2(θ) + \sin^2(θ) & -\cos(θ)\sin(θ) + \sin(θ)\cos(θ) \\ -\sin(θ)\cos(θ) + \cos(θ)\sin(θ) &  \sin^2(θ) +\cos^2(θ)  \end{pmatrix} \\
  &=& A  \begin{pmatrix} 1&0 \\ 0&1 \end{pmatrix} f + e \\
  &=& Af + e  \tag{28}
\end{eqnarray}} モデルは変わらず、因子負荷量は不変。バリマックス回転(直交回転)、プロマックス回転(斜交回転)等が代表的な回転。

*1:ただし共通因子も観察可能なデータではある。