跳至主要内容

多元线性回归:多结果建模指南

了解何时使用多元线性回归,掌握其数学基础,并通过实用示例在 Python 中实现。
· 11分钟 阅读

使用 AI 探索

有时您需要同时预测不止一个指标,比如用同一份数据同时预测销售额和客户流失。

在本文中,我将教您如何进行这种多任务建模。我会讲解多元线性回归:它是什么、如何运作、何时使用,以及如何在实践中应用。读完后,您就能将其用于现实问题。 

如果您对回归还不熟悉,您可能会先回顾我们的R 回归入门或使用 Python statsmodels 的回归入门。

什么是多元线性回归?

多元线性回归是一种统计技术,用于建模多个自变量与多个因变量之间的关系。它有时会与多重线性回归混淆,因为名字相似,我自己也曾混淆过。但多重线性回归是用多个预测变量来估计一个单一结果;而多元线性回归专为需要同时预测多个结果的情形而设计。

理论基础与模型设定

我刚刚概述了多元回归是什么以及何时使用它。下面来讲讲模型的结构以及它所依赖的假设。

矩阵表示

多元回归使用基于矩阵的设定来同时建模多个结果:

以矩阵形式表示的多元线性回归方程

其中:

  • Y 是一个 n×p 的因变量矩阵(n 个观测,p 个响应变量)
  • X 是一个 n×(k+1) 的自变量矩阵(包含截距)
  • B 是一个 (k+1)×p 的回归系数矩阵
  • E 是一个 n×p 的误差项矩阵

这种方法认识到不同响应变量的误差项可能相关,因此比起分别建模的单变量模型,参数估计往往更高效。 

假设

在使用模型前,了解必须满足的假设——以及当它们不满足时的应对方式——十分重要。

  • 线性性:每个预测变量应与每个结果呈线性关系。非线性关系会使结果产生偏差。 
  • 独立性:观测之间应相互独立。如果不独立(我在想时间序列或聚类数据),标准误就会不可靠。
  • 多元正态性:误差项应服从多元正态分布。即使不满足,系数估计仍然无偏,但置信区间和假设检验的准确性可能受影响。Shapiro-Wilk 检验可分别评估每个结果的正态性,而多元正态性最好用 Mardia 检验等专门方法进行评估,它们会考虑残差间的相关性。
  • 同方差性:误差的方差应在不同预测变量和结果之间保持恒定。否则模型效率会降低。 
  • 不存在 完全 多重共线性:预测变量之间不应完美相关。 

如果这些假设不成立,您需要进行调整。例如,针对非线性或正态性问题尝试变量变换,针对异方差问题改用加权最小二乘,对共线性问题使用岭回归等方法。

处理分类变量

如果使用分类变量,您需要先将其转换为虚拟变量(哑变量)。 

对于一个含 k 个类别的分类变量,创建 k-1 个虚拟变量,以避免所谓“虚拟变量陷阱”的冗余。被省略的类别成为参照水平。此时系数反映的是相对于该基线的差异,因此选择一个便于解释的基线很有价值。

估计技术与效率

在明确了模型结构与假设后,我们来看看系数如何估计,以及不同方法在效率与准确性方面的比较。

普通最小二乘法(OLS)

OLS 是默认起点,并可自然推广到多元情形。只要假设满足,它能给出无偏的系数估计。虽然单个估计与分别回归相同,但优势在于共享残差,您可以在多个结果之间进行联合假设检验。

在结果变量彼此相关的情况下,多元 OLS 能捕捉这些关系,通常(但不总是)提升整体预测质量。 

高斯-马尔可夫定理

您可能会想为什么 OLS 如此常用。高斯-马尔可夫定理解释了这一点:在特定假设下,OLS 是最佳线性无偏估计量(BLUE)。这意味着在满足诸如无多重共线性、线性关系、方差恒定等常见条件时,它在所有无偏线性估计量中方差最小。

加权最小二乘法(WLS)

但如果这些条件不成立,尤其是方差恒定这一条呢?这种情况下,我会考虑 WLS。它会给误差方差较小的观测更高权重,而给噪声更大的观测较低权重。

WLS 通过引入权重矩阵来调整 OLS 过程。您可以用 OLS 模型的残差来估计权重,或基于对数据误差结构的理论认知来设定。

收缩方法

