StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

因子分析の勉強(永田・棟近『多変量解析法入門』)

因子分析の勉強

 昨日は、友人とやっている勉強会で、因子分析の勉強をした。教科書は、永田・棟近『多変量解析法入門』の第13章(の一部)。神テキストです。


多変量解析法入門 (ライブラリ新数学大系)

多変量解析法入門 (ライブラリ新数学大系)


 この教科書では因子分析の扱いは大きくなく、主成分分析には1章が当てられているのに対して因子分析は「その他の方法」の一つとしてしか取り上げられてなくて、約9ページ分しか解説はないのだが、それでも説明と数式の展開が分かりやすいので助かる。また、主成分分析との理論的な関係が分かりやすい。(主成分分析の章については以前のエントリを参照。)
 因子分析については、我々の勉強会では南風原『心理統計学の基礎』という教科書で既に勉強していたのだが、それとは別の視点から数式の展開を学ぶことができたという感じ。


 ただし永田・棟近テキストでの因子分析の解説は、ページ数があまりないこともあって、

  • 因子の抽出法は反復主因子法のみ
  • 回転は直交回転のみ

 となっている。
 
 

反復主因子法

 この教科書で解説されているのは反復主因子法である。
 まず、


f:id:midnightseminar:20140811104652p:plain
 

 こういうデータがあったとして、この教科書では2因子を想定して、


{
u_{i \rm{1}} = b_ {\rm 11} f_{i \rm{1}} + b_{\rm{12}} f_{i \rm{2}} + \varepsilon_{i \rm{1}}
}
{
u_{i \rm{2}} = b_ {\rm 12} f_{i \rm{1}} + b_{\rm{22}} f_{i \rm{2}} + \varepsilon_{i \rm{2}}
}
{
u_{i \rm{3}} = b_ {\rm 13} f_{i \rm{1}} + b_{\rm{32}} f_{i \rm{2}} + \varepsilon_{i \rm{3}}
}
{
u_{i \rm{4}} = b_ {\rm 14} f_{i \rm{1}} + b_{\rm{42}} f_{i \rm{2}} + \varepsilon_{i \rm{4}}
}


 ・・・(13.34)


 こういうモデルを想定する。このモデル式はとにかく頭にずっと浮かんでいる必要があって、因子分析というのはこの{b}(因子負荷量)とか{f}(共通因子、因子得点)を推定する方法のことだ({\varepsilon}もだけど)。回転のことも考えると、「良い感じで解釈できる組み合わせになるように」推定するということ。
 {u}は科目によっても異なるし生徒によっても異なる値だが、{b}は科目によって変わるけど全生徒を通じて同じ値、{f}は生徒によって異なるけど全科目を通じて同じ値になる。
 要するに、{b}{f}で表される部分は、「変数や生徒に共通する成分」によって(情報量、分散が)説明できる部分であり、それ以外の成分……つまり生徒&科目によって異なる独自の要因と、観測誤差とを、まとめて{\varepsilon}に入れている。


 {b}は因子負荷量で、{f}{u}の相関を表す。
 この教科書ではまず直交解を求めるために、

  • 共通因子{f}どうしは無相関
  • 独自因子{\varepsilon}どうしは無相関
  • 共通因子{f}と独自因子{\varepsilon}の間も無相関

 と仮定される({f}どうしが無相関なので直交)。
 2番目の仮定はすこしイメージがしづらいが、とにかく「生徒又は科目に共通の成分で説明できる情報は全部、{b}{f}からなる項に吸収されるので、独自因子間も無相関になるということだ。
 これらが全部無相関ということは、さっきの(13.34)のモデルでいうと、{u}の分散(情報量)が{b}{f}で表される項の分散(共通性)と、{\varepsilon}の項の分散(独自性)に分解できるということであり、{u}の分散は標準化されてるわけだから、足すと1である。


 で、こっからいろいろ計算が解説されるのだが、{u}の相関行列を{\Pi}として、独自因子の分散(独自性)を{d_1 ^2}{d_2 ^2}{d_3 ^2}{d_4 ^2}、とすると、


