LoginSignup
11
5

More than 1 year has passed since last update.

ピアソン、スピアマン、MICの相関係数をRで試し比較してみる

Last updated at Posted at 2019-07-04

はじめに

2つのデータの関係性を大まかに見るために、相関係数を計算することがある。
ここで、よく使われそうな3つの相関係数を簡単にまとめ、人工データで試して使い所を確認してみた。

#ピアソンの相関係数
2つの変数について線形関係を見るのに使われる。偏差の正規分布を仮定するパラメトリックな方法である。-1から1の値を取る。

r_{xy} = \frac{\displaystyle \sum_{i = 1}^n (x_i - \overline{x})
(y_i - \overline{y})}{\sqrt{\displaystyle \sum_{i = 1}^n 
(x_i - \overline{x})^2\displaystyle \sum_{i = 1}^n 
(y_i - \overline{y})^2}}

スピアマンの順位相関係数

2つの変数間の単調関係を評価するのに使われる。各変数の順位の差を求める(下記式のd)。ピアソンとは違いノンパラメトリックな方法である。-1から1の値を取る。

r_s = 1 - \frac{6\displaystyle \sum_{i = 1}^n {d_i}^2}{n(n^2 - 1)}

MIC(Maximun Information Coefficient)

線形の関係だけでなく非線形の関係も捉えることができる相関係数として使われる。0から1の値を取る。logic of blue様のページの説明が詳しい。qiitaでは非線形の相関分析 MIC についてが詳しい。

色々なデータの関係を作り、Rで計算してみる

RでMICを使うにはminervaパッケージが必要。

線形

下図の線形関係のデータを作って、各相関係数を計算する。
plot (11).png
次のように、いずれでも高い数値を得ることができる。

> library(minerva)
> set.seed(1)
> x1 <- rnorm(n=100)
> set.seed(2)
> e <- rnorm(n=100)
> y1 <- 4*x1 + 5 + e
> plot(x1,y1)
> cor(x1, y1, method="pearson")
[1] 0.947994
> cor(x1, y1, method="spearman")
[1] 0.9432103
> mine(x1, y1)$MIC
[1] 0.8849022

3次曲線

この場合、ピアソンよりもスピアマンの方が数値が大きい場合がある。これは線形関係からは外れているものの、単調増加の傾向は強いためにこうなる。
plot (12).png
なおRのコードは、以降、先のものと続けて実行するものとする。

> y2 <- 3*x1^3 + x1^2 + 2*x1+ 5 + e
> plot(x1, y2)
> cor(x1, y2, method="pearson")
[1] 0.8569895
> cor(x1, y2, method="spearman")
[1] 0.9351695
> mine(x1, y2)$MIC
[1] 0.8290487

2次曲線

この場合、ピアソンもスピアマンも数値が絶対値的にかなり低くなるが、MICはきちんと高い数値が得られている。
plot (13).png

> y3 <- 4*x1^2 + 5 + e
> plot(x1, y3)
> cor(x1, y3, method="pearson")
[1] 0.08319834
> cor(x1, y3, method="spearman")
[1] 0.1007261
> mine(x1, y3)$MIC
[1] 0.7361249

sinカーブ

2次曲線と同様にMICは高い数値が得られている。
plot (14).png

> y4 <- 2*sin(5*x1) + e
> plot(x1, y4)
> cor(x1, y4, method="pearson")
[1] -0.0958496
> cor(x1, y4, method="spearman")
[1] -0.08838884
> mine(x1, y4)$MIC
[1] 0.638089

乱数関係

さすがにどれも絶対値的に低い値になる。しかし、MICは他のものよりは数値が高めに出るので、この点は気をつけた方が良いのかもしれない。
plot (15).png

> set.seed(2)
> y5 <- rnorm(n=100)
> plot(x1, y5)
> cor(x1, y5, method="pearson")
[1] -0.1537208
> cor(x1, y5, method="spearman")
[1] -0.1537954
> mine(x1, y5)$MIC
[1] 0.2701778

最後に

ざっと3つの相関係数を色々な状況で使ってみた。データ種がたくさんあるときはこれらの指標を用いて関係性をざっと見てみたのち、有望なものは可視化し最終確認するのが良いと考える。

参考文献

11
5
0

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
11
5