Як знайти p значення коефіцієнта кореляції у панд


Коефіцієнт кореляції Пірсона можна використовувати для вимірювання лінійного зв’язку між двома змінними.

Цей коефіцієнт кореляції завжди приймає значення від -1 до 1 , де:

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

Щоб визначити, чи є коефіцієнт кореляції статистично значущим, ви можете обчислити відповідний t-показник і p-значення.

Формула для розрахунку t-показника коефіцієнта кореляції (r):

t = r√ n-2 / √ 1-r 2

P-значення обчислюється як відповідне двостороннє p-значення для t-розподілу з n-2 ступенями свободи.

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

 from scipy. stats import pearsonr

pearsonr(df[' column1 '], df[' column2 '])

Ця функція поверне коефіцієнт кореляції Пірсона між стовпцями column1 і column2 разом із відповідним p-значенням, яке повідомляє нам, чи є коефіцієнт кореляції статистично значущим чи ні.

Якщо ви хочете обчислити p-значення для коефіцієнта кореляції Пірсона для кожної можливої попарної комбінації стовпців у DataFrame, ви можете скористатися такою спеціальною функцією для цього:

 def r_pvalues(df):
    cols = pd. DataFrame (columns= df.columns )
    p = cols. transpose (). join (cols, how=' outer ')
    for r in df. columns :
        for c in df. columns :
            tmp = df[df[r]. notnull () & df[c]. notnull ()]
            p[r][c] = round(pearsonr(tmp[r], tmp[c])[1], 4)
    return p

У наведених нижче прикладах показано, як на практиці обчислити значення p для коефіцієнтів кореляції за допомогою таких панд DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' x ': [4, 5, 5, 7, 8, 10, 12, 13, 14, 15],
                   ' y ': [10, 12, 14, 18, np.nan, 19, 13, 20, 14, np.nan],
                   ' z ': [20, 24, 24, 23, 19, 15, 18, 14, 10, 12]})

#view DataFrame
print (df)

    X Y Z
0 4 10.0 20
1 5 12.0 24
2 5 14.0 24
3 7 18.0 23
4 8 NaN 19
5 10 19.0 15
6 12 13.0 18
7 13 20.0 14
8 14 14.0 10
9 15 NaN 12

Приклад 1: обчисліть значення P для коефіцієнта кореляції між двома стовпцями в Pandas

У наступному коді показано, як обчислити коефіцієнт кореляції Пірсона та відповідне значення p для стовпців x і y DataFrame:

 from scipy. stats import pearsonr

#drop all rows with NaN values
df_new = df. dropna ()

#calculation correlation coefficient and p-value between x and y
pearsonr(df_new[' x '], df_new[' y '])

PearsonRResult(statistic=0.4791621985883838, pvalue=0.22961622926360523)

З результату ми бачимо:

  • Коефіцієнт кореляції Пірсона становить 0,4792 .
  • Відповідне значення p становить 0,2296 .

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

Однак, оскільки p-значення коефіцієнта кореляції не менше 0,05, кореляція не є статистично значущою.

Зауважте, що ми також можемо використовувати наступний синтаксис, щоб отримати p-значення з коефіцієнта кореляції:

 #extract p-value of correlation coefficient
pearsonr(df_new[' x '], df_new[' y '])[1]

0.22961622926360523

P-значення для коефіцієнта кореляції становить 0,2296 .

Це відповідає р-значенню з попереднього результату.

Приклад 2: обчисліть значення P для коефіцієнта кореляції між усіма стовпцями в Pandas

Наступний код показує, як обчислити коефіцієнт кореляції Пірсона та відповідне значення p для кожної попарної комбінації стовпців у pandas DataFrame:

 #create function to calculate p-values for each pairwise correlation coefficient
def r_pvalues(df):
    cols = pd. DataFrame (columns= df.columns )
    p = cols. transpose (). join (cols, how=' outer ')
    for r in df. columns :
        for c in df. columns :
            tmp = df[df[r]. notnull () & df[c]. notnull ()]
            p[r][c] = round(pearsonr(tmp[r], tmp[c])[1], 4)
    return p

#use custom function to calculate p-values
r_pvalues(df)

             X Y Z
x 0.0 0.2296 0.0005
y 0.2296 0.0 0.4238
z 0.0005 0.4238 0.0

З результату ми бачимо:

  • P-значення для коефіцієнта кореляції між x і y становить 0,2296 .
  • P-значення для коефіцієнта кореляції між x і z дорівнює 0,0005 .
  • P-значення для коефіцієнта кореляції між y і z становить 0,4238 .

Зауважте, що ми округлили p-значення до чотирьох знаків після коми в нашій спеціальній функції.

Не соромтеся замінити 4 в останньому рядку функції на інше число, щоб округлити до іншої кількості знаків після коми.

Примітка . Ви можете знайти повну документацію для функції SciPy pearsonr() тут .

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

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

Як розрахувати кореляцію за групою в Pandas
Як розрахувати ковзну кореляцію в пандах
Як розрахувати кореляцію рангів Спірмена в пандах

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

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