LoginSignup
1
1

More than 5 years have passed since last update.

Rで、多量の相関係数を求めて、相関係数の値の絶対値を求めるところまで。

Last updated at Posted at 2016-05-01

イントロ

−−−−
 多くの相関係数を表形式で求める方法は、私の2回目の投稿 (Rで、相関係数を求めて、csv出力したかったのです。)で行いました。
今回は、3回目の投稿 (R ggplot でループを利用した散布図(scatter plot)を描きpdf出力したかったのです)グラフの作成に使ったcombn関数を利用して相関係数を求めて見たいと思います。
 また、ベクトルから行列への取り扱いなどをテーマにします。
 使うデータはirisデータです。本質的に新しい訳ではないのですが。
 簡単に書いて見ます。

スクリプトコード

−−−−

cor_combn.R
#相関係数
#カラム行の名前を取り出すことと、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)
という部分が次のような結果になります。

スクリーンショット 2016-05-01 11.24.42.png

View(iris_cor)とした後で、下記の図では絶対値の大きい物順にRStudioにて、並べ替えを行っています。

スクリーンショット 2016-05-01 11.25.09.png

実行環境

−−−−
なお、実行環境は以下の通りです。
Mac OS X 10.11.4
R version 3.2.4
R studio 0.99.896

蛇足(dplyrでのパイプ演算子%>%)

−−−−
 上述のスクリプトのうち、ネスト(入れ子構造)されている箇所は、次のようにも書き換えが出来ますね。
 今は、パイプ演算子%>%を使った方が、モダンな書き方で、可読性が良くなる、ということで好んでらっしゃる方もいるようです。

dplyrというパッケージを利用する方法を下記に示します。
インストールしていなければ、install.packages(dplyr)を一度、行う必要があります。
library(dplyr)を行った後で次のスクリプトを実行すれば、別の表現で同じ結果を見ることができます。

変数zについての箇所
コメントアウトしている所と、同じ結果を得るパイプでの書き方です。

pipe1.R
#z <- combn(colnames(iris[1:4]), 2)
iris[1:4] %>% colnames %>% combn(., 2) -> z

変数abs_xについての箇所
コメントアウトしている所と、同じ結果を得るパイプでの書き方です。

pipe2.R
#x <- matrix(x)
#x <- round(x, digits = 2)
#abs_x <- abs(x)
x %>% matrix(.) %>% round(., digits =2) %>% abs(.) -> abs_x 
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1