Tương quan Spearman Python

Hiểu mối quan hệ giữa hai hoặc nhiều biến là cốt lõi của nhiều khía cạnh của phân tích dữ liệu hoặc phân tích thống kê. Hệ số tương quan hoặc tương quan nắm bắt mối liên hệ giữa hai biến (trong trường hợp đơn giản nhất),  bằng số

Một trong những thước đo tương quan thường được sử dụng là hệ số tương quan Pearson. Một thước đo tương quan thường được sử dụng khác là hệ số tương quan Spearman

Trong bài đăng này, trước tiên chúng ta sẽ xem các ví dụ về tính toán tương quan Pearson và Spearman trong Python bằng Pandas, Scikit Learn và NumPy

Chúng tôi sẽ sử dụng dữ liệu gapminder và tính toán mối tương quan giữa gdpPercap và giá trị tuổi thọ từ nhiều quốc gia theo thời gian. Trong trường hợp này, chúng tôi hy vọng rằng tuổi thọ sẽ tăng lên khi GDP bình quân đầu người của đất nước tăng lên

Hãy để chúng tôi tìm ra cách tính tương quan Pearson và spearman trong Python. Trước tiên chúng ta hãy tải các gói cần thiết

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Hãy để chúng tôi tải dữ liệu gapminder dưới dạng khung dữ liệu Pandas

data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997

Tương quan Pearson

Tương quan Pearson định lượng mối quan hệ tuyến tính giữa hai biến. Hệ số tương quan Pearson có thể nằm trong khoảng từ -1 đến +1, giống như các biện pháp tương quan khác. Tương quan Pearson dương có nghĩa là giá trị của một biến tăng theo các biến khác. Và hệ số Pearson âm có nghĩa là một biến giảm khi biến khác giảm. Các hệ số tương quan -1 hoặc +1 có nghĩa là mối quan hệ chính xác là tuyến tính

Tương quan Pearson với Pandas

Pandas cung cấp hàm corr() mà chúng ta có thể sử dụng nó với chuỗi Pandas như hình bên dưới. Chúng ta có thể thấy rằng gdpPercap và lifeExp có mối tương quan tích cực cho thấy sự gia tăng của gdpPercap làm tăng tuổi thọ trên tất cả

gapminder.gdpPercap.corr(gapminder.lifeExp, method="pearson")

0.5837062198659948

Tương quan Pearson với NumPy

Chúng ta cũng có thể sử dụng NumPy để tính hệ số tương quan Pearson. Hàm corrcoef() của NumPy có thể nhận nhiều biến dưới dạng mảng 2D NumPy và trả về ma trận tương quan

np.corrcoef(gapminder.gdpPercap, gapminder.lifeExp)

Trong trường hợp đơn giản nhất với hai biến, nó trả về ma trận 2×2 với các giá trị tương quan Pearson

array([[1.        , 0.58370622],
       [0.58370622, 1.        ]])

Tương quan Pearson với SciPy

Chúng ta cũng có thể tính toán hệ số tương quan Pearson bằng cách sử dụng mô-đun thống kê của SciPy

from scipy import stats
gdpPercap = gapminder.gdpPercap.values
life_exp = gapminder.lifeExp.values

Mô-đun thống kê SciPy có một hàm gọi làpeasonr() có thể lấy hai mảng NumPy và trả về một bộ chứa hệ số tương quan Pearson và tầm quan trọng của mối tương quan dưới dạng giá trị p

stats.pearsonr(gdpPercap,life_exp)

Phần tử đầu tiên của bộ dữ liệu là tương quan Pearson và phần tử thứ hai là giá trị p

(0.5837062198659948, 3.565724241051659e-156)

tương quan giáo

Tương quan Pearson giả định rằng dữ liệu chúng ta đang so sánh được phân phối bình thường. Khi giả định đó không đúng, giá trị tương quan đang phản ánh mối liên hệ thực sự. Tương quan Spearman không giả định rằng dữ liệu đến từ một phân phối cụ thể, do đó, đây là phép đo tương quan phi tham số. Tương quan Spearman còn được gọi là tương quan xếp hạng của Spearman vì nó tính toán hệ số tương quan trên các giá trị xếp hạng của dữ liệu

Mối tương quan của Spearman với Pandas

Chúng ta có thể sử dụng hàm corr() với tham số method=”spearman” để tính toán tương quan của spearman bằng cách sử dụng Pandas

gapminder.gdpPercap.corr(gapminder.lifeExp, method="spearman")
____9
data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
0

Tương quan Spearman với NumPy

