LoginSignup
12
5

More than 3 years have passed since last update.

【MATLAB】相関係数行列をヒートマップ表示

Last updated at Posted at 2020-06-30

matlabで相関係数行列をヒートマップで表示する方法を調べたのでシェアします。行列を色付きで表示するアレです。

相関係数行列って?

あるデータ$\mathit{\mathbf{x}}=\left\lbrace x_1 ,x_2 ,\cdots ,x_n \right\rbrace$,$\mathit{\mathbf{y}}=\left\lbrace y_1 ,y_2 ,\cdots ,y_n \right\rbrace$があったとき、それぞれの組合せで相関を計算することができます。計算式はwikipediaから以下の通り

r=\frac{\sum_{i=1}^n \left(x_i -\bar{x} \right)\left(y_i -\bar{y} \right)}{\sqrt{\sum_{j=1}^n {\left(x_j -\bar{x} \right)}^2 }\sqrt{\sum_{k=1}^n {\left(y_k -\bar{y} \right)}^2 }}

複数のデータ列${\mathit{\mathbf{x}}}_1 ,{\mathit{\mathbf{x}}}_2 ,\cdots ,{\mathit{\mathbf{x}}}_n$があったときにこれら全ての組合せで相関係数を計算して行列化することができます。行列の各要素は次のようになっています。

R\left(i,j\right)=r_{i,j} \;\;\;\;\left(i=1,2,\cdots ,n\right)

これが相関係数行列ですね。言わずもがな$R\left(i,j\right)=R\left(j,i\right)$で、$R\left(i,i\right)=1$となります。

相関係数行列のmatlabコード

これをmatlabで実現するのは簡単です。とりあえずまずはデータ読み込みます。今回はアヤメです。

Code
load fisheriris.mat
size(meas)
Output
ans = 1x2    
   150     4

4個の説明変数のそれぞれにつき、150個のデータがありますね。

それぞれの説明変数ごとの相関係数行列は次のコードで計算できます。

Code
R = corrcoef(meas)
Output
R = 4x4    
    1.0000   -0.1176    0.8718    0.8179
   -0.1176    1.0000   -0.4284   -0.3661
    0.8718   -0.4284    1.0000    0.9629
    0.8179   -0.3661    0.9629    1.0000

これで各変数の相関係数行列ができました。3番目と4番目の変数の相関がめちゃくちゃ高いですね。まぁ相関は単に線形の関係があるかどうか見ているだけなので必ず散布図を見ることを忘れてはいけないとは思います。

Code
% おまけ
plotmatrix(meas)

figure_0.png

これをみると4番目要らなくないですかね。

行列をヒートマップとして可視化

こちらにはheatmap関数というのがありました。

Code
h = heatmap(R);

figure_1.png

・・・色がイケてない

青が相関maxってなんか逆な感じしませんかね…。カラーマップももちろんいじれます。

Code
h.Colormap = parula(64);

figure_2.png

初めて使ったので知りませんでしたが、GUIで行、列の入れ替えができるんですね~。

heatmap.gif

追記(2020/7/2)

@sanmojih さんからコメントいただきました。色の範囲を指定することと、負の相関も相関アリとしてヒートマップでわかるようにすることで、さらに見やすく誤解がない可視化となります。

Code
h.ColorLimits = [-1,1];
h.Colormap = [flipud(parula(64));parula(64)]; % parulaの場合

colored_flipped.JPG

おわりに

ちょっと調べた内容のシェアでした。今回は短めです。

謝辞

いつも通り、eigsさんlivescript2markdown使わせていただいてます。

12
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5