#イントロ
−−−−
多くの相関係数を表形式で求める方法は、私の2回目の投稿 (Rで、相関係数を求めて、csv出力したかったのです。)で行いました。
今回は、3回目の投稿 (R ggplot でループを利用した散布図(scatter plot)を描きpdf出力したかったのです)グラフの作成に使ったcombn
関数を利用して相関係数を求めて見たいと思います。
また、ベクトルから行列への取り扱いなどをテーマにします。
使うデータはirisデータです。本質的に新しい訳ではないのですが。
簡単に書いて見ます。
#スクリプトコード
−−−−
#相関係数
#カラム行の名前を取り出すことと、combnで組み合わせ
x <- NULL # ベクトルxを作る。
z <- combn(colnames(iris[1:4]), 2)
for (i in (1:6)) {
#irisデータの列の組み合わせについてcorを得て、ベクトル化する。
x[i] <- c(cor(iris[,z[1,i]], iris[,z[2,i]]))
}
#xをベクトルから行列形式へ変換する。
x <- matrix(x)
#有効数字を小数点2位までにする。
x <- round(x, digits = 2)
#絶対値を求める
abs_x <- abs(x)
#zを転置して、zとxとを付け加える。>データフレーム形式になる。
iris_cor <- cbind(t(z),x, abs_x)
colnames(iris_cor) <- c("SampleName1","sampleName2", "cor", "abs of cor" )
View(iris_cor)
write.csv(file = "cor_combn_abs.csv", iris_cor)
言い訳になりますが。
sort
, subset
, >
などの関数を使って、並べ替えるところまでは、私は、分かりませんでした。
#説明と実行結果
−−−−
変数zは、
z <- combn(colnames(iris[1:4]), 2)
という部分が次のような結果になります。
View(iris_cor)とした後で、下記の図では絶対値の大きい物順にRStudioにて、並べ替えを行っています。
###実行環境
−−−−
なお、実行環境は以下の通りです。
Mac OS X 10.11.4
R version 3.2.4
R studio 0.99.896
##蛇足(dplyrでのパイプ演算子%>%)
−−−−
上述のスクリプトのうち、ネスト(入れ子構造)されている箇所は、次のようにも書き換えが出来ますね。
今は、パイプ演算子%>%
を使った方が、モダンな書き方で、可読性が良くなる、ということで好んでらっしゃる方もいるようです。
dplyr
というパッケージを利用する方法を下記に示します。
インストールしていなければ、install.packages(dplyr)
を一度、行う必要があります。
library(dplyr)
を行った後で次のスクリプトを実行すれば、別の表現で同じ結果を見ることができます。
変数zについての箇所
コメントアウトしている所と、同じ結果を得るパイプでの書き方です。
#z <- combn(colnames(iris[1:4]), 2)
iris[1:4] %>% colnames %>% combn(., 2) -> z
変数abs_xについての箇所
コメントアウトしている所と、同じ結果を得るパイプでの書き方です。
#x <- matrix(x)
#x <- round(x, digits = 2)
#abs_x <- abs(x)
x %>% matrix(.) %>% round(., digits =2) %>% abs(.) -> abs_x