対応分析
カテゴリカルデータにおいて各カテゴリーの変数に適当な数字を割り当てると、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)) } }
この状態では行と列の間に相関はほとんど見られない。
相関係数の最大化は、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してみると、度数の多いセルが対角線に近い位置になるよう並んでいることが分かる。
同様の図は単にcorresp()の結果をplotするだけでも得られる。
plot(result)
nf = 2とすることで、各カテゴリーを二次元データで表現できる。これをplotすると自動的にバイプロットが作成され、カテゴリ間の関係を視覚的に確認することができる。
result <- corresp(tabledata, nf = 2) plot(result)
多重対応分析
テキストのデータだと少し分かりにくいので、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にしなければ実行時にプロットが複数表示される。カテゴリーによるバイプロットの結果の部分を示そう。軸名の部分には固有値の割合も同時に示されている。
この例では、第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などの影響が大きい。