SciPy 斯皮爾曼相關係數(Spearman Correlation Coefficient)

Photo by Melnychuk Nataliya on Unsplash
Photo by Melnychuk Nataliya on Unsplash
斯皮爾曼相關係數(Spearman Correlation Coefficient)是一種無母數(nonparametric)方法。它將兩個變數分別依大小排序後的等級(rank),再以各等級差進行計算,以衡量兩變數的相關性。

斯皮爾曼相關係數(Spearman Correlation Coefficient)是一種無母數(nonparametric)方法。它將兩個變數分別依大小排序後的等級(rank),再以各等級差進行計算,以衡量兩變數的相關性。

斯皮爾曼相關係數

斯皮爾曼相關係數計算兩變數 X(independent variable)和 Y(dependent variable)相關性的方向。當斯皮爾曼相關係數為:

  • 0 < ρ <= 1:X 增加時,Y 趨向增加。
  • -1 <= ρ < 0:X 增加時,Y 趨向減少。
  • ρ = 0:X 增加時,Y 沒有任何趨向。

我們定義以下的假設:

接下來,我們要計算 correlation(ρ),並且定義一個臨界值(critical value)。一般來說,臨界值會取 0.05。當 p-value 大於等於臨界值時,H0 為真。

\text{H0 holds true } if \text{ p-value} \geq \text{critical value}

分等級

以下是從 Women Entrepreneurship and Labor Force 取得的部分資料。

No.CountryWomen Entrepreneurship Index
(X)

Entrepreneurship Index
(Y)
1Germany63.667.4
2Greece43.042.0
3Ireland64.365.3
4Italy51.441.3
5Latvia56.654.5
6Lithuania58.554.6
7Netherlands69.366.5
8Slovakia54.845.4
9Slovenia55.953.1
10Spain52.549.6

先將資料根據 Women Entrepreneurship Index 做排序,然後標上等級 Rank(X)。再根據 Entrepreneurship Index 做排序,並標上等級 Rank(Y)。之後,將成對的 Xi 與 Yi 相減求得 di。最後,加總所有的 di 平方。

CountryIndex (X)Index (Y)Rank (X)Rank (Y)didi x di
Germany63.667.4810-24
Greece43.042.012-11
Ireland64.365.39811
Italy51.441.32111
Latvia56.654.56600
Lithuania58.554.67700
Netherlands69.366.510911
Slovakia54.845.44311
Slovenia55.953.15500
Spain52.549.634-11
Sum10

計算 Correlation (ρ)

利用以下公式計算 correlation (ρ)。

\rho=1-\frac{6\sum d_i^2}{n(n^2-1)}

所以,根據上面的表格,我們可以求得 ρ = 0.9393。

\rho=1-\frac{6\sum 10^2}{10(10^2-1)}=0.9393

Python SciPy

我們可以利用 SciPy 的 spearmanr() 來計算出 correlation (ρ) 和 p-value。

correlation, p = spearmanr(x, y)
  • x, y:兩個樣本。型態為 array_like。
  • correlation:相關性 ρ。型態為 float。
  • p:p-value。型態為 float。

範例

from scipy.stats import spearmanr
x = [63.6, 43.0, 64.3, 51.4, 56.6, 58.5, 69.3, 54.8, 55.9, 52.5]
y = [67.4, 42.0, 65.3, 41.3, 54.5, 54.6, 66.5, 45.4, 53.1, 49.6]
correlation, p = spearmanr(x, y)
print('Correlation:', correlation)
print('p-value:', p)
if p >= 0.05:
    print('H0 is accepted')
else:
    print('H0 is rejected')

其輸出如下。

Correlation: 0.9393939393939393
p-value: 5.484052998513666e-05
H0 is rejected
發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You May Also Like