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の人が多い。