4. 偏相关与距离相关

在环境数据分析中,两个变量呈现出显著相关,并不等于它们之间存在直接的因果或物理联系。最典型的例子是:某城市夏季的臭氧浓度与冰淇淋销量高度正相关,但真正驱动两者同步上升的是“气温”和“日照”这类共同因素。这类同时影响两个变量的第三方变量,就是混杂因素。偏相关(partial correlation)要回答的问题是:在扣除混杂因素影响之后,X 与 Y 之间还剩下多少关联?而距离相关(distance correlation)则进一步处理另一类难题——非线性、非单调的依赖关系,例如环境变量之间常见的阈值效应、U 形响应或周期性耦合。

一、偏相关的原理与计算路径

偏相关的核心思想是“先剔除、再相关”。以控制一个变量 Z 为例,标准做法分三步:用 X 对 Z 做线性回归,取残差 rX;用 Y 对 Z 做回归,取残差 rY;再计算 rX 与 rY 的皮尔逊相关系数,即为控制 Z 后 X 与 Y 的一阶偏相关。残差的含义是“X 中无法被 Z 解释的部分”,因此偏相关衡量的是两个变量各自独立于 Z 的波动之间的同步程度。

当需要同时控制多个混杂因素(如季节、温度、湿度、风速)时,把上述回归扩展为多元回归即可,得到的是高阶偏相关。偏相关系数的取值范围仍在 −1 到 1 之间,符号方向与普通相关一致;显著性检验的自由度需要扣除被控制变量的个数,即 df = n − k − 2(k 为控制变量数),这一点在样本量不大时尤其重要,否则容易高估显著性。

在 Python 中,pingouin 库提供了直接接口,无需手工做残差回归:

import pandas as pd
import pingouin as pg

# 假设 df 含列:o3(臭氧)、temp(气温)、season(季节编码)、humidity(湿度)
# 控制季节与湿度,计算臭氧与气温的偏相关
result = pg.partial_corr(
    data=df,
    x='o3',
    y='temp',
    covar=['season', 'humidity'],
    method='pearson'
)
print(result)
# 输出包含 r(偏相关系数)、p-val、CI95%、n 等字段

解读结果时,应把偏相关与零阶相关放在一起对照。若零阶相关为 0.72,而控制季节和湿度后偏相关降到 0.18 且不显著,说明原先的强关联很大程度上由混杂因素“借道”产生;若偏相关仍保持在 0.6 以上,则说明该关联在控制条件下依然稳健。这种“前后对比”本身就是混杂效应强弱的直接证据,比单看一个系数更有信息量。

偏相关假设变量间为线性关系,且残差近似正态。若环境数据存在明显非线性(如温度对污染物浓度的 U 形影响),偏相关可能低估真实关联,此时应结合距离相关或分层分析交叉验证。

二、距离相关:捕捉非线性依赖

距离相关由 Székely 等人提出,其统计量 R 基于变量间的成对距离矩阵,而非协方差。它的关键优势是:R = 0 当且仅当两个变量统计独立,因此能识别皮尔逊相关系数为零但实际存在强依赖的情形。例如某污染物浓度随风速先升后降,线性相关可能接近 0,但距离相关会给出明显非零值。距离相关系数通常取 R 的平方根,范围在 0 到 1 之间,越接近 1 依赖越强,但它不区分正负方向,只反映依赖强度。

使用 pingouin 计算距离相关非常简洁:

# 计算臭氧与风速的距离相关(可捕捉非线性依赖)
dcor = pg.distance_corr(df['o3'], df['wind_speed'])
print(dcor)   # 返回 0~1 之间的依赖强度

# 与线性相关对照
print(df[['o3', 'wind_speed']].corr(method='pearson'))

实践中建议把三种系数并列成一张对照表来判读:皮尔逊相关反映线性同步,偏相关反映控制混杂后的线性净关联,距离相关反映整体依赖强度(含非线性)。若距离相关明显高于皮尔逊相关的绝对值,往往提示存在非线性结构,值得进一步画散点图或分箱统计;若偏相关远低于零阶相关,则提示混杂因素贡献大。两者结合,才能避免“相关即因果”的误判。

混杂控制与依赖强度判读:偏相关 vs 距离相关 混杂因素 Z 季节 · 气温 · 湿度 · 风速 变量 X 臭氧浓度 O₃ 变量 Y 气温 / 风速 共同影响 共同影响 待检验的关联 偏相关(控制 Z 后) ① X 对 Z 回归 → 残差 rX ② Y 对 Z 回归 → 残差 rY ③ corr(rX, rY) = 偏相关系数 判读:偏相关 ≪ 零阶相关 → 混杂强 距离相关(整体依赖) 基于成对距离矩阵,非协方差 R = 0 ⇔ 统计独立 可识别 U 形、阈值、周期耦合 判读:距离相关 ≫ |皮尔逊| → 非线性

三、把两种方法串成一条分析链

面对一份环境监测数据,建议按以下顺序推进,而不是一上来就套公式。第一步,明确研究问题中的 X 与 Y,并列出可能同时影响二者的候选混杂因素,这一步依赖领域知识而非统计工具。第二步,计算零阶相关,得到“表面关联”的基线。第三步,用 pg.partial_corr 控制混杂因素,观察系数变化幅度与显著性。第四步,用 pg.distance_corr 检查是否存在被线性方法漏掉的非线性依赖。第五步,对异常结果回到散点图或分箱均值图上做可视化确认,避免仅凭数字下结论。

需要提醒的是,偏相关只能控制已测量并纳入模型的混杂因素,未测量的混杂(如局地排放源、地形)无法被扣除,因此偏相关显著也不等于因果成立。距离相关虽然对非线性友好,但对样本量较敏感,小样本下 R 的估计波动较大,且它不提供方向信息。把两者作为互补的诊断工具,配合领域判断,才是环境数据分析中稳妥的做法。

常见误区:把偏相关系数当作“净效应”的因果估计。偏相关只是统计上的条件关联,若控制变量本身与结果存在复杂反馈(如气温既影响臭氧又被臭氧反馈影响),线性控制可能引入新的偏倚,此时应考虑结构方程或因果图方法。

最后给出一个可复用的判读口径:零阶相关高、偏相关低且不显著,优先怀疑混杂;零阶相关低、距离相关高,优先怀疑非线性;三者都高,关联较为稳健但仍需因果论证。把这张“系数对照表”固化到分析流程里,能显著减少环境数据相关性分析中的误读。