NumPy không có chức năng cụ thể để tính tương quan Spearman. Tuy nhiên, chúng ta có thể sử dụng định nghĩa tương quan Spearman, đó là tương quan giá trị xếp hạng của các biến. Về cơ bản, chúng tôi tính toán thứ hạng của hai biến và sử dụng thứ hạng với hàm tương quan Pearson có sẵn trong NumPy

data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
1
data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
2
data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
3

Như chúng ta đã thấy trước đây, điều này trả về một ma trận tương quan cho tất cả các biến. Và lưu ý kết quả tương quan Spearman từ NumPy khớp với athat từ Pandas

data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
4

Mối tương quan giữa Spearman với SciPy

Sử dụng SciPy, chúng ta có thể tính tương quan Spearman bằng cách sử dụng hàm spearmanr() và chúng ta sẽ nhận được kết quả tương tự như trên

data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
5

Hiểu sự khác biệt giữa tương quan Pearson và Spearman

Điều đầu tiên nổi bật khi so sánh các hệ số tương quan giữa gdpPercap và lifeExp được tính toán bởi các hệ số tương quan Pearson và Spearman là sự khác biệt lớn giữa chúng. Tại sao chúng khác nhau?

Như đã đề cập trước đây, tương quan Pearson giả định dữ liệu được phân phối bình thường. Tuy nhiên, Spearman không đưa ra bất kỳ giả định nào về việc phân phối dữ liệu. Đó là lý do chính cho sự khác biệt

Hãy để chúng tôi kiểm tra xem các biến có được phân phối bình thường không. Chúng ta có thể hình dung các bản phân phối bằng biểu đồ. Hãy để chúng tôi lập biểu đồ giá trị tuổi thọ từ dữ liệu gapminder

data_url = 'http://bit.ly/2cLzoxH'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# let us select two relevant columns
gapminder = gapminder[['gdpPercap', 'lifeExp']]
print(gapminder.head(3))

    gdpPercap  lifeExp
0  779.445314   28.801
1  820.853030   30.332
2  853.100710   31.997
6

Đây là phân phối của tuổi thọ và chúng ta có thể thấy rõ rằng nó không phải là phân phối bình thường. Không được hiển thị ở đây, nhưng phân phối của gdPercap không được phân phối bình thường. Do đó, giả định hệ số tương quan Pearson rõ ràng bị vi phạm và có thể giải thích sự khác biệt mà chúng ta thấy

Tương quan Spearman Python
Tương quan Spearman Python
Phân phối các giá trị Tuổi thọ từ dữ liệu gapminder

Ngoài ra, tương quan Pearson nắm bắt được sức mạnh của mối quan hệ tuyến tính giữa hai biến. Tuy nhiên, tương quan xếp hạng Spearman cũng có thể nắm bắt được mối liên hệ phi tuyến tính. Nếu chúng ta nhìn vào biểu đồ phân tán của mối quan hệ giữa gdpPercap và lifeExp, chúng ta có thể thấy rằng mối quan hệ này không phải là tuyến tính. Và điều này cũng có thể giải thích sự khác biệt

Sự khác biệt giữa tương quan Pearson và Spearman là gì?

Tương quan Pearson. Tương quan Pearson đánh giá mối quan hệ tuyến tính giữa hai biến liên tục. Tương quan giáo sĩ. Tương quan Spearman đánh giá mối quan hệ đơn điệu . Hệ số tương quan Spearman dựa trên các giá trị được xếp hạng cho từng biến thay vì dữ liệu thô.

Tương quan Spearman được sử dụng để làm gì?

Tương quan thứ hạng giáo sĩ. Tương quan xếp hạng Spearman là một phép thử phi tham số được sử dụng để đo lường mức độ liên kết giữa hai biến .

Tương quan được tính bằng Python như thế nào?

Hệ số Tương quan Pearson có thể được tính bằng Python bằng cách sử dụng phương thức corrcoef() từ Numpy . Đầu vào cho chức năng này thường là một ma trận, giả sử có kích thước mxn , trong đó. Mỗi cột đại diện cho các giá trị của một biến ngẫu nhiên. Mỗi hàng đại diện cho một mẫu duy nhất của n biến ngẫu nhiên.

Tương quan Spearman là r hay r2?

Hệ số tương quan, r, dao động từ -1 đến +1. Hệ số tương quan Spearman không tham số, viết tắt là rs, có cùng phạm vi. Giá trị sau này đôi khi được biểu thị bằng chữ Hy Lạp ρ (rho). . Hệ số tương quan