接下来谈谈高维数据或多重共线性的场景。收缩方法在此很有用。它们用引入一定偏差来换取方差降低,这往往有助于提升预测。

岭回归添加 L2 惩罚(λ||B||²),将所有系数向零收缩。当每个预测变量都可能有所贡献时,它很有用。LASSO 采用 L1 惩罚,能将部分系数直接压缩为零——有助于变量选择。弹性网络结合两者,在预测变量相关时仍能进行选择。

模型评估与推断

介绍完估计方法后,我们来看看如何评估模型表现,以及如何从中得出有意义的结论。

拟合优度

多元 R-squared 能反映模型在所有结果上解释的总体变异度。与单变量版本不同,它常使用残差协方差矩阵的行列式来计算,因此不一定总在 0 到 1 之间。

调整 R-squared 在多元情形尤其重要,因为随着多个结果变量的加入,参数数量增长很快。它通过惩罚复杂度来避免过拟合。

诸如置信椭圆等可视化工具也很有帮助。这些椭圆展示预测的不确定性以及结果变量之间的关系。圆形椭圆暗示独立;拉长的椭圆指向强相关。

假设检验

当您想知道模型是否不仅仅是在拟合噪声时,假设检验至关重要。

Wilks' Lambda 用于检验特定预测变量在整组结果上是否具有显著影响。它通过比较完整模型与约简模型的误差协方差矩阵,判断移除某些预测变量是否会显著增加未解释的方差。 

Hotelling 的 T² 类似于多变量 t 检验。它在考虑结果变量相关性的前提下,评估某个预测变量是否影响至少一个结果。

联合检验有助于在一次检验多个假设时控制假阳性风险。在多元回归中,多重比较很容易失控,因此尤为有用。

模型比较

在模型之间做选择时,诸如 AIC 和 BIC 等准则派上用场。两者都会对复杂度进行调整,这在建模多个结果时尤其重要。AIC 更注重预测能力,而 BIC 倾向于偏好更简单的模型。

您也可以用似然比检验来比较嵌套模型,以检查增加预测变量是否显著改进模型拟合。

进阶主题与应用场景

标准的多元回归适用于许多问题,但有时您会遇到需要更专业方法的情形。也许您面对的是数百个预测变量,或者变量间的相互作用违反了标准假设。下面介绍如何处理(部分)更棘手的情景。

特征选择

当您在许多预测变量中工作时,特征选择对性能与可解释性都很重要。LASSO(即“最小绝对收缩与选择算子”)的突出之处在于,它能在拟合模型的同时自动将无关预测变量系数压为零。

与将所有系数向零收缩但保留所有变量的岭回归不同,LASSO 使用 L1 惩罚以产生稀疏解。当您怀疑只有部分预测变量真正重要时,它尤为适用。

处理内生性

有时您的预测变量一方面影响结果,另一方面又受到结果的影响。我想到一个例子:教育影响收入,但收入也影响受教育机会。这就产生了所谓的内生性,使得标准回归估计不可靠。

工具变量通过两阶段过程来解决这一问题。首先,您需要找到一个“工具变量”,即影响有问题的预测变量但不直接影响结果的变量。然后用该工具变量来预测预测变量中“干净”的部分,并在最终回归中使用这些预测。这样可以打破或缓解循环关系,从而得到可靠或更可靠的估计。

软件实现

大多数统计软件都能处理多元回归,但各有所长。在 Python 中,sklearn.linear_model.LinearRegression 原生支持多个结果变量,是真正的多元回归。在我看来,statsmodels 提供更详尽的统计输出,包括假设检验。如果您是偏好 R 语言的程序员,可以直接使用内置的 lm() 函数做基础多元模型,或使用 car 包进行更复杂的诊断。

PLS 等替代方法

当预测变量多于观测数,或多重共线性引发问题时,偏最小二乘(PLS)十分有用。PLS 并非直接使用全部预测变量,而是构建潜在变量,以捕捉对预测结果最相关的信息。这在化学计量学和生物信息学等领域尤其有效,因为它们常有成百上千的预测变量而观测较少。

PLS 会在预测变量空间中寻找既能解释预测变量方差、又能解释结果的协方差的方向。当预测准确性比解释性更重要时,它尤为合适。标准的多重线性回归在许多相关预测变量下可能变得不稳定,但 PLS 即便在挑战性场景中也能保持稳健。

置信椭圆

