皮尔逊相关性(Pearson Correlation),也被称为皮尔逊积矩相关系数(Pearson Product-Moment Correlation Coefficient, PCC),是统计学中用于衡量两个连续变量之间线性关系强度和方向的常用指标。
什么是皮尔逊相关性以及它的系数代表什么?
皮尔逊相关系数(通常用
r
表示)精确地量化了两个变量之间呈直线的关联程度。
- 它的数值范围严格在 -1 到 +1 之间。
-
r = +1 表示两个变量之间存在完美的正线性关系。当一个变量增加时,另一个变量也呈比例增加,并且所有数据点都落在一条具有正斜率的直线上。
-
r = -1 表示两个变量之间存在完美的负线性关系。当一个变量增加时,另一个变量呈比例减少,并且所有数据点都落在一条具有负斜率的直线上。
-
r = 0 表示两个变量之间不存在线性关系。这并不意味着两个变量之间没有任何关系,它们可能存在非线性关系(例如,抛物线关系),但没有直线关系。
-
r 的绝对值(
|r|
)表示线性关系的强度。值越接近 1(无论是正 1 还是负 1),线性关系越强;值越接近 0,线性关系越弱。
例如,
r = 0.8
表示较强的正线性关系,而
r = -0.3
表示较弱的负线性关系。
需要什么样的数据?
皮尔逊相关性要求数据必须是连续的,即变量可以在一个区间内取任意值(例如,身高、体重、温度、销售额)。技术上讲,数据应是间隔尺度或比例尺度。对于分类数据(如性别、颜色)或排序数据(如排名、满意度等级),皮尔逊相关性通常不适用,应考虑其他相关性度量,如斯皮尔曼相关性。
为什么使用皮尔逊相关性?它的核心假设是什么?
皮尔逊相关性因其简单、直观且广泛应用于量化线性关系而流行。在许多领域,线性关系是分析变量间关联时的首要或重要考量。
核心假设:线性关系
皮尔逊相关性最大的前提是假设两个变量之间的关系是线性的。它专门设计来衡量数据点围绕一条直线的紧密程度。
如果两个变量之间存在非常强的非线性关系(例如,X 增加时 Y 先增加后减少,呈现抛物线形),皮尔逊相关系数可能接近于 0,错误地提示两者没有关系。因此,在使用皮尔逊相关性之前或之后,强烈建议通过散点图可视化数据,以初步判断关系是否接近线性。
何时可能不适合使用皮尔逊相关性?
- 当变量关系明显是非线性的。
- 数据包含显著的离群值(异常点),因为皮尔逊相关性对离群值非常敏感,单个或少数几个离群值可能极大地扭曲系数。
- 数据是分类或排序数据。
皮尔逊相关性在哪里被广泛应用?
皮尔逊相关性在许多学科和实际场景中都有应用:
- 金融领域: 分析不同股票价格之间的联动性,衡量资产收益率与市场指数的相关性,评估投资组合中不同资产类别的相关性以进行风险分散。
- 医学与生物学: 研究药物剂量与疗效之间的关系,分析生理指标(如血压、胆固醇水平)之间的关联,探索基因表达水平与疾病严重程度的相关性。
- 社会科学: 考察教育年限与收入水平的相关性,分析调查问卷中不同问题回答之间的关联,研究经济增长与失业率之间的关系。
- 工程与制造: 分析材料属性(如硬度、拉伸强度)与产品性能之间的关系,研究工艺参数(如温度、压力)与产品质量指标的相关性。
- 数据分析与机器学习: 在数据预处理阶段识别特征之间的相关性(例如,用于特征选择或处理多重共线性),理解数据集中变量间的结构关系。
皮尔逊相关系数如何计算?
皮尔逊相关系数
r
的计算基于变量的协方差和标准差。其公式为:
r = Cov(X, Y) / (StdDev(X) * StdDev(Y))
其中:
-
Cov(X, Y)
是变量 X 和 Y 的协方差,它衡量两个变量一起变化的程度。协方差的计算公式通常是:
-
StdDev(X)
是变量 X 的标准差,
StdDev(Y)
是变量 Y 的标准差。标准差是方差的平方根,衡量变量数据点在其平均值周围的分散程度。
Cov(X, Y) = Σ[(xi – avg_x)(yi – avg_y)] / (n – 1)
这里
xi
和
yi
是第
i
个数据点的 X 和 Y 值,
avg_x
和
avg_y
是 X 和 Y 的平均值,
n
是数据点数量。
计算步骤概览:
- 计算变量 X 的平均值(
avg_x
)和标准差(
StdDev(X)
)。
- 计算变量 Y 的平均值(
avg_y
)和标准差(
StdDev(Y)
)。
- 计算变量 X 和 Y 的协方差(
Cov(X, Y)
)。
- 将协方差除以 X 和 Y 标准差的乘积,得到皮尔逊相关系数
r
。
本质上,皮尔逊相关性是通过将两个变量的协方差(共同变化程度)标准化(除以它们各自的变化程度)来得到的一个无量纲指标,从而使得系数的可解释范围固定在 -1 到 +1 之间。
如何解读皮尔逊相关系数的值?
解读皮尔逊相关系数需要关注其符号和绝对值:
-
符号 (Sign):
- 正号 (+):表示正相关。当 X 增加时,Y 倾向于增加。
- 负号 (-):表示负相关。当 X 增加时,Y 倾向于减少。
-
绝对值 (|r|) – 关系强度:
-
|r| = 1:
完美线性关系。
-
0.7 < |r| <= 1:
强线性关系。数据点高度集中在一条直线上。
-
0.3 < |r| <= 0.7:
中等强度线性关系。数据点围绕一条直线有一定分散。
-
0 < |r| <= 0.3:
弱线性关系。数据点高度分散,线性模式不明显。
-
|r| = 0:
无线性关系。
-
重要提示: 这些强度阈值(0.7, 0.3 等)是常用的经验法则,但在不同领域或特定情境下,对“强”、“中等”、“弱”的定义可能会有所不同。在实际应用中,应结合具体的领域知识和数据背景来判断相关性的实际意义。
如何在编程中实现皮尔逊相关性的计算?
现代统计软件和编程库通常提供内置函数来方便地计算皮尔逊相关性,无需手动执行上述公式的每一步。
例如,在 Python 中使用 NumPy 或 SciPy 库:
import numpy as np from scipy import stats # 示例数据 (两个连续变量) variable_x = np.array([10, 15, 20, 25, 30, 35, 40]) variable_y = np.array([20, 28, 35, 42, 50, 58, 65]) # 使用 NumPy 计算相关系数矩阵 # corrcoef 返回一个 2x2 矩阵,其中对角线是变量与自身的相关性 (总是 1),非对角线是两个变量之间的相关性 correlation_matrix = np.corrcoef(variable_x, variable_y) pearson_r_np = correlation_matrix[0, 1] # 提取 x 和 y 之间的相关系数 print(f"NumPy 计算的皮尔逊相关系数: {pearson_r_np}") # 使用 SciPy 的 pearsonr 函数 # pearsonr 返回一个元组 (相关系数 r, 双侧 p 值) # p 值用于判断相关性是否具有统计学意义,与相关性强度是两个不同的概念 pearson_r_scipy, p_value_scipy = stats.pearsonr(variable_x, variable_y) print(f"SciPy 计算的皮尔逊相关系数: {pearson_r_scipy}") print(f"相应的 p 值: {p_value_scipy}")
这段代码演示了如何轻松地获得皮尔逊相关系数。SciPy 的 `pearsonr` 函数额外提供了 p 值,这在进行统计推断时非常有用(用来判断观察到的相关性是否可能是由随机因素造成的),但需要注意,p 值小只代表相关性显著(非零),不代表相关性很强。
如何将皮尔逊相关性与数据可视化结合?
散点图(Scatter Plot)是理解皮尔逊相关性最直观和有效的方式。
在散点图中,我们将一个变量放在横轴,另一个变量放在纵轴,每个数据点对应图上的一个点。
- 如果点近似地聚集并沿着一条直线上升,则皮尔逊相关性为正且绝对值较大。
- 如果点近似地聚集并沿着一条直线下降,则皮尔逊相关性为负且绝对值较大。
- 如果点非常分散,没有明显的直线趋势,则皮尔逊相关性接近于 0。
- 如果点呈现出明显的曲线形状(如 U 形、倒 U 形、指数增长等),即使皮尔逊相关性接近 0,也不能断定两变量无关,只是缺乏线性关系。
绘制散点图是计算皮尔逊相关性之前或之后进行数据探索的关键一步,它可以帮助你:
- 初步判断两个变量之间是否存在线性关系。
- 识别潜在的非线性关系。
- 发现可能影响相关系数的离群值。
重要的限制与注意事项
虽然皮尔逊相关性是一个强大的工具,但使用时必须清楚其局限性:
皮尔逊相关性衡量的是线性关系
如果两个变量之间存在非线性关系,皮尔逊相关系数可能很低,但这不代表它们之间没有关系。务必检查散点图。
皮尔逊相关性对离群值敏感
数据中的极端值会对计算结果产生不成比例的影响,可能夸大或减弱实际的线性关系。在计算前检查并妥善处理(或至少了解)离群值非常重要。
相关不等于因果
这是统计学中最常被误解的一点。即使两个变量之间存在非常强的皮尔逊相关性,也不能得出“一个变量导致另一个变量”的结论。相关性仅仅表明两个变量倾向于一起变化,可能是因为一个影响另一个,也可能是因为它们都被第三个(未被分析的)变量影响,或者仅仅是巧合。
一个经典的例子是:夏季冰淇淋销量和溺水事故数量之间呈正相关。但这并不意味着吃冰淇淋导致溺水,或溺水促进冰淇淋销售。真正的原因可能是炎热的天气(第三个变量)导致人们更多地购买冰淇淋,同时也导致更多的人去游泳,从而增加了溺水的风险。
数据类型要求
皮尔逊相关性仅适用于连续数据。将其用于分类或排序数据是不恰当的。
如何分析多个变量之间的皮尔逊相关性?相关性矩阵
虽然皮尔逊相关性本身是衡量两个变量之间的关系,但在实际数据分析中,我们常常需要理解多个变量两两之间的关系。这时,可以使用相关性矩阵(Correlation Matrix)。
相关性矩阵是一个表格,显示了数据集中所有变量对之间计算出的皮尔逊相关系数。如果数据集有
N
个变量,相关性矩阵将是一个
N x N
的矩阵。
- 矩阵的对角线上的值总是 1,因为任何变量与自身都完美相关。
- 矩阵是非对称的,上半部分与下半部分关于对角线对称(Variable A 与 Variable B 的相关性等于 Variable B 与 Variable A 的相关性)。
- 通过查看矩阵中非对角线上的值,可以快速了解任意两个变量之间的线性关系强度和方向。
在编程中,计算相关性矩阵也非常容易,例如在 Python 的 pandas 库中:
import pandas as pd import numpy as np # 创建一个 DataFrame data = {'VarA': [1, 2, 3, 4, 5], 'VarB': [2, 4, 5, 4, 5], 'VarC': [5, 4, 3, 2, 1]} df = pd.DataFrame(data) # 计算皮尔逊相关性矩阵 correlation_matrix_df = df.corr(method='pearson') print("皮尔逊相关性矩阵:") print(correlation_matrix_df)
相关性矩阵是数据探索阶段一个非常有用的工具,可以帮助识别哪些变量可能高度相关(无论是正相关还是负相关),这对于特征工程、模型构建前的变量选择或多重共线性诊断都很有价值。
总而言之,皮尔逊相关性是探索和量化两个连续变量线性关系的基本工具。理解其计算原理、准确解读系数以及牢记其核心假设和局限性,是在数据分析中有效利用它的关键。