pairs関数(対散布図とも言う)はデフォルトの設定では黒い点でプロットするだけなので、グラフにより情報を持たせるため、グラフをカスタマイズする。対散布図は行方向、列方向に同じ数の図が描かれるが、i行j列の位置にある図とj行i列の位置にあるグラフは実質同じなので、工夫したグラフを試してみようということである。
ここではおなじみのirisデータを基に、右上のグラフには相関係数の絶対値、左下のグラフにはデータを色で分けたグラフと、直線性が強い組についてのみ回帰直線を描いてみることにする。
右上、左下のグラフを制御するのはpairs関数の引数のうち、panel、upper.panel、lower.panelである。デフォルトではpanelは散布図を描くようになっており、upper/lower.panelはそれを使うようになっているので、点による散布図が書かれることになる。upper/lower.panelの引数に与える関数を書き換えることで、グラフに手を加えることができる。
upper <- function(x, y, ...){ # 右上の散布図を設定 oldpar <- par(usr = c(0, 1, 0, 1)) # 3行下でテキストの位置を(0.5, 0.5)にするための調整 v <- abs(cor(x, y)) sz <- 1 + v * 2 # テキストのサイズを直線性の強さで調整 text(0.5, 0.5, sprintf("%.3f", v), cex = sz) par(oldpar) } lower <- function(x, y, ...){ # 左下の散布図を設定 points(x, y, pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)]) if( abs(cor(x, y)) > 0.8 ){ # 直線性の強いデータの組だけ回帰式を作成 lmobj <- lm(y~x) abline(lmobj) } } pairs(iris[,1:4], upper.panel=upper, lower.panel=lower)
気をつける必要があるのは、lower関数の1行目で、ここでplotを用いて書こうとするとエラーになる点である。低水準作図関数を使うようにすること。また、lower関数内で用いたpoints関数のbgパラメータのように、データをそのまますべて渡せば、すべての散布図で自動的にうまく描いてくれる。1つ1つの散布図を気にしてパラメータを変更する必要はない。
上のコードを実行すると、次のような画像が得られる。
0 件のコメント:
コメントを投稿