简单的置信区间不适用于多变量预测,因为它们忽略了结果变量之间的相关性。置信椭圆展示成对结果的联合不确定性,揭示不同响应变量间预测误差的相关方式。这些椭圆告诉您预测中的关系结构。圆形椭圆意味着独立预测,而拉长的椭圆表示强相关。

拉长椭圆的朝向显示哪些结果的线性组合具有最大和最小的不确定性。您可以为单个预测或参数估计绘制它们;在展示结果时它们尤其实用,因为它们提供了一种直观的方式来呈现对不同预测方面的信心程度。

实践考量与 Python 示例

从理论走向实践意味着要处理混乱的数据,并确保模型确实有效。以下是多元回归在实务中的应对方式。

预处理

在拟合任何多元模型之前,您需要整理好数据。当预测变量单位不同,缩放与中心化尤其重要。想象在未标准化的情况下比较以“千”为单位的收入与以“年”为单位的年龄。大多数算法在特征处于相近量纲时效果更好。

缺失值是另一挑战。您可以删除含缺失的数据行,但这会浪费信息且可能引入偏差。更好的方法包括对数值变量进行均值插补,或使用更复杂的多重插补方法,构建多份合理的数据集并综合它们的结果。

模型验证

交叉验证有助于了解模型在训练集之外的泛化能力。对多元回归而言,k 折交叉验证将数据分成 k 组,使用 k-1 组训练,并在剩余一组上测试。重复 k 次并对结果取平均,以获得稳健的性能估计。

自助法(Bootstrap)提供了另一种验证途径,尤其适用于理解参数不确定性。它通过有放回抽样从原始数据生成新数据集、对每个自助样本拟合模型,并考察参数估计的分布。这能告诉您系数的稳定性,并帮助构建置信区间。

案例研究

让我们用材料测试数据集来看一个具体例子。工程师常需要基于混合成分(如水泥含量、水灰比、骨料类型)来预测混凝土的多种属性——如抗压强度与和易性。这非常适合多元回归,因为这些结果相关但各有侧重。

分析先从探索混合成分与结果的相关性开始,检查预测变量间的多重共线性,并查看关系是否看起来近似线性。完成预处理(对混合比进行缩放、处理缺失测量)后,您将拟合多元模型,并用交叉验证检验其在新混凝土配比上的预测稳健性。

代码示例

下面是一段在 Python 中演示关键步骤的基础流程。首先,设置数据并进行预处理:

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_squared_error

# Load and prepare data (assuming concrete dataset)
# X: mixture components (cement, water, aggregate, etc.)
# y: multiple outcomes (strength, workability, durability)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

该预处理步骤将所有预测变量标准化为均值为 0、方差为 1,有助于数值稳定性与解释。

接着,我们拟合多元模型并查看结果:

# Fit multivariate regression
mlr_model = LinearRegression()
mlr_model.fit(X_scaled, y)

