趣旨
コレスポンデンス分析についてのメモを以下に記します。
コレスポンデンス分析
コレスポンデンス分析(対応分析)の具体的な計算方法の説明としては「対応分析は関係をどのように表現するのか(藤本一男,『津田塾大学紀要』第 52 号(2020 年)169-184 頁」が、具体的である。Appendix Aにアルゴリズムが記載されている。
このアルゴリズムは標準的なものであり他の文献でも同じアルゴリズムが見られる( 例えば以下:http://www.econ.upf.edu/~michael/stanford/caipA.pdf, https://ronri-rukeichi.hatenablog.com/entry/2018/05/01/021309 , https://elsur.jpn.org/mt/2018/05/002635.html)。
以下はMatlabでコードした例である。以下のコードはNにクロス集計表(各要素が該当件数)を与えて実行する。アルゴリズムのはじめにNを全件数で除して同時確立分布に変換する(文献によってはこの変換を行わない場合がある)。
分析結果を計算した列についての分析と行についての分析を重ね合わせてプロットする。
[F, G, D ] = ca3( N );
plot( F(:,1), -F(:,2), 'o' );
hold on;
plot( G(:,1), -G(:,2), 'x' );
hold off;
function [F, G, D] = ca3( N )
P = N / ( sum( N,'all' ) ); % P is correspondence matrix
r = sum( P, 2 ); % r is row masses
c = sum( P, 1 ); % c is column masses
Dr = diag( r );
Dc = diag( c );
S = Dr^(-0.5)*(P-r*c)*Dc^(-0.5);
[U,D,V]=svds( S, 3 );
Phi = Dr^(-0.5)*U;
Gamma = Dc^(-0.5)*V;
F = Phi * D;
G = Gamma * D;
end
重ね合わせについて
コレスポンデンス分析には、列の分析と行の分析の重ね合わせについて議論があった。
https://tsuda.repo.nii.ac.jp/?action=repository_uri&item_id=114&file_id=22&file_no=1
ところが、両軸に主座標を用いるフレンチプロットではなく、対称バイプロットを用いることで、行と列の分析を重ね合わせが解釈可能になるという。
https://bob3.hatenablog.com/entry/2022/01/15/123412
https://bob3.hatenablog.com/entry/2022/01/22/180059
具体的には列の変数と行の変数の座標の内積をとると、その二つの事象の同時確率の(同時確率が全て等しいと仮定したときの)期待値からのずれを表すのだという。
上記matlabスクリプトの記号と文法を用いて計算すると
% 以下を関数ca3の終わりで計算する
I = Dr^(-1)*(P - r*c)*Dc^(-1);
F = Phi * D^(0.5); % 対称バイプロットの座標
G = Gamma * D^(0.5); % 対称バイプロットの座標
% このときErは0行列になる。
Er = I(j,i)-F(j,1)*G(i,1)+F(j,2)*G(i,2)
上記でIの計算でDrとDcの逆数がかけられているのは、各列・各行のデータ数の不均衡を是正するためである。
主座標、標準座標、対称バイプロットで用いる座標の違い
主座標、標準座標、対称バイプロットの違いは、座標をもとめるときの特異値のかけ方である。上記matlabスクリプトの記号を用いれば、以下のとおりになる。
%関数ca3の最後で主座標、標準座標、対称バイプロットで用いる座標は
%以下に計算できる。
%主座標
F = Phi * D;
%標準座標
F = Phi;
%対称バイプロットで用いる座標
F = Phi * D^(0.5);
コレスポンデンス分析のソフトウェアには、主座標を用いてプロットするフレンチプロットを行う場合と、対称バイプロットを行う場合がある。フレンチプロットと対称バイプロットの結果は似たものになるが混乱しないようにしたい。
・・・・・・・・・・・・・・・・