多変数の相関を可視化する方法メモ
自分のためのメモ。
因子分析したら因子分析の結果だけ,構造方程式モデリングしたらパス図だけ,そういうのはちょっと好かない。殆どの場合相関行列があればそういうのは再現できるし,相関行列だって上手に可視化したら,例えば因子分析くらいの見通しはつく。これは,研究報告の透明性というのにもつながる。
ただ論文には紙幅の都合があって,いつでも,というわけにはいかないけど。
とにかく多変数の相関行列に対応するようなデータの可視化について,Rを用いてメモしていく。自分ですぐ忘れてしまうから。
(スクリプトの中に不自然に半角スペースとか入っているのは,hatena記法と変に被るところを避けるため)
散布図行列(SPLOM)
一番てっとり早い方法。
まずRのデフォルト関数で「データフレーム形式」でデータを読み込む。
例えばエクセルからクリップボードにコピーした状態なら,
dat<- read="" table="" clipboard="" header="T)</p">
そこで
pairs(dat)
とでもすればよい。
なにもよくわからなくてただコピペで出したいなら,
クリップボードにコピー(変数のタイトル行も)して,下をやるだけでよい。
pairs(read.table("clipboard", header=T))
色々オプションがあるけど,ちょっと面倒なので省く。
心理統計の手法を大抵カバーするpsychパッケージには,優れた関数が用意されている。
pairs.panelsというもので,
左下段には散布図,真中段には変数の名前と散布図,確率密度曲線,右上段には相関係数を一気に示してくれる。
まずはpsychパッケージをインストール。
install.packages("psych")
libraryで呼び出し。
library(psych)
先ほどのデータに対してpairs.panels関数を実行する。
pairs.panels(dat)
どん。
デフォルトだとこんな感じ。
これだとちょっと意味分かんない場合もある。局所多項式あてはめ(LOESS)とか,相関楕円とか必要かどうかもわからない。rugとかも。
私の好みあるけど,オプションとかを指定して,こんな感じにするとよいかも。
pairs.panels(da,hist.col="white",rug=F,ellipses=F,lm=T)
うむ。
でも散布図行列は多変数には向かない。たとえば,こんな感じになる。なにがなんだか。。。
無向グラフ
方向性の無いグラフ。パス図などとは違う。あっちがいうなら有向グラフ。
まずは生データを読み込んで,相関行列を計算する。
cor(dat)
パッケージqgraphっていうのをインストールする。
install.packages("qgraph")
呼び出す。
library(qgraph)
これでどん。
qgraph( (cor(dat),edge.labels=T)
詳しくはこっちも。
これも色々オプションがあって,こんな感じがすき。
qgraph(cor(dat),edge.labels=T,minimum=.2,edge.color="black")
こんな感じ。
ヒートマップ
イメージとしては相関行列のセルに色をつけた感じ。
これも簡単。
色々あるけど,折角psychを使っているので,psychに入っているcor.plot関数を使う。ggplot2のgeom_tileでもなんでもいいけど。いっぱいある。
これは簡単。これだけ。
cor.plot(cor(dat) )
簡単だし,直感的でいい。
数字も出せる。
cor.plot(cor(dat),numbers=T)
ヒートマップがいいのは,多変数でも理解しやすいことね。つまり,要約の度合いの問題。
主座標分析(古典的多次元尺度構成法)的な可視化
距離行列から可視化する方法。相関係数は類似度という点で距離のようなものなので。
細かいことはおいておいて,
plot(cmdscale(dist(cor(dat))),type="n",xlab="", ylab=""); text(cmdscale(dist(cor(dat))),rownames(cor(dat)))
とでもやればよい。
何かにもとづいて色分けをしたりすると見やすい。
text内に,colを指定してやると良い。
コリログラム(7/24, 追加)
もうちょっといろいろ汎用性があるのが,パッケージcorrgram。
install.packages("corrgram")
library(corrgram)
散布図,相関楕円,当てはめ,ヒートマップ,円グラフによる相関係数とかを色々指定できる。
関数の形式は,
corrgram(dat, upper.panles = XXXX, lower.panel = YYYY)
というような感じ。
上側(XXXX)と下側(YYY)の部分に以下のどれかを入れる。
panel.pie:相関係数の大きさを示す色付き円グラフ
panel.shade:相関係数を色で示す
panel.ellipse:相関楕円と当てはめ
panel.pts :散布図
なので,例えば,
corrgram(dat,lower.panel=panel.ellipse,upper.panel=panel.pie)
だったら,こんな感じ。
corrgram(rei,lower.panel=panel.pts,upper.panel=panel.shade)
だったら,こう。
こんな感じ。終わり。自分用のメモでした。