如何在python中计算偏相关
在统计学中,我们经常使用皮尔逊相关系数来衡量两个变量之间的线性关系。然而,有时我们想在控制第三个变量的同时了解两个变量之间的关系。
例如,假设我们想要衡量学生的学习时数与期末考试成绩之间的关联,同时控制学生在班级中的当前成绩。在这种情况下,我们可以使用偏相关来衡量学习时间和期末考试成绩之间的关系。
本教程介绍如何在 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
要在控制currentGrade的同时计算小时数和examScore之间的偏相关性,我们可以使用penguin 包中的partial_corr()函数,该函数使用以下语法:
partial_corr(数据,x,y,协方差)
金子:
- data:数据框的名称
- x, y:数据框中的列名称
- covar:数据框中协变量列的名称(例如您正在控制的变量)
以下是在此特定示例中使用此函数的方法:
#install and import penguin package pip install penguin import penguin as pg #find partial correlation between hours and exam score while controlling for grade 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()函数:
#calculate all pairwise partial correlations, rounded to three decimal places
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 。