{ \displaystyle
  \Pi = \left(
    \begin{array}{cccc}
      1  &  \rho_{12}  &  \rho_{13}  &  \rho_{14}  \\
      \rho_{21}  &  1  &  \rho_{23}  &  \rho_{24}  \\
      \rho_{31}  &  \rho_{32}  &  1  &  \rho_{34}  \\
      \rho_{41}  &  \rho_{42}  &  \rho_{43}  &  1
    \end{array} \right)
}


{ \displaystyle
  B = \left(
    \begin{array}{cccc}
      b_{11}  &  b_{12}  \\
      b_{21}  &  b_{22}  \\
      b_{31}  &  b_{32}  \\
      b_{41}  &  b_{42}
    \end{array} \right)
{ },{ }
  D = \left(
    \begin{array}{cccc}
      d_1 ^2  &  0  &  0  &  0  \\
      0  &  d_2 ^2  &  0  &  0  \\
      0  &  0  &  d_3 ^2  &  0  \\
      0  &  0  &  0  &  d_4 ^2
   \end{array} \right)
}


 という行列に関して、

 
{
\Pi = B B' + D
} ・・・(13.39)


 という関係が成り立つことが示される。({B'}{B}の転置行列。)
 んで、


{\displaystyle
\Pi - D = \left(
    \begin{array}{cccc}
      1-d_1 ^2  &  \rho_{12}  &  \rho_{13}  &  \rho_{14}  \\
      \rho_{21}  &  1-d_2 ^2  &  \rho_{23}  &  \rho_{24}  \\
      \rho_{31}  &  \rho_{32}  &  1-d_3 ^2  &  \rho_{34}  \\
      \rho_{41}  &  \rho_{42}  &  \rho_{43}  &  1-d_4 ^2
    \end{array} \right)
} ・・・(13.41)


 というふうに直すと、対角要素は「1から独自性を引いた量」なのだからこれは共通性であるということになり、この共通性が推定できれば、さっきの(13.39)式から、因子負荷量{b}たちが計算できることになる。
 だからまず共通性を推定するのだが、たとえば変数{\it{u}_1}に関する共通性は、{\it{u}_1}という変数の情報量(ばらつき)のうち{u_2}{u_3}{u_4}と共通の要因で表現できる割合ということだから、{u_2}{u_3}{u_4}を説明変数とする重回帰モデルで{u_1}を説明したときの寄与率のことであると考えてみる。そうやって推定した共通性を(13.41)の対角要素に入れた行列を(13.41-2)としておく。


 ところが、この方法はあまり精度が高くない。どういことかというと、理論的には(13.41-2)が得られれば、この行列をスペクトル分解して得た固有値と固有ベクトル(この場合は2因子モデルだから2個ずつのみ使う)から因子負荷量{b}たちを計算できるので、その計算結果から{B B'}をつくって(13.41)式の行列と見比べてみるのだが、値が合わない。
 なので、(13.41-2)の対角要素を、スペクトル分解によって得た共通性の値に入れ替えてみて、また入れ替え後の(13.41-2)をスペクトル分解してみて一致するかどうか確かめるという作業を繰り返す。こうするとだんだん値が近づいていくので、追加的に繰り返してもあまり値が乖離しないようになったところで「収束した」と見なして計算を終える。
 これが反復主因子法である。
 

 ちなみに反復主因子法による式の展開は、↓のpptにも詳しい解説が載っていて、永田・棟近テキストの説明とほぼ同じ内容になっている。(変数の数とかは違うけど)
 主因子法などの基礎数学
 このpptの最後のほうに、反復主因子法の流れを示すフローチャートが書かれているのだが、これは分かりやすい(笑)


f:id:midnightseminar:20140811104829p:plain
(上記のpptより)


 ここでSMC法というのは、さっき重回帰分析になぞらえて共通性を推定したときの方法のこと。
 
 
 あとは、この教科書ではバリマックス回転の解説が述べられている(斜交回転についてはまったく触れてない)。
 行列の回転は三角関数を用いた基本的な公式があるので、因子負荷行列と共通性を回転させることを考える。回転させても共通性の推定値は不変である(回転の不定性)という仮定から、好きなだけ回転すればいいということになるのだが、どこまで回転するかというと、因子負荷行列の各列の要素の2乗の分散を計算し、その分散が最大になるところまで回転する。
 これはどういうことかというと、変数{u_1}から{u_4}に対応する、因子負荷量{b_{11}}{b_{41}}のばらつきと{b_{12}}{b_{42}}のばらつきが最大になるようにするということだ。因子負荷量がばらついているということは、いわゆる「メリハリがある」という状態で、解釈しやすい形になっている可能性が高いので。
 メリハリが「ない」とは、たとえばある共通因子がすべての変数に対して似たような大きさの因子負荷を持つ場合であり、それって観測変数のあいだの重心を取ったような感じだから主成分分析の第一主成分にちかく(主成分分析の章については以前のエントリを参照。)、観測変数を要約できているとは言えても、観測変数間の傾向の違いを説明するのには使えない。
 
 

因子抽出法として何を選ぶべきか

 この教科書の因子分析の解説は、反復主因子法のみに限定されている。が、推定方法は他にもいろいろあって、大きく分けると(反復)主因子法の他に、最尤法や最小二乗法があって、最小二乗法はこれがまた「重み付けのない最小二乗法」「重み付けした最小二乗法」「一般化最小二乗法」なんてのがある。Rのfa関数とかで因子分析を行うときも、この因子抽出法は自分で指定しなければならない。
 それぞれの、数学的な理解はまだできていないので、因子分析を詳しく解説した本をまた買ってきて勉強しようと思ってるんですが。


 で、実践的には「けっきょくどの因子抽出法を選べばいいの?」ってのが気になるわけだが、これについてはネット上でも大変役に立つ解説がある。
 たとえば以下のようなページ(資料)。

因子分析の因子抽出方法について | Sunny side up!


・オススメのステップ
 まず最初は迷うことなく最尤法を使います。ただ、最尤法がうまく適合しない場合も多いと思います。
 (中略)
 別の推定法として候補に挙がるのは、最小二乗法です。
 (中略)
 最小二乗法でも不適解が出たり、収束しなかった場合は、反復主因子法が次の候補です。

因子数決定法,斜交回転法,階層因子分析


(1) 最尤法と最小2乗法をやってみる。
(2) 同じ結果なら最尤法を採用
(3) 気になるほど異なる結果なら最小2乗法を採用
(4) 初心者は反復主因子解のほうがいいかもしれない。不適解が少ない。
(5) ただし,解が収束すれば,最小2乗法と反復主因子法とは同じ


 いずれも、計算の過程とかを詳しく説明しているわけではないものの、それぞれの手法が抱える本質的な課題と、実務上の優先順位を付け方が解説されていてたいへん参考になる。
 
 

その他、教科書に対するメモ

 その他、永田・棟近テキストを勉強する上でのメモ。


 主成分分析の第9章でも同じだったが、数式の展開で分からないところがでてきたときは、以下のような点に注意して考えるとだいたい分かる。
①変数が標準化されている結果として、たとえば以下のような性質になるという点。

  • 平均はゼロ
  • 分散と標準偏差は1
  • 変数ベクトルの2乗は分散に一致(=1)
  • 共分散は相関係数に一致

②「n-1」というのが出てきた場合、これは不偏分散の分母(自由度)のことじゃないかと疑ってみる。
③行列やベクトルの計算をするときに、基本的な公式を何度も見直す。(逆行列や対象行列の性質とか)


 また、p.204の下のほうで、第5章の重回帰分析のところに出てくる(5.63)式が参照されいる。その(5.63式)の前提となる(5.61)式と(5.62)式(p.79)の解説のところで、「ここで、平方和と偏差積和を次のように定義する」と書かれているのだが、これは(5.61)式が平方和で(5.62)式が偏差積和であるという意味ではないので注意が必要。(5.61)でj=kになる組み合わせだけ平方和だから、このように書かれている。(相関係数行列の対角要素だけは1になることとか、分散共分散行列の対角要素だけは分散でほかは共分散であるのと同じこと。)


 なお、13章の練習問題は、13.5〜13.7が因子分析のところに該当する。13.5は難しいので答えをみて計算を理解すればいいと思った。13.6と13.7はカンタン。