多変量データを分析する際、「各変数どうしがどのように関係しているか」を一目で把握したい場面は非常に多く存在します。

R言語の標準関数 cor() を使うと相関係数の数値テーブルを取得できますが、数字がズラリと並んだ表だけでは全体像を直感的に読み解くのは大変です。そこで活躍するのが corrplot パッケージによる相関行列のヒートマップ(Correlation Matrix Plot)です。

この記事では、Rで相関係数を計算する基本コードから、corrplot を使って美しいヒートマップを出力する具体的な手順、色合いや表示位置を自在に調整する実用的なカスタマイズ技まで分かりやすく解説します。


1. 相関行列のヒートマップ可視化とは?(アナロジーで解説)

多次元データの分析で最初に直面する課題は、「変数の数が多くなると数値の表(相関行列)を読むのが一気に難しくなる」ことです。

これを解決するのが「ヒートマップ(色と形による可視化)」です。

イメージしやすく例えるなら、「サーモグラフィーカメラ」や「路線図の混雑マップ」と同じ仕組みです。

  • 数値だけの相関行列(一般的な表):
    各ポイントの「正確な体温数値(例:36.5℃、38.2℃)」が細かく並んだデータ。数値の比較には時間がかかります。
  • 相関ヒートマップ:
    サーモグラフィーのように「温度が高い部分は赤、低い部分は青」とグラデーション表示し、さらに「強さに応じて円の大きさを変える」表現です。一目で「どこに強い相関があるか」が感覚的に伝わります。

特に多重共線性(マルチコ)のチェックや、探索的データ解析(EDA)の初期段階において、相関ヒートマップは必須のツールと言えます。

2. 【STEP 1】`cor()` 関数で相関係数を計算する

まずはヒートマップの元データとなる相関行列を作成します。ここではRに標準搭載されているデータセット mtcars(車の性能データ)を使用します。

使用するデータセット(mtcars)の確認

mtcars には、32車種の燃費(mpg)、気筒数(cyl)、馬力(hp)、重量(wt)などが格納されています。

# データセットの先頭行を確認
head(mtcars)
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4        21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag    21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710       22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive   21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Valiant          18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

`cor()` 関数の基本構文と相算法(method)の使い分け

データフレーム全体を cor() 関数に渡すことで、すべての列ペアの相関係数を一括で算出できます。

# ピアソンの積率相関係数を計算
corr <- cor(mtcars, method = "pearson")

# 計算結果(一部)の確認
head(corr)

method 引数には、データ特性に合わせて以下の3種類を指定できます。

`method` の指定値 相関係数の種類 適したデータパターン
"pearson"(デフォルト) ピアソンの積率相関係数 連続値データで、正規分布が仮定できる場合
"spearman" スピアマンの順位相関係数 順位データや外れ値を含み、非線形な傾向を見る場合
"kendall" ケンドールの順位相関係数 サンプルサイズが小さく、タイ(同順位)が多い場合

3. 【STEP 2】`corrplot` パッケージで相関ヒートマップを描画する

算出された数値行列をプロットするために、優れた可視化ライブラリである corrplot パッケージを使用します。

パッケージのインストールと読み込み

初回利用時はパッケージをインストールし、library() で読み込みます。

# インストール(初回のみ)
install.packages("corrplot")

# ライブラリの読み込み
library(corrplot)

基本のヒートマップ描画(`circle`)

corrplot() 関数に先ほどの相関行列を与えるだけで、すぐに可視化できます。tl.col = "black" を指定すると、軸ラベルのテキスト色を読みやすい黒色に設定できます。

# 最もシンプルな描画
corrplot(corr, tl.col = "black")

corrplotによるデフォルトの円形相関ヒートマップ

デフォルトでは method = "circle" が適用されます。正の相関(正の値)は青色、負の相関(負の値)は赤色で表示され、相関の絶対値が大きいほど円のサイズが大きく濃く表示されます。

4. 論文・レポートで使えるカスタム描画テクニック

corrplot の大きな魅力は、豊富なカスタマイズオプションにあります。用途に応じて見た目を変更してみましょう。

描画スタイルの変更(7通りの `method`)

method 引数を指定することで、アイコンや数値表示へ簡単に切り替えられます。

  • "circle":円の大きさと色(デフォルト)
  • "square":四角形の大きさと色
  • "ellipse":楕円の傾きと色
  • "number":相関係数の数値そのものを表示
  • "shade":斜線の向きと色
  • "color":全面の色グラデーション(標準的なヒートマップ)
  • "pie":パイチャート(円グラフ)の割合と色

corrplotの7種類の表示手法一覧

(左上から順に square, ellipse, number, shade, color, pie の出力結果)

カラーパレットのカスタマイズ(`colorRampPalette`)

標準の赤・青色以外のテーマカラーにしたい場合は、colorRampPalette() を使ってグラデーションを作成します。

# 白から赤へ変化する20段階のカラーパレットを作成
col_palette <- colorRampPalette(c("white", "red"))

# 自作パレットを使って描画
corrplot(corr, tl.col = "black", col = col_palette(20))

単色グラデーションに変更した相関ヒートマップ

下三角・上三角表示(`type = "upper"` / `"lower"`)

相関行列は対角線を基準に「対称」な構造をしています。全く同じ情報を2回表示させず、見た目をスッキリさせたい場合は type 引数を指定します。

# 右上の上三角部分のみを表示
corrplot(corr, tl.col = "black", col = col_palette(20), type = "upper")

上三角のみを表示したスッキリした相関ヒートマップ

※ type = "lower" を指定すれば、左下の「下三角」部分のみの表示に切り替えることも可能です。

5. 実務・研究で役立つポイントと注意点(タイポ対策など)

よくあるエラー:could not find function "corrplot"
初学者で多い注意点として、ライブラリ名のタイポがあります。関数名は corrplot(rが2つ)ですが、library(correplot) や library(corplot) と誤記してエラーになるケースがあります。正しくは library(corrplot) ですのでご注意ください。

データ前処理のワンポイント:欠損値(NA)が含まれる場合
データセット内に NA があると、cor() の結果がすべて NA になることがあります。その場合は use = "complete.obs" オプション(欠損値を除く行のみで計算)を追記しましょう。
cor(df, use = "complete.obs")

6. まとめ・関連記事

今回は、R言語で相関係数を可視化する cor() 関数と corrplot パッケージの使い方を解説しました。

【今回のポイント】

  • cor(df) で全変数の相関係数行列を簡単に一括計算できる
  • corrplot() を使えば数行のコードで色鮮やかなヒートマップが描画できる
  • method・col・type = "upper" を組み合わせて見やすい図へカスタマイズ可能

複雑なデータの関係性を素早くプレゼン資料や論文にまとめたい時にぜひ活用してみてください。

関連記事

相関係数の概念や計算原理について深く復習したい方は、以下の記事もぜひ参考にしてください。