跳至内容

R² 详解:您的回归模型拟合得有多好?

了解回归分析中的 R² 含义、计算方法及其适用场景。结合 R 与 Python 示例,与相关指标进行对比。
已更新 2026年10月6日  · 8分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

从本质上讲,R² 说明了因变量的方差中有多大比例可归因于自变量(或自变量组)。我们可以将其理解为模型对数据“故事”的把握程度,以及还剩下多少无法解释的噪声。由于其概念简洁、解释直接,R² 在线性回归诊断中被广泛使用,尤其是在简单与多元线性回归中。

本文将讨论 R² 的含义、计算方法、解释方式以及常见误区,从而在实践中既自信又谨慎地使用它。此外,我们还将给出在 R 和 Python 中计算 R² 的一些代码示例。

什么是 R²?

R²(记作 R²)是回归模型拟合优度的统计量。它告诉我们,因变量的变异中有多少可以由模型解释。

R² 的取值介于 0 与 1 之间:

  • R² = 0 表示模型未能解释任何变异;
  • R² = 1 表示模型解释了全部变异。

尽管概念直接,但在从理论走向实践时,R² 的解释需要更细腻的把握。

如何计算 R²

计算 R² 有多种在数学上等价的方法,每一种都从不同角度揭示“拟合”的含义,取决于场景——如简单回归、多元回归、矩阵代数或贝叶斯建模。下面介绍最常用的几种方法。

1. 利用残差平方和与总平方和

这是最标准、最常用的公式:

r-squared formula involving 1 - (RSS / TSS)

其中:

  • RSS 为残差平方和,度量模型未解释的变异,
  • TSS 为总平方和,度量数据的总体变异。

换言之,R² 表示模型所解释的总变异占比。

这种方式突出显示回归模型相较于仅预测响应变量均值时的改进程度。

2. 利用解释平方和与总平方和

R² 也可直接用解释方差来表示:

r-squared formula involving ESS/ TSS

其中:

  • ESS 为解释平方和,度量模型捕捉到的方差,
  • TSS 为总平方和,度量数据的总体变异。

这一版本强调模型预测对结果总变异的覆盖程度。换句话说,焦点从我们未能解释的部分(RSS)转向我们已经解释的部分(ESS),从而提供一种更为乐观的表述。

如需深入了解三种平方和的组成Understanding Sum of Squares: A Guide to SST, SSR, and SSE。

3. 利用解释平方和与残差平方和

在 ANOVA 表的语境下,R² 自然地从总变异的分解中出现:

r-squared formula involving ESS / (ESS + RSS)

其中:

  • ESS 为解释平方和,度量模型捕捉到的方差,
  • RSS 为残差平方和,度量模型未解释的变异。

该表述体现了模型捕捉到的总方差比例,以及剩余未解释的部分。

这一视角的独特之处在于将 R² 与假设检验联系起来。这是因为 ESS 与 RSS 的比值用于计算 F 统计量,使得 R² 成为 ANOVA 风格显著性检验中的重要组成部分。

4. 在简单线性回归中利用相关系数

前面三种方法都是由回归分解推导而来的代数等价公式。现在,换一个新视角:

在只有一个自变量的简单线性回归中,R² 有一个捷径:

r-squared is correlation squared

其中

  • r 为 x 与 y 的皮尔逊相关系数。

该公式表明,两变量之间较强的线性关系会直接转化为较高的 R²。

若要理解简单线性回归背后的理论,请参阅Simple Linear Regression: Everything You Need to Know。

5. 利用均方误差与结果变量方差

R² 也可视为一种对模型误差的归一化度量:

r-squared formula involving 1 - MSE / var(y)

其中:

  • MSE 为模型的均方误差,
  • Var(y) 为真实结果的方差。

当跨不同量纲或单位比较模型时,这种表述尤其有用,因为它用数据整体离散程度对模型误差进行了归一化。

6. 利用预测值的方差

在残差与预测不相关的假设下,R² 也可被解释为模型所捕捉到的方差占比:

r-squared formula involving the variance of the predicted values

其中:

  • Var(ŷ) 为模型预测的方差,
  • Var(y) 为真实结果的方差。

该版本强调预测值本身对真实数据离散程度的反映情况。

如何解读 R²

如前所述,R² 容易计算,但要有意义地解读则更具挑战。

  • 较高的 R² 表示模型解释了大部分方差。但这并不意味着模型一定正确或有用。
  • 较低的 R² 表明模型解释的方差较少。这并非总是坏事,尤其在社会科学或噪声较大的数据中,低 R² 往往是预期的。

需要牢记的是,R²度量的是相关,而非因果。即便自变量能够解释结果,也不代表它们导致了该结果,相关并不意味着因果。此外,R² 也不表明预测是否准确。

以下是两个与线性回归进阶主题相关的资源:

何时使用 R²

在合适的情境下,R² 十分有用。它适用于:

  • 比较具有相同自变量数量的模型。
  • 说明模型对数据集方差的解释程度。

另一方面,以下情形下 R² 可能具有误导性:

  • 加入无关自变量导致过拟合。在这种情况下,即使模型的预测性能没有提升,R² 也总是会上升。
  • 比较自变量数量不同(即复杂度不同)的模型。此时,调整 R² 是更好的选择。后文将进一步讨论调整 R²。

R 与 Python 中的 R² 示例

下面使用 Kaggle 的 Fish Market 数据集来展示 R² 概念。在两种编程语言中,我们将构建两个模型:

  • 模型 1: 使用四个自变量预测鱼的重量。
  • 模型 2: 增加一个随机的、无关的自变量。

