什么是部分相关和它的目的
部分相关是用来寻找两个变量(通常是一个因变量和一个自变量)之间的相关关系,其他影响变量的影响被控制。
例如,如果有三个变量 "A"、"B"、"Z",如果你想找到 "A "和 "B "之间的关系,并控制 "Z "的影响,你可以使用部分相关。
它在现实世界的一些情况下是很有用的,并且可以用更有价值的见解来丰富你的EDA结果。
简单相关和部分相关的区别
在试图了解两个变量(A和B)之间的关系时,简单相关(又称皮尔逊相关系数)可能不会给出一个完整的画面,特别是当存在其他影响A(和/或)B的影响变量时。
事实上,简单相关主要集中在寻找每个变量对另一个变量的影响。
而部分相关是用来寻找两个变量之间的细化关系,其他影响变量的影响被排除/控制了。
让我们看看你可以使用部分相关的一些例子。
现实世界中的部分相关例子
1)教育。如果你有三个变量:学习时间、获得的分数、参加的课程,并且想通过控制学习时间的影响来找到参加的课程和获得的分数之间的相关性。部分相关在这里是相关的,因为 "学习时间 "可能也取决于所上的课(和分数),你可能想看看这两者之间的纯粹关系,排除学习时间的影响。
2)天气检测。如果你有三个变量气溶胶颗粒和云的丰度以及风速。你可以使用部分相关来寻找气溶胶量和云的丰度之间的关系。
3)重量检测。变量可以是食物的数量、体重增加、卡路里。这种技术可以用来寻找食物数量、体重增加之间的关系,而被控制的变量是卡路里。
局部相关的公式
创建数据集和视觉化
# Create a sample dataset
import pandas as pd
import matplotlib.pyplot as plt
import math
Data = {'A' : [4, 2, 2, 1, 8, 6, 9, 8, 11, 13, 12, 14],
'B' : [1, 2, 2, 4, 9, 8, 9, 6, 14, 12, 13, 12],
'Z' : [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]}
df = pd.DataFrame(Data, columns = ['A', 'B', 'Z'])
df

让我们创建一个变量'A'和'B'的散点图
# Scatterplot to understand the relationship
plt.plot(df["A"],df["B"],'ro')
plt.xlabel("A")
plt.ylabel("B")

很明显,随着'A'的增加,'B'也会增加。
在计算局部相关之前,让我们先计算皮尔逊相关。
# Calculate pearson correlation
df.corr()
局部相关的计算
pingouin 有一个叫做.partial_corr 的函数来计算部分相关。
#!pip install pingouin
import pingouin as pg
pg.partial_corr(data=df, x='A', y='B', covar='Z')
# Where,
# Data = Name of the dataframe.
# x = Name of column in dataframe.
# y = Name of column in dataframe.
# z = variable to be excluded/controlled.

在排除'Z'后,我们得到的部分相关值是0.910789,这相当于一个强正相关。为了计算多个变量之间的部分相关,我们使用了.pcorr() 函数。
df.pcorr().round(7)
在这种情况下,部分相关要比皮尔逊相关大。当第三个变量与其中一个变量有负相关关系时,就会出现这种情况。
否则,通常情况下,部分相关比皮尔逊相关要小。
局部相关的局限性
部分相关分析的一些限制是。
-
部分相关的计算完全依赖于简单相关系数。简单相关系数假定关系是线性形式的。但在现实世界中,线性关系的现象是相当罕见的。
-
当偏相关系数的阶数增加时,其可靠性就会下降。
-
它的计算是相当困难的,即找到'r'的值是相当困难和耗费时间的。但事情很容易,因为有很多软件和库可以执行这项工作。
-
随着控制变量数量的增加,计算部分相关将变得更加复杂。