Як розрахувати кореляцію в python


Одним із способів кількісного визначення зв’язку між двома змінними є використання коефіцієнта кореляції Пірсона , який є мірою лінійного зв’язку між двома змінними . Він завжди приймає значення від -1 до 1, де:

  • -1 вказує на абсолютно негативну лінійну кореляцію між двома змінними
  • 0 означає відсутність лінійної кореляції між двома змінними
  • 1 вказує на абсолютно позитивну лінійну кореляцію між двома змінними

Чим далі коефіцієнт кореляції від нуля, тим сильніший зв’язок між двома змінними.

Цей посібник пояснює, як обчислити кореляцію між змінними в Python.

Як розрахувати кореляцію в Python

Щоб обчислити кореляцію між двома змінними в Python, ми можемо використати функцію Numpy corrcoef() .

 import numpy as np

np.random.seed(100)

#create array of 50 random integers between 0 and 10
var1 = np.random.randint(0, 10, 50)

#create a positively correlated array with some random noise
var2 = var1 + np.random.normal(0, 10, 50)

#calculate the correlation between the two arrays
np.corrcoef(var1, var2)

[[ 1. 0.335]
[ 0.335 1. ]]

Можна побачити, що коефіцієнт кореляції між цими двома змінними становить 0,335 , що є позитивною кореляцією.

За замовчуванням ця функція створює матрицю коефіцієнтів кореляції. Якби ми хотіли лише повернути коефіцієнт кореляції між двома змінними, ми могли б використати такий синтаксис:

 np.corrcoef(var1, var2)[0,1]

0.335

Щоб перевірити, чи ця кореляція є статистично значущою, ми можемо обчислити значення p, пов’язане з коефіцієнтом кореляції Пірсона, використовуючи функцію Scipy pearsonr() , яка повертає коефіцієнт кореляції Пірсона, а також двобічне значення p.

 from scipy.stats.stats import pearsonr

pearsonr(var1, var2)

(0.335, 0.017398)

Коефіцієнт кореляції становить 0,335 , а двостороннє значення p — 0,017 . Оскільки це p-значення менше 0,05, можна зробити висновок, що існує статистично значуща кореляція між двома змінними.

Якщо ви хочете обчислити кореляцію між декількома змінними в Pandas DataFrame, ви можете просто скористатися функцією .corr() .

 import pandas as pd

data = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)), columns=['A', 'B', 'C'])
data

  ABC
0 8 0 9
1 4 0 7
2 9 6 8
3 1 8 1
4 8 0 8

#calculate correlation coefficients for all pairwise combinations
data.corr()

          ABC
A 1.000000 -0.775567 -0.493769
B -0.775567 1.000000 0.000000
C -0.493769 0.000000 1.000000

І якщо ви хочете лише обчислити кореляцію між двома конкретними змінними в DataFrame, ви можете вказати змінні:

 data['A'].corr(data['B'])

-0.775567

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в Python:

Як створити кореляційну матрицю в Python
Як обчислити кореляцію рангів Спірмена в Python
Як обчислити автокореляцію в Python

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *