Как рассчитать частичную корреляцию в Python

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

Например, предположим, что мы хотим измерить связь между количеством часов обучения учащегося и итоговой оценкой, которую он получает на экзамене, учитывая текущую оценку учащегося в классе. В этом случае мы можно использовать частную корреляцию, чтобы измерить взаимосвязь между часами обучения и fi итоговая оценка экзамена.

В этом руководстве объясняется, как вычислить частичную корреляцию в Python.

Пример: частичная корреляция в Python

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

import numpy as np
import panda as pd

data = {'currentGrade':  [82, 88, 75, 74, 93, 97, 83, 90, 90, 80],
        'hours': [4, 3, 6, 5, 4, 5, 8, 7, 4, 6],
        'examScore': [88, 85, 76, 70, 92, 94, 89, 85, 90, 93],
        }

df = pd.DataFrame(data, columns = ['currentGrade','hours', 'examScore'])
df

#   currentGrade  hours  examScore
#0            82      4         88
#1            88      3         85
#2            75      6         76
#3            74      5         70
#4            93      4         92
#5            97      5         94
#6            83      8         89
#7            90      7         85
#8            90      4         90
#9            80      6         93

Для расчета па Для определения реальной корреляции между часами и examScore при контроле currentGrade мы можем использовать partial_corr() функция из пакета pingouin, который использует следующий синтаксис:

partial_corr(data, x, y, covar)

где:

  • data: имя фрейма данных
  • x, y: имена столбцов в фрейме данных
  • covar: имя столбца covariate в фрейме данных (например, переменная, которую вы контролируете)

Вот как использовать эту функцию в этом конкретный пример:

#установить и импортировать пакет pingouin 
pip install pingouin
import pingouin as pg

#найти частичную корреляцию между количеством часов и экзаменационным баллом при контроле

pg.partial_corr(data=df, x='hours', y='examScore', covar='currentGrade')

#        n	   r	       CI95%	   r2	adj_r2	p-val	 BF10 power
#pearson 10	0.191	[-0.5, 0.73]	0.036	-0.238	0.598	0.438 0.082

Мы видим, что частичная корреляция между часами обучения и итоговой оценкой экзамена составляет 0,191, что является небольшой положительной корреляцией. По мере увеличения количества часов обучения экзаменационная оценка также имеет тенденцию к увеличению, при условии, что текущая оценка остается неизменной.

Чтобы рассчитать частичной корреляции между несколькими переменными одновременно, мы можем использовать функцию .pcorr():

#вычислить все попарные частные корреляции, округленные до трех знаков после запятой
df.pcorr().round(3)

# 		currentGrade	hours	examScore
#currentGrade		1.000   -0.311	    0.736
#hours			-0.311	1.000	    0.191
#examScore		0.736	0.191	    1.000

Способ интерпретации вывода выглядит следующим образом:

  • Частичная корреляция между текущей оценкой и количеством часов обучения:-0,311
  • Часть Частичная корреляция между текущей оценкой и экзаменационным баллом 0,736
  • Частичная корреляция между отработанными часами и экзаменационный балл 0,191