斯皮爾曼相關係數(Spearman Correlation Coefficient)是一種無母數(nonparametric)方法。它將兩個變數分別依大小排序後的等級(rank),再以各等級差進行計算,以衡量兩變數的相關性。
Table of Contents
斯皮爾曼相關係數
斯皮爾曼相關係數計算兩變數 X(independent variable)和 Y(dependent variable)相關性的方向。當斯皮爾曼相關係數為:
- 0 < ρ <= 1:X 增加時,Y 趨向增加。
- -1 <= ρ < 0:X 增加時,Y 趨向減少。
- ρ = 0:X 增加時,Y 沒有任何趨向。
我們定義以下的假設:
- Null hypothesis (H0):ρ is equal to 0。
- Alternative hypothesis (H1):ρ is not equal to 0。
接下來,我們要計算 correlation(ρ),並且定義一個臨界值(critical value)。一般來說,臨界值會取 0.05。當 p-value 大於等於臨界值時,H0 為真。
分等級
以下是從 Women Entrepreneurship and Labor Force 取得的部分資料。
No. | Country | Women Entrepreneurship Index (X) | Entrepreneurship Index (Y) |
---|---|---|---|
1 | Germany | 63.6 | 67.4 |
2 | Greece | 43.0 | 42.0 |
3 | Ireland | 64.3 | 65.3 |
4 | Italy | 51.4 | 41.3 |
5 | Latvia | 56.6 | 54.5 |
6 | Lithuania | 58.5 | 54.6 |
7 | Netherlands | 69.3 | 66.5 |
8 | Slovakia | 54.8 | 45.4 |
9 | Slovenia | 55.9 | 53.1 |
10 | Spain | 52.5 | 49.6 |
先將資料根據 Women Entrepreneurship Index 做排序,然後標上等級 Rank(X)。再根據 Entrepreneurship Index 做排序,並標上等級 Rank(Y)。之後,將成對的 Xi 與 Yi 相減求得 di。最後,加總所有的 di 平方。
Country | Index (X) | Index (Y) | Rank (X) | Rank (Y) | di | di x di |
---|---|---|---|---|---|---|
Germany | 63.6 | 67.4 | 8 | 10 | -2 | 4 |
Greece | 43.0 | 42.0 | 1 | 2 | -1 | 1 |
Ireland | 64.3 | 65.3 | 9 | 8 | 1 | 1 |
Italy | 51.4 | 41.3 | 2 | 1 | 1 | 1 |
Latvia | 56.6 | 54.5 | 6 | 6 | 0 | 0 |
Lithuania | 58.5 | 54.6 | 7 | 7 | 0 | 0 |
Netherlands | 69.3 | 66.5 | 10 | 9 | 1 | 1 |
Slovakia | 54.8 | 45.4 | 4 | 3 | 1 | 1 |
Slovenia | 55.9 | 53.1 | 5 | 5 | 0 | 0 |
Spain | 52.5 | 49.6 | 3 | 4 | -1 | 1 |
Sum | 10 |
計算 Correlation (ρ)
利用以下公式計算 correlation (ρ)。
所以,根據上面的表格,我們可以求得 ρ = 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