R で相関行列を作成して視覚化する

Jesse John 2023年6月21日
  1. R の cor() 関数
  2. R で相関行列を作成するためのデータの準備
  3. R で相関行列を視覚化する
  4. 参考文献
R で相関行列を作成して視覚化する

この記事では、最初に相関行列を作成するためのデータの準備方法について説明します。 次に、相関行列を作成して視覚化します。

サンプル コードでは、dplyrggplot2、および 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() 関数を提供します。

関数のドキュメントには、引数 xyuse、および 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 パレットも使用します。

  1. 色は連続的にグレーディングできますが、ここでは 6つの離散値を使用します。 引数 nbreaks=6 はこの結果を達成します。

    この関数は、-1 ~ 1 の範囲を 6つの等間隔に分割します。

  2. 相関係数の値が負から正の範囲になる可能性があるため、発散カラー パレットが必要です。

  3. 色弱者向けのパレットを使用します。 このパレットは、最大 11 個の異なる色の値を提供できます。

  4. 引数 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)

特定の相関行列のプロット。

与えられた相関行列のプロット

参考文献

  1. dplyr 関数については、パッケージ ドキュメント を参照してください。
  2. GGally パッケージ の CRAN ページはそのマニュアルにリンクしています。
著者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

関連記事 - R Matrix