本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:安定した数値計算で多変量相関を求める「multiCorr」パッケージ

多変量の相関関係を一括して評価したいとき、変数の数が増えるほど計算が不安定になりやすい点が壁になります。「multiCorr」パッケージは、対数変換を用いた数値的に安定な計算方法で、数値行列や相関係数行列から多変量の相関係数を算出します。

Rに標準で備わる機能だけで完結するため、手元の数値行列や相関係数行列をそのまま渡して試すことができます。変数の多いデータの相関構造を、計算の乱れを気にせず確認したい人には向いているのではないかと考えます。

パッケージバージョンは0.1.0。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("multiCorr")

# パッケージの読み込み
library("multiCorr")
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。

多変量における相関の算出:multicorrelationコマンド

xに数値行列または相関係数行列を渡すと、多変量の相関係数が1つの値として返ります。べき乗パラメータrで対数変換の強さを調整できます。

オプション意味初期値
x数値行列またはデータフレームなし
r正の数値のべき乗パラメータ1
# 乱数の種を固定
set.seed(123)

# 100行10列の正規分布に従う乱数行列を作成
X <- matrix(rnorm(1000), nrow = 100, ncol = 10)

# multicorrelationコマンドを実行
multicorrelation(X)
[1] 4.947598e-06

# 指定したランクを指定してmulticorrelationコマンドを実行
multicorrelation(X, r = 2)
[1] 2.007469e-08

相関係数行列を直接組み立てて渡すこともできます。ここでは5変数分の相関構造を指定し、多相関係数を求めます。

# 乱数シードを42に設定して再現性を確保する
set.seed(42)

# 変数の数を5に設定する
p <- 5

# 5x5のゼロ行列を作成する
cor_matrix <- matrix(0, nrow = p, ncol = p)

# 対角成分を1に設定する
diag(cor_matrix) <- 1

# 変数1と2の相関係数を0.8に設定する
cor_matrix[1, 2] <- cor_matrix[2, 1] <- 0.8

# 変数1と3の相関係数を0.5に設定する
cor_matrix[1, 3] <- cor_matrix[3, 1] <- 0.5

# 変数2と4の相関係数を0.3に設定する
cor_matrix[2, 4] <- cor_matrix[4, 2] <- 0.3

# 変数3と5の相関係数を0.6に設定する
cor_matrix[3, 5] <- cor_matrix[5, 3] <- 0.6

# 変数4と5の相関係数を0.4に設定する
cor_matrix[4, 5] <- cor_matrix[5, 4] <- 0.4

# multicorrelationコマンドを用いて多相相関係数を計算する
mc_value <- multicorrelation(cor_matrix)

# 計算結果を表示する
print(mc_value)
[1] 0.02762247

変数の数を増やすと値がどのように変わるかも確認できます。3〜5変数それぞれで相関係数行列を組み立て、多相関係数を比較します。

# 乱数シードを設定
set.seed(123)

# 3変数の場合の変数数を定義
p3 <- 3

# 3変数の相関係数行列を初期化
cor_3 <- matrix(0, 3, 3)

# 3変数の相関係数行列の対角成分を1に設定
diag(cor_3) <- 1

# 3変数の相関係数行列の1番目と2番目の相関を設定
cor_3[1, 2] <- cor_3[2, 1] <- 0.7

# 3変数の相関係数行列の1番目と3番目の相関を設定
cor_3[1, 3] <- cor_3[3, 1] <- 0.6

# 3変数の相関係数行列の2番目と3番目の相関を設定
cor_3[2, 3] <- cor_3[3, 2] <- 0.5

# 4変数の場合の変数数を定義
p4 <- 4

# 4変数の相関係数行列を初期化
cor_4 <- matrix(0, 4, 4)

# 4変数の相関係数行列の対角成分を1に設定
diag(cor_4) <- 1

# 4変数の相関係数行列の1番目と2番目の相関を設定
cor_4[1, 2] <- cor_4[2, 1] <- 0.7

# 4変数の相関係数行列の1番目と3番目の相関を設定
cor_4[1, 3] <- cor_4[3, 1] <- 0.6

# 4変数の相関係数行列の2番目と3番目の相関を設定
cor_4[2, 3] <- cor_4[3, 2] <- 0.5

# 4変数の相関係数行列の1番目と4番目の相関を設定
cor_4[1, 4] <- cor_4[4, 1] <- 0.4

# 4変数の相関係数行列の2番目と4番目の相関を設定
cor_4[2, 4] <- cor_4[4, 2] <- 0.3

# 4変数の相関係数行列の3番目と4番目の相関を設定
cor_4[3, 4] <- cor_4[4, 3] <- 0.2

# 5変数の場合の変数数を定義
p5 <- 5

# 5変数の相関係数行列を初期化
cor_5 <- matrix(0, 5, 5)

# 5変数の相関係数行列の対角成分を1に設定
diag(cor_5) <- 1

# 5変数の相関係数行列の1番目と2番目の相関を設定
cor_5[1, 2] <- cor_5[2, 1] <- 0.7

# 5変数の相関係数行列の1番目と3番目の相関を設定
cor_5[1, 3] <- cor_5[3, 1] <- 0.6

# 5変数の相関係数行列の2番目と3番目の相関を設定
cor_5[2, 3] <- cor_5[3, 2] <- 0.5

# 5変数の相関係数行列の1番目と4番目の相関を設定
cor_5[1, 4] <- cor_5[4, 1] <- 0.4

# 5変数の相関係数行列の2番目と4番目の相関を設定
cor_5[2, 4] <- cor_5[4, 2] <- 0.3

# 5変数の相関係数行列の3番目と4番目の相関を設定
cor_5[3, 4] <- cor_5[4, 3] <- 0.2

# 5変数の相関係数行列の1番目と5番目の相関を設定
cor_5[1, 5] <- cor_5[5, 1] <- 0.3

# 5変数の相関係数行列の2番目と5番目の相関を設定
cor_5[2, 5] <- cor_5[5, 2] <- 0.2

# 5変数の相関係数行列の3番目と5番目の相関を設定
cor_5[3, 5] <- cor_5[5, 3] <- 0.1

# 5変数の相関係数行列の4番目と5番目の相関を設定
cor_5[4, 5] <- cor_5[5, 4] <- 0.1

# 各変数数に対する多相関係数を計算してリストに格納
results <- c(
  "3 variables" = multicorrelation(cor_3),
  "4 variables" = multicorrelation(cor_4),
  "5 variables" = multicorrelation(cor_5)
)

# 計算結果をコンソールに表示
print(results)
3 variables 4 variables 5 variables
  0.5882583  -0.4786650   0.2186921


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。