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

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

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



```math
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の値を取る。

```math
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様のページの説明](https://logics-of-blue.com/非線形もokな相関係数：mic/)が詳しい。qiitaでは[非線形の相関分析 MIC について](https://qiita.com/m-hayashi/items/2204e9d7e4e6837c6140)が詳しい。

# 色々なデータの関係を作り、Rで計算してみる
RでMICを使うには[minerva](https://cran.r-project.org/web/packages/minerva/index.html)パッケージが必要。

## 線形
下図の線形関係のデータを作って、各相関係数を計算する。
![plot (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187459/6e3e1dba-6faa-26c7-3ccf-f6828868a6fd.png)
次のように、いずれでも高い数値を得ることができる。

```R
> 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187459/59db65d1-8a4c-3934-4794-b56ff8291304.png)
なおRのコードは、以降、先のものと続けて実行するものとする。

```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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187459/14277878-905e-7b87-cf34-0fdd6b749c64.png)

```R
> 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187459/279589d8-8302-a149-17b9-8df205e950e7.png)


```R
> 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187459/b0dc6c4a-d640-ed70-a239-13732f31e1c2.png)

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

# 参考文献
- [minervaパッケージ](https://cran.r-project.org/web/packages/minerva/index.html)
- [非線形の相関分析 MIC について](https://qiita.com/m-hayashi/items/2204e9d7e4e6837c6140)
- [非線形もOKな相関係数：MIC](https://logics-of-blue.com/非線形もokな相関係数：mic/)
- [A Correlation for the 21st Century](https://science.sciencemag.org/content/334/6062/1502.long)