R で相関行列を作成して視覚化する
この記事では、最初に相関行列を作成するためのデータの準備方法について説明します。 次に、相関行列を作成して視覚化します。
サンプル コードでは、dplyr
、ggplot2
、および GGally
パッケージを使用します。 これらのパッケージが利用できない場合は、インストールする必要があります。
コード例:
# Install required packages.
# Uncomment and run the concerned line.
# install.packages("dplyr")
# install.packages("ggplot2")
# install.packages("GGally")
R の cor()
関数
Base R は、2つの数値ベクトル間の相関係数、またはデータ フレームまたは行列の数値列の相関行列を計算する cor()
関数を提供します。
関数のドキュメントには、引数 x
、y
、use
、および method
の使用に関する詳細が記載されています。
x
引数はデータを取ります。 欠落しているデータがある場合は、use
引数が必要です。
method
はデフォルトで pearson
です。
R で相関行列を作成するためのデータの準備
相関係数は、数値データに対してのみ計算できます。 データは数字のように見えるだけではいけません。 数値形式でなければなりません。
次のサンプル データ フレームには、数値と文字列で構成される 2 要素列があります。
数値が数値として格納されないため、数値を含む列でも cor()
関数は使用できません。
コード例:
# Vectors, data frame.
f1 = as.factor(c(7,7,3,11,7,5,5))
str(f1)
f2 = as.factor(c(6,6,6,12,6,4,2))
str(f2)
s = letters[4:10]
fr = data.frame(s,f1,f2)
# The data frame shows numbers.
fr
# But the numbers are not stored in numeric format.
str(fr)
# Correlation matrix cannot be computed.
cor(fr[2:3])
出力:
> # The data frame shows numbers.
> fr
s f1 f2
1 d 7 6
2 e 7 6
3 f 3 6
4 g 11 12
5 h 7 6
6 i 5 4
7 j 5 2
> # But the numbers are not stored in numeric format.
> str(fr)
'data.frame': 7 obs. of 3 variables:
$ s : chr "d" "e" "f" "g" ...
$ f1: Factor w/ 4 levels "3","5","7","11": 3 3 1 4 3 2 2
$ f2: Factor w/ 4 levels "2","4","6","12": 3 3 3 4 3 2 1
> # Correlation matrix cannot be computed.
> cor(fr[2:3])
Error in cor(fr[2:3]) : 'x' must be numeric
データは数値ですが、係数として格納されているとします。 関連する列を数値に変換できます。
これには、因子水準ではなく正しい数値を取得するための 2つの手順が含まれます。 最初に文字に変換し、次に数値に変換します。
サンプル コードでは、mutate()
、across()
、および all_of()
関数と、dplyr
パッケージのパイプ演算子 %>%
を使用します。 実際の変換は、カスタム関数を使用して行われます。
コード例:
library(dplyr)
# This custom function does the actual conversion.
con_fn = function(k){
return(as.numeric(as.character(k)))
}
# We will convert specific columns to numeric.
fr2 = fr %>% mutate(across(all_of(c("f1","f2")), con_fn))
# The columns are now numeric.
str(fr2)
# Compute the correlation matrix.
cor(fr2[2:3]) # No error now.
出力:
> # The columns are now numeric.
> str(fr2)
'data.frame': 7 obs. of 3 variables:
$ s : chr "d" "e" "f" "g" ...
$ f1: num 7 7 3 11 7 5 5
$ f2: num 6 6 6 12 6 4 2
> # Compute the correlation matrix.
> cor(fr2[2:3]) # No error now.
f1 f2
f1 1.0000000 0.7833495
f2 0.7833495 1.0000000
2つの数値変数の相関行列が正常に作成されました。
R で相関行列を視覚化する
ビジュアライゼーションを作成する前に、さらにいくつかの列を追加します。 最後の列は int
型で、これも数値です。
コード例:
# Reproducible vectors.
set.seed(555)
n1 = round(rnorm(7)+2,1)
set.seed(222)
n2 = sample(22:42, 7, replace=TRUE)
# Join the columns to the data frame.
fr3 = cbind(fr2, n1, n2)
# Check the structure.
str(fr3)
# Compute the correlation matrix.
cor(fr3[2:5])
出力:
> # Check the structure.
> str(fr3)
'data.frame': 7 obs. of 5 variables:
$ s : chr "d" "e" "f" "g" ...
$ f1: num 7 7 3 11 7 5 5
$ f2: num 6 6 6 12 6 4 2
$ n1: num 1.7 2.5 2.4 3.9 0.2 2.9 1.8
$ n2: int 36 39 41 30 31 30 39
> # Compute the correlation matrix.
> cor(fr3[2:5])
f1 f2 n1 n2
f1 1.0000000 0.7833495 0.3124483 -0.5809116
f2 0.7833495 1.0000000 0.4938292 -0.4142586
n1 0.3124483 0.4938292 1.0000000 -0.1132145
n2 -0.5809116 -0.4142586 -0.1132145 1.0000000
GGally
パッケージの ggcorr()
関数を使用して、相関行列を視覚化します。 このパッケージは ggplot2
パッケージに依存しています。
この関数は 2つのことを行うことに注意することが重要です。 相関行列を計算し、プロットします。
デフォルトでは、ggcorr()
関数は pairwise
観測を使用し (欠損値がある場合)、pearson
相関係数を計算します。 また、ColorBrewer
パレットも使用します。
-
色は連続的にグレーディングできますが、ここでは 6つの離散値を使用します。 引数
nbreaks=6
はこの結果を達成します。この関数は、-1 ~ 1 の範囲を 6つの等間隔に分割します。
-
相関係数の値が負から正の範囲になる可能性があるため、発散カラー パレットが必要です。
-
色弱者向けのパレットを使用します。 このパレットは、最大 11 個の異なる色の値を提供できます。
-
引数
label=TRUE
は、カラー タイルに相関値をプロットします。
コード例:
# Load the GGally library.
# This loads ggplot2 also.
library(GGally)
# Visualize the correlation matrix.
ggcorr(fr3[2:5], nbreaks=6, palette="PuOr", label=TRUE, label_size=5, size=8, legend.size=10)
相関行列のプロット。 色合いが濃いほど、相関が高いことを表します。
相関の範囲は -1 (オレンジで表される) から 1 (紫で表される) までです。
相関行列があり、それをプロットしたいとします。 data=NULL
を指定し、cor_matrix
を使用して相関行列を提供することにより、ggcorr()
関数を使用できます。
コード例:
# Just three columns, for illustration.
fr4 = cor(fr3[2:4])
fr4
# Only visualize with given correlation matrix.
ggcorr(data = NULL, cor_matrix= fr4, nbreaks=7, label=TRUE, label_size=5, size=8, legend.size=10)
特定の相関行列のプロット。
参考文献
dplyr
関数については、パッケージ ドキュメント を参照してください。GGally
パッケージ の CRAN ページはそのマニュアルにリンクしています。