# Get coefficients for each outcome
for i, outcome in enumerate(['strength', 'workability', 'durability']):
   coeffs = mlr_model.coef_[:, i]
   print(f"{outcome} coefficients: {coeffs}”)

LinearRegression 模型拟合了一个考虑所有结果相关性的单一多元回归。系数揭示了每个混合成分如何影响各项混凝土性质。

最后,我们验证模型以检查其可靠性:

# Cross-validation for each outcome
cv_scores = cross_val_score(mlr_model, X_scaled, y, 
                           cv=5, scoring='neg_mean_squared_error')
print(f"Average CV score: {-cv_scores.mean():.3f}")

# Make predictions on new data
y_pred = mlr_model.predict(X_scaled)
mse_per_outcome = [mean_squared_error(y[:, i], y_pred[:, i]) 
                   for i in range(y.shape[1])]
print(f"MSE per outcome: {mse_per_outcome}")

交叉验证为模型在未见数据上的表现提供了客观估计。每个结果的 MSE 得分有助于了解哪些混凝土性质更易或更难被准确预测。

局限与替代方案

多元线性回归适用于许多问题,但也有明显边界。最大局限正体现在名称中——它假设预测变量与结果之间为线性关系。当关系呈曲线、交互繁多或其他非线性时,MLR 会产生有偏结果。高维度是另一个问题:当预测变量相对观测数很多时,模型会不稳定且易过拟合。

有多种替代方案能更好应对这些局限。 广义线性模型(GLM)将框架扩展到非正态结果,并允许不同的链接函数。ANCOVA 适用于同时包含连续与分类预测变量且存在交互效应的情形。为缓解过拟合,岭回归与 LASSO等正则化方法有帮助,或尝试随机森林等更自然地处理非线性与高维度的集成方法。

结论

多元线性回归提供了一种稳健方式来同时建模多个相关结果,捕捉单独的单变量模型会错过的关系。其主要优势在于可解释性、统计检验能力,以及在处理相关结果时的效率。 

至于是坚持使用标准的 MLR,还是转向正则化回归、偏最小二乘或集成方法,取决于您的数据特征、样本量,以及在您的具体问题中预测与解释哪个更重要。

如果您想进一步提升技能,我们的Python 中使用 statsmodels 的中级回归课程涵盖多个解释变量与交互效应,而R 中的广义线性模型将您的工具箱扩展至处理诸如二项分布与泊松分布等用于计数数据的非正态分布。

Vinod Chugani

作者

Vinod Chugani

Vinod Chugani 的职业生涯始于东京,曾任摩根大通最年轻的对冲基金销售台负责人,随后在雷曼兄弟创下个人销售纪录,之后又打造了覆盖 30 个国家的电子分销业务,营收突破 1 亿新元,随后转向数据领域。他毕业于杜克大学经济学专业,亦为 NYC Data Science Academy 校友,并在 100 多名申请者中成为Hugo Bowne-Anderson 在 Maven 开设的 “Building AI Applications” 课程的三位奖学金获得者之一。目前,他为 DataCamp、KDnuggets、Machine Learning Mastery 和 Statology 撰稿,内容涵盖从统计学到代理式 AI 等主题,并在 NYC Data Science Academy 指导数据从业者,已完成超过 1,000 场一对一辅导。

 

FAQs

多元线性回归与多重线性回归有何不同?

多重线性回归用多个预测变量来预测一个结果,而多元线性回归则从同一组预测变量同时预测多个结果。多元回归能够捕捉不同结果变量之间的相关性。

多元线性回归的关键假设有哪些?

关键假设包括:预测变量与结果之间的线性关系、观测值相互独立、误差项的多元正态性、同方差性(方差恒定),以及预测变量之间不存在完全多重共线性。违反这些假设可能导致结果有偏或不可靠。

我该如何解释多元线性回归模型的结果?

每个系数表示在其他预测变量不变时,该预测变量增加一个单位时特定结果的变化量。您还可以查看多元 R-squared 评估整体拟合优度,并使用 Wilks' Lambda 等检验评估预测变量在所有结果上的显著性。

多元线性回归在现实场景中的常见应用有哪些?

常见应用包括:同时预测多个经济指标(如 GDP 增长与失业率)、分析遗传学中的基因表达水平、评估工程中的材料属性(强度、耐久性、和易性),以及建模医学研究中的多个健康结果。只要相关结果共享预测变量,多元回归就很有用。

如何在多元线性回归模型中处理多重共线性?

使用方差膨胀因子(VIF)检测多重共线性——数值高于 10 通常表示问题较大。解决方案包括移除高度相关的预测变量、使用岭回归或 LASSO 进行正则化,或通过主成分分析构造互不相关的预测变量。

何时应使用多元回归而非分别的单变量模型?

当您的结果变量彼此相关,并且您希望显式建模这些关系时,请使用多元回归。它比单独建模更高效,并允许跨结果进行联合假设检验。

如何检查多元线性回归中预测变量与结果之间是否为线性关系?

在多元线性回归中,线性性意味着每个预测变量应与结果变量呈直线关系。您可以通过检查残差图或成分加残差图(部分残差图)来评估。如果残差呈现弯曲模式,可能意味着线性性假设被违背,从而使模型估计产生偏差。

我可以使用什么检验来检查多元线性回归中的同方差性?

在多元线性回归中,同方差性要求残差在不同预测变量水平上具有恒定方差。Breusch-Pagan 检验是检测异方差的常用方法。显著结果表明误差方差不恒定,可能导致估计效率低下、标准误不可靠。

如何在多元线性回归中检测多重共线性?

要在多元线性回归中检测多重共线性,您可以使用方差膨胀因子(VIF)。VIF 衡量某个回归系数的方差因与其他预测变量相关而被放大的程度。VIF 超过 10 通常被视为红色警示,表明该预测变量与其他变量高度共线,可能扭曲模型估计。

主题