草薙の研究ログ

英語教育関係。でも最近は統計(特にR)ネタが中心。

多変数の相関を可視化する方法メモ

自分のためのメモ。

 

因子分析したら因子分析の結果だけ,構造方程式モデリングしたらパス図だけ,そういうのはちょっと好かない。殆どの場合相関行列があればそういうのは再現できるし,相関行列だって上手に可視化したら,例えば因子分析くらいの見通しはつく。これは,研究報告の透明性というのにもつながる。

 

ただ論文には紙幅の都合があって,いつでも,というわけにはいかないけど。

 

とにかく多変数の相関行列に対応するようなデータの可視化について,Rを用いてメモしていく。自分ですぐ忘れてしまうから。

スクリプトの中に不自然に半角スペースとか入っているのは,hatena記法と変に被るところを避けるため)

 

散布図行列(SPLOM)

一番てっとり早い方法。

まずRのデフォルト関数で「データフレーム形式」でデータを読み込む。

例えばエクセルからクリップボードにコピーした状態なら,

dat<- read="" table="" clipboard="" header="T)</p">

そこで

pairs(dat)

とでもすればよい。

 

なにもよくわからなくてただコピペで出したいなら,

クリップボードにコピー(変数のタイトル行も)して,下をやるだけでよい。

pairs(read.table("clipboard", header=T))

 

 

f:id:kusanagik:20140723212133p:plain

色々オプションがあるけど,ちょっと面倒なので省く。

 

心理統計の手法を大抵カバーするpsychパッケージには,優れた関数が用意されている。

pairs.panelsというもので,

左下段には散布図,真中段には変数の名前と散布図,確率密度曲線,右上段には相関係数を一気に示してくれる。

 

まずはpsychパッケージをインストール。

install.packages("psych")

 

libraryで呼び出し。

library(psych)

 

先ほどのデータに対してpairs.panels関数を実行する。

 

pairs.panels(dat)

 

どん。

 

f:id:kusanagik:20140723212709p:plain

 

デフォルトだとこんな感じ。

これだとちょっと意味分かんない場合もある。局所多項式あてはめ(LOESS)とか,相関楕円とか必要かどうかもわからない。rugとかも。

 

私の好みあるけど,オプションとかを指定して,こんな感じにするとよいかも。

f:id:kusanagik:20140723213110p:plain

pairs.panels(da,hist.col="white",rug=F,ellipses=F,lm=T)

 

うむ。

でも散布図行列は多変数には向かない。たとえば,こんな感じになる。なにがなんだか。。。

 

f:id:kusanagik:20140723214125p:plain

 

無向グラフ

方向性の無いグラフ。パス図などとは違う。あっちがいうなら有向グラフ。

まずは生データを読み込んで,相関行列を計算する。

 

cor(dat)

 

パッケージqgraphっていうのをインストールする。

 

install.packages("qgraph")

 

 

呼び出す。

 

library(qgraph)

 

これでどん。

qgraph( (cor(dat),edge.labels=T)

 

f:id:kusanagik:20140723214008p:plain

 

詳しくはこっちも。

 

偏相関・無向グラフメモ - 草薙の研究ログ

 

これも色々オプションがあって,こんな感じがすき。

 

qgraph(cor(dat),edge.labels=T,minimum=.2,edge.color="black")

 

こんな感じ。

 

f:id:kusanagik:20140723214407p:plain

 

 

ヒートマップ

イメージとしては相関行列のセルに色をつけた感じ。

これも簡単。

色々あるけど,折角psychを使っているので,psychに入っているcor.plot関数を使う。ggplot2のgeom_tileでもなんでもいいけど。いっぱいある。

 

これは簡単。これだけ。

cor.plot(cor(dat) )

 

f:id:kusanagik:20140723214707p:plain

 

簡単だし,直感的でいい。

 

数字も出せる。

cor.plot(cor(dat),numbers=T)

 

f:id:kusanagik:20140723215048p:plain

 

ヒートマップがいいのは,多変数でも理解しやすいことね。つまり,要約の度合いの問題。

 

主座標分析(古典的多次元尺度構成法)的な可視化

距離行列から可視化する方法。相関係数は類似度という点で距離のようなものなので。

細かいことはおいておいて,

plot(cmdscale(dist(cor(dat))),type="n",xlab="", ylab=""); text(cmdscale(dist(cor(dat))),rownames(cor(dat)))

 

とでもやればよい。

 

f:id:kusanagik:20140723220609p:plain

 

何かにもとづいて色分けをしたりすると見やすい。

f:id:kusanagik:20140723220835p:plain

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)

 

だったら,こんな感じ。

f:id:kusanagik:20140724143505p:plain

corrgram(rei,lower.panel=panel.pts,upper.panel=panel.shade)

 

だったら,こう。

f:id:kusanagik:20140724143618p:plain

こんな感じ。終わり。自分用のメモでした。