Rによるデータサイエンス】対応分析
【定義】
対応分析とは。
分割表において行の項目と列の項目の相関が最大になるように、行と列の双方を並び替え、関連性が強いもの(あるいはパターンが似ているもの)同士が近似になるような値を取るように処理を行う方法。
【具体例を使用した練習】
1.パッケージMASSの読み込み
パッケージMASSを読みこみ、その中のデータセットcaithを使用する。
> library(MASS) > caith fair red medium dark black blue 326 38 241 110 3 light 688 116 584 188 4 medium 343 84 909 412 26 dark 98 48 403 681 85
2.対応分析を実施する
corresp関数を使用して対応分析を実施する。
結果として、
$cor:正準相関(canonical correlation)係数、
$rscore:行の得点、
$cscore:列の得点、
$Freq:用いた頻度データ
が得られる。サマリーを確認すると、corが4つ、rscoreが16個、cscoreが20個、Freq(元のデータ)が20のデータが得られている。
> caith.corresp<-corresp(caith,nf=4) > summary(caith.corresp) Length Class Mode cor 4 -none- numeric rscore 16 -none- numeric cscore 20 -none- numeric Freq 20 -none- numeric
実際に見ると確かにサマリー通りである。
> caith.corresp$cor [1] 4.463684e-01 1.734554e-01 2.931691e-02 1.134031e-16 > caith.corresp$rscore [,1] [,2] [,3] [,4] blue -0.89679252 0.9536227 2.1884132 1 light -0.98731818 0.5100045 -1.0837859 1 medium 0.07530627 -1.4124778 0.1894089 1 dark 1.57434710 0.7720361 -0.1482208 1 > caith.corresp$cscore [,1] [,2] [,3] [,4] fair -1.21871379 1.0022432 0.4271282 -0.8692696 red -0.52257500 0.2783364 -4.0268545 -1.3400421 medium -0.09414671 -1.2009094 0.1103959 -0.8453208 dark 1.31888486 0.5992920 0.3450676 -1.2251588 black 2.45176017 1.6513565 -1.5736976 1.1609621 > caith.corresp$Freq Column Row fair red medium dark black blue 326 38 241 110 3 light 688 116 584 188 4 medium 343 84 909 412 26 dark 98 48 403 681 85
3.各得点の寄与率や累積寄与率について考察する
関数correspは寄与率を返してくれないため、正準相関$corを用いて算出する。
「固有値=正準相関の2乗」で求められる。
また、寄与率が固有値の和に占める固有値の割合であることを思い出すと、寄与率は次のようにして求められる。
寄与率=(正準相関の2乗)/(正準相関の2乗の和)=(固有値)/(固有値の和)
これをRで計算すると次のようになる。
> caith.eigenValue<-caith.corresp$cor^2 > round(caith.eigenValue,3) [1] 0.199 0.030 0.001 0.000 > (寄与率<-round(100*caith.eigenValue/sum(caith.eigenValue),2)) #寄与率の単位は% [1] 86.56 13.07 0.37 0.00 > (累積寄与率<-cumsum(寄与率)) [1] 86.56 99.63 100.00 100.00
累積寄与率の計算には累積和を求める関数cumsumを使用した。
第2固有値までの累積寄与率が99.63%なので、第1と第2の固有値に対応する得点のみを分析すればよいことが分かる。
4.結果の可視化
対応分析の実施による行の得点は$ rscoreは、次のようになる。
> caith.corresp$rscore [,1] [,2] [,3] [,4] blue -0.89679252 0.9536227 2.1884132 1 light -0.98731818 0.5100045 -1.0837859 1 medium 0.07530627 -1.4124778 0.1894089 1 dark 1.57434710 0.7720361 -0.1482208 1
列の得点は$cscoreは、次のようになる。
> caith.corresp$cscore [,1] [,2] [,3] [,4] fair -1.21871379 1.0022432 0.4271282 -0.8692696 red -0.52257500 0.2783364 -4.0268545 -1.3400421 medium -0.09414671 -1.2009094 0.1103959 -0.8453208 dark 1.31888486 0.5992920 0.3450676 -1.2251588 black 2.45176017 1.6513565 -1.5736976 1.1609621
第2固有値までの累積寄与率が99.63%なので、第1,2の得点の散布図を作成すると次のようになる。
> biplot(caith.corresp)
5.結果の解釈
黒字が目の色の得点、赤字が髪の色の得点であることに注意すると、
目の色がdarkの人は髪がblackの人が多く、目の色がblueかlightの人は髪色がfairの人が多い。