Rで解析:安定した数値計算で多変量相関を求める「multiCorr」パッケージ
多変量の相関関係を一括して評価したいとき、変数の数が増えるほど計算が不安定になりやすい点が壁になります。「multiCorr」パッケージは、対数変換を用いた数値的に安定な計算方法で、数値行列や相関係数行列から多変量の相関係数を算出します。
Rに標準で備わる機能だけで完結するため、手元の数値行列や相関係数行列をそのまま渡して試すことができます。変数の多いデータの相関構造を、計算の乱れを気にせず確認したい人には向いているのではないかと考えます。
パッケージバージョンは0.1.0。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。
<おすすめのRに関する書籍です>
Rグラフィックスクックブック 第2版 ―ggplot2によるグラフ作成のレシピ集 | Winston Chang, 石井弓美子, 河内崇
ggplot2でのグラフ作成をレシピ形式でまとめた一冊。この図をどう描くか、という引き方ができる。
パッケージのインストール
下記コマンドを実行してください。
# パッケージのインストール
install.packages("multiCorr")
# パッケージの読み込み
library("multiCorr")スポンサーリンク
コマンド例
詳細はコメント、パッケージのヘルプを確認してください。
<おすすめのRに関する書籍です>
RとRStudioによる教育テストデータの分析
テストの得点データを扱うための一冊。教育評価の現場で必要になる分析をRとRStudioで実行する。
多変量における相関の算出: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
<おすすめのRに関する書籍です>
Rによるデータサイエンス(第2版):データ解析の基礎から最新手法まで | 金明哲
主成分分析やクラスター分析から、サポートベクターマシン・ニューラルネットワーク・生存分析まで、幅広い手法をRで一望できる。
変数の数を増やすと値がどのように変わるかも確認できます。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
<おすすめのRに関する書籍です>
多変量解析の基礎 II 主成分分析(改訂版): 理論とRによる演習
主成分分析に絞って理論を丁寧に追い、Rの演習で確認する構成。数式の意味を腹落ちさせたい人向け。
この記事が誰かの役に立ちますように。
スポンサーリンク