#スピアマンの順位相関係数とは
2変数間に、どの程度、順位づけの直線関係があるかを調べる際に使う分析手段がスピアマンの順位相関です。
データが順位尺度のとき(順位しか付けられないとき)に使用すべき手法です。
式は以下の通りです。
$ \large \rho = 1 - \frac{6 \sum_{i=1}^{N} D^2}{N(N^2 -1)}$
N : データの数
例として10人の学生の数学と英語の順位を次の表に表します(スピアマンの順位相関係数)。
学生 | 数学の順位 | 英語の順位 |
---|---|---|
1 | 6 | 10 |
2 | 4 | 1 |
3 | 5 | 4 |
4 | 10 | 9 |
5 | 2 | 3 |
6 | 8 | 8 |
7 | 3 | 6 |
8 | 9 | 5 |
9 | 1 | 2 |
10 | 7 | 7 |
こちらのスピアマン順位相関係数は0.672となり、強い相関関係があると言えます。
つまり、数学ができる人は英語もできる、という結果になったわけですね。
このスピアマン順位相関をPythonで書くと以下のようなコードになります。
Spearman1.py
import numpy as np
math = [6, 4, 5, 10, 2, 8, 3, 9, 1, 7]
english = [10, 1, 4, 9, 3, 8, 6, 5, 2, 7]
def spearman(math, english):
math = np.array(math)
english = np.array(english)
N = len(math)
return 1 - (6*sum((math -english)**2) / (N*(N**2 - 1)))
spearman(math ,english) #0.6727272727272727
scipy.stats.spearmanrを使う方が無難のようです。
やり方は以下の通りです。
Spearman2.py
from scipy.stats import spearmanr
math = [6, 4, 5, 10, 2, 8, 3, 9, 1, 7]
english = [10, 1, 4, 9, 3, 8, 6, 5, 2, 7]
correlation, pvalue = spearmanr(math, english)
print(correlation) #0.6727272727272726
Python楽でいいですね。