
MASSパッケージをインストール&ロードしてから以下のスクリプトを実行する。
X<-read.table("ca_sample.txt", header=T)
test.ca <- corresp(X, nf=5)
rx <- test.ca$rs[,1]
ry <- test.ca$rs[,2]
cx <- test.ca$cs[,1]
cy <- test.ca$cs[,2]
rx <- -rx
cx <- -cx
quartz(display="", width=10, height=10)
plot(rx,ry, xlim=c(-3,3), ylim=c(-3,3), type="n",ann=F)
plot(cx,cy, xlim=c(-3,3), ylim=c(-3,3), type="n",ann=F)
text(rx,ry, rownames(test.ca$rs), col="black")
text(cx,cy, rownames(test.ca$cs),col="blue", cex=1.5)
segments(-3,0,3,0,lty=2)
segments(0,-3,0,3,lty=2)
出力結果は以下の通り。
ca_sample.txt には『Exploring Textual Data』の第三章「Correspondence Analysis of Lexical Tables」冒頭のサンプルデータを利用した。
この本での計算結果と、ここでRが算出した値は第1軸方向で逆になので、上記スクリプトには第1主成分の値を反転させる手続きが含まれている。このような措置をしない場合に test.ca を作図するスクリプトは以下の通り。
biplot(test.ca,cex=c(1,1.5))
cexでサンプルデータの相関行列における列名を行名より大きく表示するよう指定している。出力結果は以下の通り。
test.ca に含まれる(サンプルデータの行ラベルと列ラベルに関する)2種類の表を別々にわけてから作図すると少し違った結果になる。
biplot(test.ca$rs, test.ca$cs,cex=c(1,1.5))
上記の作図結果を見比べると、同一のデータ test.ca をもとにしているにも関わらず、座標に微妙な差異が生じている(一枚目は第1主成分を正負反転させたが、それをもとにもどしても差異は生じている)。大凡の位置関係は共通しているが、この点は気になる。
結果が異なるのは、作図の際におそらく biplot が「各主成分の主成分得点の分散が1になるように調整して散布図を描く」ということをしているためか、「それぞれの成分に対して分散が固有値に一致するように」調整しているためだと推察できる。あるいはこのふたつとは異なる方法かもしれないが、よくはわからない。いずれにせよ調整された結果を反映して2種類の目盛りがつけられているのだと考えられる。
plot を使って描いたものにはこうした調整は一切していない。そのまま第1主成分得点と第2主成分得点を使って作図している。
固有値(λ)を求めるスクリプトは以下の通り。
eigenvalues <- test.ca$cor^2
round(eigenvalues, 4)
各行の計算結果はそれぞれ次のようになる。
[1] 3.540154e-02 1.311474e-02 7.301114e-03 6.243913e-03 4.220778e-33
[1] 0.0354 0.0131 0.0073 0.0062 0.0000
λ1からλ5まであるがλ5は 0.0000 になったので無視し、残った4つの固有値について寄与率を計算する。寄与率は固有値の総計に占める各固有値の割合をいう。
round(100*eigenvalues/sum(eigenvalues),2)
[1] 57.04 21.13 11.76 10.06 0.00
以上の結果から第1と第2主成分で(λ1からλ4までの)4次元データが持つ情報のうち約78パーセントを説明できるということがわかる。この数値が80パーセントを切るのは分析の妥当性にとって望ましくない。
ade4パッケージをインストール&ロードしてから以下のスクリプトを実行する。
X<-read.table("ca_sample.txt", header=T)
test <- as.data.frame(X)
test.coa <- dudi.coa(test, scannf=FALSE, nf=5)
scatter(test.coa, posieig="none")
correspで扱ったのと同じデータを使った。2行目で data.frame 化している。posieigを省略すると左上に寄与率を表示するヒストグラムが描かれるが、そのために隠れる項目などがあるので none とした。
>> フリーソフトによるデータ解析・マイニング第26回「Rと対応分析」
>> R 多重クロス表を多重対応分析