論理の流刑地

地獄の底を、爆笑しながら闊歩する

対応分析(correspondence analysis, CA)では一体何を「分解」しているのか

Introduction

小野滋さんの「読書日記」が久しぶりに更新を再開し、ひとり小躍りするGW中盤戦...

前々回の記事で、SVDとはなんぞや、について解説した。
ronri-rukeichi.hatenablog.com


この記事のなかで、対応分析も多重対応分析も結局はSVDだよーってちらっとふれたんだけど、とりあえず今回は対応分析がSVDであることを示さんとす。

目の前の仕事が煮詰まっていることからの現実逃避もかねてね...

[参考資料]

  1. Clausen(藤本訳)「対応分析入門」
  2. Greenacre, 1984 , Theory and Applications of Correspondence Analysis

対応分析入門 原理から応用まで 解説◆Rで検算しながら理解する

対応分析入門 原理から応用まで 解説◆Rで検算しながら理解する

前提知識

とりあえず前々回記事からの抜粋で復習すると、

行列AのSVDが得られているとき、降順に並んだj \ ( j <= k ) 個の特異値と、それに対応する左右の特異ベクトルからなる
  A_{j^*}  = \Sigma_{i = 1}^j \lambda_j u_i  v_i  は、
すべてのランクjの行列X_{j^*}のなかで、距離|| \boldsymbol{A - X_{j^*}}||_F を最小化するような行列となる。


すなわち、この意味で  A_{j^*} は、Aの「ランクjの最小二乗近似」であるといえる。

フロベニウスノルムを最小化するような近似行列を得るような特異値& 左右特異ベクトルのセットを得るための方法として、SVDはあった。
だから、上の説明でいうところの、A分解の対象としたい、データ全体の適切な散らばりの表現の行列を指定しさえすれば、色々な応用がきく。

実際に、Greenacre(1984, pp.348-9)においては、Aに様々な行列を選ぶことで、さまざまな手法がSVDとしてとらえられることを一覧化している。
(ただし、Aだけでなく、距離計算のときの重み付けを指定する正定値対称行列\Omega , \Phiの指定も考える必要がある。これに関しては今まで説明していない一般化SVDという枠組みが関係してくるが、説明はおいおい...)

SVDとしての対応分析

いきなり答えから載せちゃうと、対応分析は、
行列 D_r^{-1/2} ( P - r c^T ) D_c^{-1/2}特異値分解している。

  • D_rは、対角成分に各行の周辺相対度数をとる対角行列、D_cは、対角成分に各列の周辺相対度数をとる対角行列、
  • rは各行の周辺相対度数をとるベクトルで、cは各列の周辺相対度数をとるベクトルである。
  • Pは「同時確率行列」と呼ばれるものだが、要するに相対度数の行列で、クロス表を総度数で割ったものである。

アルファベットがゴツゴツとした感じで並んでて感じ悪い行列だが、
この意味は(初等的なカテゴリカル・データの扱い方を学んだ経験のある者からすれば少なくとも)比較的明確である。

まず、 D_r^{-1/2}, \  D_c^{-1/2}はそれぞれ対角行列であるが、対角行列を左からかける場合対角成分の値を各行にかけたものが、
対角行列を右からかける場合対角成分の値を各列にかけたものが、得られる。
よって、i行j列目の分母は、完全独立が成立している場合の相対期待度数の平方根となる。

つぎに、 P - r c^Tだが、これは相対度数から完全独立が成立している場合の相対期待度数を引いたものである。これが分子となる。

よって、行列 D_r^{-1/2} ( P - r c^T ) D_c^{-1/2}の各要素というのは
(相対度数- 完全独立が成立している場合の相対期待度数)/(完全独立が成立している場合の相対期待度数の平方根
となっている。

さて、ここで D_r^{-1/2} ( P - r c^T ) D_c^{-1/2}にSVDを適用するということは、
フロベニウスノルム || D_r^{-1/2} ( P - r c^T ) D_c^{-1/2} || への最小近似を提供するような分解を得るということである。

フロベニウスノルムの定義より、 || D_r^{-1/2} ( P - r c^T ) D_c^{-1/2} ||というのは、
すべての行列の要素に関して、その要素の自乗を足し合わせたものであるので、
要するに、

(相対度数- 完全独立が成立している場合の相対期待度数)の二乗/(完全独立が成立している場合の相対期待度数) の総和

となる。

これはどこかで見たことがないだろうか....
そう、これはカイ自乗値の定義式そのものである

つまり、

対応分析というのは、分析対象となる二重クロス表から算出されるカイ自乗値への最小近似を実現するような特異値と特異ベクトルを、SVDによって得ているだけの処理である

といえるのである。

SVD後のこまかい処理の話:対応分析から得られるスコアはどうやって得られるか

そしてこっからは対応分析に関するSVD「後」の話になる。
 A = D_r^{-1/2} ( P - r c^T ) D_c^{-1/2}とし、このSVDから A = USV^Tという分解が得られる。

ここから、 座標(行・列)のスコアに関して、重み付きの自乗和が固有値と一致するような形で特異ベクトルを変換したい。
すなわち、行スコアをF_r 、列スコアをF_cとすれば、
   (D_r^{1/2} F_r)^T D_r^{1/2}F_r=  F_r^T D_r F_r = S^2
   (D_c^{1/2} F_c)^T D_c^{1/2}F_c=  F_c^T D_c F_c = S^2
が成り立つようにしたい。

SVDの性質より、 U^T U   = V^T V = I が成り立っているので、
 F_r = D_r^{-1/2} U S ,  F_c = D_c^{-1/2} V S という変換を施せば、

  F_r^T D_r F_r = S^T U^T  D_r^{-1/2} D_r D_r^{-1/2} U S  = S^T U^T U S = S^2
  F_c^T D_c F_c = S^T V^T  D_c^{-1/2} D_c D_c^{-1/2} V S  = S^T V^T V S = S^2
という形で上制約を満たすスコアが得られる。

これが対応分析で得られる行/列のスコア(座標)である。

Conclusion

ってことで、対応分析という手法は、
フロベニウスノルムがカイ自乗値となるような行列に対してSVDを適用したのちに、
スコアの重み付き自乗和が固有値(=特異値の自乗)と一致するように左右の特異ベクトルを変換するだけの簡単なお仕事だとわかった。

ちなみにMCAもほとんど同じようなロジックであるが、ちょっと疲れたので気が向いたらまたまとめよう


Def Tech - Catch The Wave

そんじゃ、Enjoy!