R_biplot の変更点 - アールメカブ

アールメカブ


R_biplot の変更点


[[Rの備忘録]]

2008年4月24日の日録にも書いたが


R の biplot 関数なのだが,この出力の x 軸,y 軸それぞれの数値は何を意味しているのか,今更ながら,そんなことを疑問に思った.
R の biplot 関数なのだが,この出力の x 軸,y 軸それぞれの数値は何を意味しているのか?
さて [[垂水先生:http://case.f7.ems.okayama-u.ac.jp/statedu/hbw2-book/node179.html]]や[[青木先生:http://aoki2.si.gunma-u.ac.jp/LaTeX/biplot.pdf]]のサイトの情報を横目に見つつ,R の実装を確認してみよう. 

例えば
 x <- princomp(USArrests)
 biplot(x)

とすると,Hawaiiが右下,上側 X 軸が 400 のあたり,右側 Y 軸が -500 あたりにプロットされているのだが,

 > x$scores[rownames(x$scores) == "Hawaii"]
 [1] 123.536106 -24.291208   3.724443   3.472849

と関係ない数値なんだが.loadings の方もグラフのメモリと一致していないんだが,なんか勘違いしているのか?
と関係ない数値である.loadings の方もグラフのメモリと一致していない.では何なのか?

 > caith.ca <- corresp(caith, nf = 4)
 > biplot ( caith.ca)
 > caith.ca

これも黒髪のスコアはblack   2.45  1.651 で,グラフ上にはちゃんとプロットされているのだが,グラフの目盛のどこを見ても 2 を越える範囲はない.
--- それで,冷静に考えて

そういう場合は,関数の定義を確認しよう!

 > getS3method("biplot", "default")
 > getS3method("biplot", "princomp")
 > getS3method("biplot", "correspondence")

の中身を検討した.見てみて,何だ,そうかと.
すると,解決する.

 > t(t(USA$scores[, 1:2])/  (USA$sdev[1:2] * sqrt(USA$n.obs))  )
 > t(t(USA$loadings[, 1:2]) *  (USA$sdev[1:2] * sqrt(USA$n.obs))  )
によって生成される得点による各州の座標は,下の X 軸,左の Y 軸と一致している.