12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでスピアマンの順位相関分析をする

Last updated at Posted at 2019-08-26

#スピアマンの順位相関係数とは
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楽でいいですね。

#参考
スピアマンの順位相関係数
相関分析2
numpy.corrcoef

12
13
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
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?