Как найти значение p коэффициента корреляции в пандах


Коэффициент корреляции Пирсона можно использовать для измерения линейной связи между двумя переменными.

Этот коэффициент корреляции всегда принимает значение от -1 до 1 , где:

  • -1 : Совершенно отрицательная линейная корреляция между двумя переменными.
  • 0 : Нет линейной корреляции между двумя переменными.
  • 1: Совершенно положительная линейная корреляция между двумя переменными.

Чтобы определить, является ли коэффициент корреляции статистически значимым, вы можете вычислить соответствующие t-показатель и p-значение.

Формула для расчета t-показателя коэффициента корреляции (r):

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

Значение p рассчитывается как соответствующее двустороннее значение p для t-распределения с n-2 степенями свободы.

Чтобы вычислить p-значение коэффициента корреляции Пирсона в pandas, вы можете использовать функцию pearsonr() из библиотеки SciPy :

 from scipy. stats import pearsonr

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

Эта функция вернет коэффициент корреляции Пирсона между столбцами столбец1 и столбец2 вместе с соответствующим значением 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 pandas:

 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 .

Это соответствует значению p из предыдущего результата.

Пример 2. Вычислите значение P для коэффициента корреляции между всеми столбцами в Pandas.

Следующий код показывает, как вычислить коэффициент корреляции Пирсона и соответствующее значение p для каждой парной комбинации столбцов в DataFrame pandas:

 #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() вы можете найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи panda:

Как рассчитать корреляцию по группам в Pandas
Как рассчитать скользящую корреляцию в пандах
Как рассчитать ранговую корреляцию Спирмена в пандах

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *