以前エントリしたhetcor関数を使った全変数の関連を把握する試みの続き。
エントリを入れたときにはサンプルデータでやったのでうまくいったが、実際のデータでやってみたところ使いにくさを感じた。
困った点はは変数が多すぎると相関係数の表示が見にくく、かつ、全部表示されないというものだ。
改善を試みてみた。
実際に例をあげて述べていこう。
サンプルデータは以前と同じものを使用する。
library(AER) data(CPS1985) str(CPS1985) # データ構造の把握 r <- cbind(1, 2, 3, 4, 6, 7, 10, 11) # 連続と2値データのみ抽出 data <- CPS1985[,r]
CPS1985の変数は11なので、さほど問題が起きなかった。 しかし、社会学などでは変数が200以上というデータセットはそれほど珍しくない。最近扱ったデータセットもそういうものだった。 こういった場合、相関マトリックスの組み合わせが非常に多くなってしまう。
以前のエントリでは、print
コマンドでテキストデータでをするようにしていたが、100以上変数があるとRStudioではすべて表示できないし、Rのコンソールでもすべて表示できず、表示が欠けてしまう。そもそも取り回しが非常に不便なのだ。
csv形式で書き出し
そこで、結果を外部に出力する方法を試みてみた。 相関行列の形式はデータ構造は行列(マトリックス)なので、csvなどの表計算ソフトで扱える形式にして出力することができる。
library(polycor) het<- hetcor(data) res <-het$correlations # 相関行列のみ取り出し ## print(res)
関連の高い相関係数のみを表示
ついでに結果を見やすくすることもしてみた。
相関係数なので、絶対値0.3以上の相関係数のみ残して、残りはNA
を挿入した。そうすると関連の薄い項目は表示されないので、相関係数も見やすくなる。
NAがあって見にくい場合には、出力後にExcelなどでNA
を空白で置換するとよい。
res02<-res # 正の相関用のオブジェクト res03<-res # 負の相関用のオブジェクト res02[res02 <= 0.3] <- NA # 相関係数が0.3以下のものにNAを代入; 正の相関 res03[res03 >= -0.3] <- NA # 相関係数が-0.3以上のものにNAを代入; 負の相関 write.csv(res02, file = "resplus.csv", row.names=TRUE, fileEncoding ="cp932") # 正の相関のマトリックスをShift-JISで書き出し write.csv(res03, file = "resminus.csv", row.names=TRUE, fileEncoding ="cp932") # 負の相関のマトリックスをShift-JISで書き出し
正の相関用と負の相関のオブジェクトを2つ作っているのは、Rで絶対値0.3以上という数値の指定の方法がわからなかったため。
できない訳はないのだが、今の僕の知識ではうまく処理できなかった。Rのプログラムに詳しい人なら、すぐにでも解決できる問題だと思うが、今回はやり方がわからなかった。
書き出しファイルのエンコードはShift-JISにした。日本人の多くのWindowsユーザーのExcelはShift-JISで動いているためである。Macユーザーの場合はcp932
のところをUTF-8
と書くのだと思う。
出力したファイル
出力されたファイルはExcelでみると次のような形になって出力されている。
だいぶ見やすくなったように思う。
課題
同じ変数が行列に入っているので、同じ組み合わせが2組み含まれている。これを整理できれば、なお良い。 また、変数の組み合わせと相関係数が自動的に表で出力されると、まとめるのが非常に便利になるだろうということである。
解決法やよいプログラムが書けそうなら、またエントリを入れたい。