読者です 読者をやめる 読者になる 読者になる

カテゴリカルデータ解析読書メモ(第9章)

対応分析

カテゴリカルデータにおいて各カテゴリーの変数に適当な数字を割り当てると、2つのカテゴリ間で散布図を書いたり相関係数を計算することができる。このとき、相関係数が最大となるような数値をカテゴリー変数に割り当てることで、カテゴリー間の関係を表現、探索する方法が対応分析である。
まず、カテゴリー変数に適当に数字を割り当ててプロットしてみる。テキストでは円の大きさを度数の対数に対応させているが、分かりにくいので普通に度数に比例させた。

# カテゴリーに数値を割り当て、度数に円の大きさを対応させてプロットする
plot(c(0,6), c(0,4), type = "n")
for(j in 1:5){
  for(i in 1:3){
    points(j,i,cex = tabledata[i,j]/mean(tabledata))
  }
}

f:id:Rion778:20160731005044p:plain
この状態では行と列の間に相関はほとんど見られない。
相関係数の最大化は、MASSパッケージのcorresp()関数で実行できる。

# corresp()を使って相関係数を最大化する
result <- corresp(tabledata, nf = 1)
result
plot(-3:2, -3:2, type = "n", xlab = "Urban", ylab = "Status")
for(i in 1:3){
  for(j in 1:5){
    points(result$cscore[j], result$rscore[i],
           cex = (tabledata[i, j])/mean(tabledata))
  }
}

plotしてみると、度数の多いセルが対角線に近い位置になるよう並んでいることが分かる。
f:id:Rion778:20160731005149p:plain
同様の図は単にcorresp()の結果をplotするだけでも得られる。

plot(result)

f:id:Rion778:20160731005211p:plain
nf = 2とすることで、各カテゴリーを二次元データで表現できる。これをplotすると自動的にバイプロットが作成され、カテゴリ間の関係を視覚的に確認することができる。

result <- corresp(tabledata, nf = 2)
plot(result)

f:id:Rion778:20160731005518p:plain

多重対応分析

テキストのデータだと少し分かりにくいので、MASSパッケージのfarmsデータを例にする。

> summary(farms)
 Mois   Manag  Use    Manure
 M1:7   BF:3   U1:7   C0:6  
 M2:4   HF:5   U2:8   C1:3  
 M4:2   NM:6   U3:5   C2:4  
 M5:7   SF:6          C3:4  
                      C4:3  

farmsは牧草地の環境や管理、利用方法についてのデータで、4つのカテゴリカル変数を持つ。
テキストではMASSパッケージのmca()関数を使用しているが、ここではFactoMineRパッケージのMCA()関数を使用してみる。

library(FactoMineR)
result <- MCA(farms)

MCA()ではplot = FALSEと明示的にOFFにしなければ実行時にプロットが複数表示される。カテゴリーによるバイプロットの結果の部分を示そう。軸名の部分には固有値の割合も同時に示されている。
f:id:Rion778:20160731012703p:plain
この例では、第2軸までではデータの変動の40%程度までしか説明できていない。固有値と累積割合はresult$eigで確認できる。

> result$eig
         eigenvalue percentage of variance
dim 1  6.499174e-01           2.166391e+01
dim 2  5.551954e-01           1.850651e+01
dim 3  5.169428e-01           1.723143e+01
dim 4  3.819977e-01           1.273326e+01
dim 5  3.102940e-01           1.034313e+01
dim 6  2.208944e-01           7.363148e+00
dim 7  1.332712e-01           4.442372e+00
dim 8  8.908661e-02           2.969554e+00
dim 9  7.744688e-02           2.581563e+00
dim 10 4.752489e-02           1.584163e+00
dim 11 1.742866e-02           5.809553e-01
dim 12 2.442300e-32           8.140999e-31
       cumulative percentage of variance
dim 1                           21.66391
dim 2                           40.17043
dim 3                           57.40185
dim 4                           70.13511
dim 5                           80.47825
dim 6                           87.84139
dim 7                           92.28377
dim 8                           95.25332
dim 9                           97.83488
dim 10                          99.41904
dim 11                         100.00000
dim 12                         100.00000

また、各カテゴリーがどの程度軸に寄与しているかはresult$var$contribで確認できる。

> result$var$contrib
          Dim 1      Dim 2        Dim 3      Dim 4      Dim 5
M1  1.997032543  6.3987899 6.653719e-04  2.8555287 21.7714144
M2  1.332351513  6.1585438 9.578125e+00 11.0329611  0.1482187
M4  1.942796388  2.6231723 1.344942e+00  4.5402859 46.1550354
M5  9.185471009  2.3084618 8.911297e+00  0.1010620  0.5528613
BF  1.253592590  8.4488996 5.772589e+00 12.9978140 11.0988568
HF  0.474068031 12.2938426 3.762828e+00  3.7546643  2.2497386
NM 20.591151562  3.0315099 1.913005e+00  1.6407989  0.6060488
SF  9.718852258 12.3551134 1.719340e+00  0.2505076  3.1151790
U1  6.648880395  1.2997710 1.072406e+01  0.2151174  2.9499596
U2  9.699621774  6.0048359 2.352817e-02  4.1868505  0.9439940
U3  0.789421444  3.0648808 1.655492e+01  9.8408916  0.6452055
C0 20.591151562  3.0315099 1.913005e+00  1.6407989  0.6060488
C1  0.237784097 12.3464560 7.134416e+00 17.8537482  5.6832374
C2  5.424873542  4.5789897 4.094891e-01 24.3956217  2.2873335
C3  0.002754719  0.1617089 2.943082e+01  3.1784495  0.8359484
C4 10.110196574 15.8935143 8.069635e-01  1.5148998  0.3509199

これを見ると、第1軸にはNM、C0、C4などの影響が大きく、第2軸にはHF、SF、C1、C4などの影響が大きい。