R 示例

先来看 R。

模型 1

# Load data
fish <- read.csv("Fish.csv")

# Model 1
model1 <- lm(Weight ~ Length1 + Length2 + Height + Width, data=fish)
summary(model1)$r.squared

输出:

[1] 0.8673

模型 2

# Model 2 with an irrelevant predictor
fish$random_noise <- rnorm(nrow(fish))
model2 <- lm(Weight ~ Length1 + Length2 + Height + Width + random_noise, data=fish)
summary(model2)$r.squared

输出:

[1] 0.8679

可以看到,在加入无关自变量(模型 2)后,R² 略有上升。然而这并不意味着模型变得更好,毕竟我们只是加入了随机噪声。

想要进一步阅读,请参阅以下教程:

并记得参加我们的相关课程:

Python 示例

接下来试试 Python。

模型 1

import pandas as pd
import statsmodels.api as sm
import numpy as np

# Load data
fish = pd.read_csv('Fish.csv')
X1 = fish[['Length1', 'Length2', 'Height', 'Width']]
y = fish['Weight']

# Model 1
X1 = sm.add_constant(X1)
model1 = sm.OLS(y, X1).fit()
print(model1.rsquared)

输出:

0.8673

模型 2

# Model 2 with an irrelevant predictor
fish['random_noise'] = np.random.randn(len(fish))
X2 = fish[['Length1', 'Length2', 'Height', 'Width', 'random_noise']]
X2 = sm.add_constant(X2)
model2 = sm.OLS(y, X2).fit()
print(model2.rsquared)

输出:

0.8679

同样,我们观察到 R² 略有上升,但这只是捕捉到了随机噪声。

继续学习,欢迎报名以下课程:

R² 与相关指标的比较

接下来简要比较 R² 与两个相关指标:调整 R² 和预测 R²。

R² vs. 调整 R²

与 R² 不同,调整 R² 会考虑自变量的数量,具体而言,它会因包含不必要的自变量而对模型进行惩罚:

formula for adjusted r-squared

其中:

  • n 为观测数,
  • p 为自变量个数。

该指标仅在新自变量能实质提升模型时才会上升,反之则可能下降。想进一步了解这一重要扩展,请阅读教程:Adjusted R-Squared: A Clear Explanation with Examples。

R² vs. 预测 R²

常规 R² 反映模型在训练数据上的表现,而预测 R² 则衡量其在新的、未见过的数据上的表现。因此,该指标评估的是模型的泛化能力。

预测 R² 通常通过交叉验证或留出部分训练数据进行测试来计算。如果模型过拟合,则预测 R² 可能显著低于常规 R²。因此,当常规 R² 很高而预测 R² 很低时,多半表明模型过拟合。

关于 R² 的常见误解

下面来看一些关于 R² 的常见“神话”,以及事实真相:

  • “高 R² 总意味着好模型。” 未必如此。过拟合模型或建立在伪相关之上的模型也可能有较高的 R²,但这两种情况的模型都不能称为“好”。
  • “R² 衡量预测能力。” 实际上,它只度量模型在训练数据上的拟合,对未见数据并无说明。评估未来表现需要其他指标,例如上文讨论的预测 R²。
  • “我们应始终追求高 R²。” 并非总是如此。这取决于领域与数据质量。正如本文前面提到的,在心理学、历史等社会科学中,R² 的值可能很低(0.1 甚至更低)但依然有意义;对于噪声较大的数据,低 R² 也高度可预期。

结论

总而言之,我们了解了什么是 R²,如何计算这一指标(数学上以及在 R 与 Python 中实现),何时使用与避免使用它,以及如何解读结果。此外,我们还涉及了两个相关指标和一些关于 R² 的常见误解。

简言之,R² 是衡量回归模型拟合优度的一个有用、直观且简洁的指标。它是模型评估的良好起点,但应谨慎使用,并与其他指标结合解读,切勿将其视为全部,尤其在多元回归与模型选择的情境中。


Elena Kosourova's photo
Author
Elena Kosourova
LinkedIn

IBM 认证数据科学家(2020)。此前曾在全球油气田担任石油地质学家/地质建模师,拥有 12 年以上国际工作经验。精通 Python、R 和 SQL。专长领域包括:数据清洗、数据处理、数据可视化、数据分析、数据建模、统计、数据叙事、机器学习。具备丰富的数据科学社区管理经验,并长期撰写与审校数据科学及职业发展相关的文章与教程。

R² 常见问答

什么是 R²?

R²(记作 R²)是回归模型拟合优度的统计量,展示模型能够解释因变量变异的程度。

如何计算 R²?

计算 R² 最常见的公式为:R2=1-RSS/TSS,其中 RSS 为残差平方和,TSS 为总平方和。

R² 可以取哪些值?

R² 的取值介于 0 与 1 之间,其中 R²=0 表示模型未能解释任何变异,R²=1 表示模型解释了全部变异。

如何解读 R²?

高 R² 表明模型在训练数据上解释了较大比例的方差,低 R² 则表示模型解释的方差较少。R² 不度量因果关系,也不说明模型是否正确或有用。

何时使用 R²?

R² 可用于比较自变量数量相同的模型,或用于说明模型对数据集方差的解释程度。

主题
数据分析
数据科学

与 DataCamp 一起学习

{count, plural, other {课程}}

R 中的回归入门

{hours} 小时
79.4K
用 R 实现、分析并解读回归分析,预测房价和广告点击率。
查看详情Right Arrow
开始课程
查看更多Right Arrow