Rで散布図行列2


前回の「Rで散布図行列1」では、とりあえずエクセルではすぐにできないであろうグラフィック表現をすることで、Rのありがたさを実感しました。ここでは、さらにアドバンスっぽいことをトライします。と言っても、世の中に提供されている情報サイトを参考にしながら、自分が見たいデータ、見せ方を試したに過ぎません。広い心でお付き合いください。

前回「散布図行列1」は、多くのデータをいっぺんに概観するという点で、意味があった表現だと思います。しかし、散布図だけ見ても結局人間の脳だけでは判断が難しいのです。人間は数値化されてると、判断が早くなります。「なんとなく良さそう。。。」よりも、「これは一定の基準を超えているので良いと判断できます!」の方が説得力あります。ってなわけで、今回は前回の散布図行列に、相関係数と単回帰直線を描くということをやります。

 

まず関数を定義します。これは、さすがにいきなりだと困惑するので、少々解説を。

関数の定義とは、Fortranなどで言うサブルーチンのことです。Rに元々ある関数とは別に個人的に良く使ったり、別のファイルで処理した方が良い場合に使うかと思います。関数を定義しておくことで、以下のメリットがあります。

  • 同じような処理が頻繁にある場合、関数に変数を渡すだけでいい
  • 結果的にメインプログラムの行数が減り、コードがスッキリする
  • さらに、別の課題を解く際に、定義した関数をそのまま転用できる

で、いきなり見慣れない関数定義で自分でも困っていますが、今回使ったGDPデータを深堀するために、各国データ同士の相関係数を算出する関数を定義しておきます。

# 散布図行列に相関係数を表示
# ref) http://langstat.blogspot.jp/2011/11/blog-post_30.html
lowerf <- function(x, y){
points(x, y)
abline(lm(y ~ x),col="magenta")
}

upperf <- function(x, y){
loc <- complex(, mean(range(x)),
mean(range(y)))
r <- round(cor(x, y), 3)
if(r>=0.8)
iro <- "blue"
else {if(r < -0.8)
iro <- "red"
else iro <- "black"}
text(loc, lab=r, col=iro, cex=1.5)
}

このコードを起動したRにペーストして、特にエラーが出なければ、開いているR内に関数が埋め込まれました。例えば、今定義した"lowerf"とコンソールで打てば、その内容が返ってきます。

> lowerf
function(x, y){
points(x, y)
abline(lm(y ~ x),col="magenta")
}

これで定義済み関数を確認することができます。さて、この関数を用いてGDPデータを再度表示してみます。グラフィック表現用コードはこちら

#----------------------
# 相関係数も表示
#----------------------
#散布図行列:データの組み合わせ散布図
pairs(GDP_j[ ,2:7],lower.panel=lowerf, upper.panel=upperf,main="GDP by Japan(t) x B(t)") 

title(sub="by d-cassette2")

するとこんな図が出ちゃいますよ。

f:id:demacassette:20150121011131j:plain

値は各データの組み合わせにおける相関係数です。0.8以上(強い正の相関)なら青字-0.8以下(強い負の相関)なら赤字、それ以外(強い相関なし)なら黒字として設定しています。

前回の表現では、ざっくり見るのには良いけど、結局どこから手を付けて良いかわかりませんでした。そうゆうときには、基準をはっきりするために定量的に表現することが重要です。ここでは、相関係数というある2変量の傾向を計る指標で表現しています。

 相関係数が高ければ(低ければ)、必ず関係がある!というわけではありません。こういった話は、統計について確認するエントリにて言及しようと思います。とりあえず、今回はたくさんのデータを一度に処理して表現してみる、詳細な分析をするために必要な絞り込みを行う、といった流れまで確認しました。

 

乱文になってしまいましたので、時間があれば修正を加えるかもしれません。

 

では、See you again♪