← 返回目录

Chapter 2: 回归分析

Regression Analysis · 线性回归结果不能拿来就用

📊 ANOVA•🎯 R²•🔍 假设检验•🔬 残差诊断

💡 本章学习目标

线性回归不仅仅是拟合一条直线,更重要的是诊断和验证这条直线是否可靠。 本章系统讲解回归分析的完整流程:从ANOVA到假设检验,从拟合优度到残差诊断。

⚠️ 核心警告
线性回归结果不能拿来就用!必须通过严格的统计检验和诊断, 验证模型假设是否成立、参数是否显著、残差是否正态。
✦
2.1

线性回归:一个表格、一条直线

OLS回归结果表格解读

statsmodels的OLS回归会输出一个详细的结果表格,包含几十个统计量。 本章的目标就是理解这个表格中每一个数值的含义。

示例:股票收益率回归

因变量 (y)
AAPL日收益率
苹果公司股票
自变量 (x)
S&P 500日收益率
标准普尔500指数
🔑 核心概念:协方差与相关性
• 协方差矩阵:描述变量间的共同变化趋势(未标准化)
• 相关系数矩阵:标准化的协方差,取值 [-1, 1]
• 角度矩阵:将相关性解释为向量夹角(几何视角)
• 夹角越小 → 相关性越强 → 线性关系越明显
✦
2.2

方差分析 ANOVA

SST = SSR + SSE 的分解过程

ANOVA (Analysis of Variance) 的核心是将因变量的总变异分解为回归解释的部分和残差部分。

📊 ANOVA表格结构

平方和定义图像
总离差平方和
(Sum of Squares for Total, SST)
SST = Σ(y⁽ⁱ⁾ - ȳ)²
因变量y所有样本点与期望值ȳ的差异
y⁽ⁱ⁾ - ȳ
↕
总变异
回归平方和
(Sum of Squares for Regression, SSR)
SSR = Σ(ŷ⁽ⁱ⁾ - ȳ)²
预测值ŷ与期望值ȳ的差异(模型解释部分)
ŷ⁽ⁱ⁾ - ȳ
↕
已解释
残差平方和
(Sum of Squares for Error, SSE)
SSE = Σ(y⁽ⁱ⁾ - ŷ⁽ⁱ⁾)²
实际值y与预测值ŷ的差异(未解释部分)
y⁽ⁱ⁾ - ŷ⁽ⁱ⁾
↕
残差
核心关系式
SST = SSR + SSE
总变异 = 模型解释的变异 + 残差变异
📏
SST
总离差平方和
Σ(yᵢ - ȳ)²
因变量总变异
✅
SSR
回归平方和
Σ(ŷᵢ - ȳ)²
模型解释部分
❌
SSE
残差平方和
Σ(yᵢ - ŷᵢ)²
模型无法解释

🎯 几何视角:勾股定理

SST² = SSR² + SSE²
三个平方和构成一个直角三角形:
  • • 斜边:向量 (y - ȳ·1),长度 = √SST
  • • 直角边1:向量 (ŷ - ȳ·1),长度 = √SSR
  • • 直角边2:向量 (y - ŷ),长度 = √SSE
✦
2.7

拟合优度:评价拟合程度

决定系数R² · 修正R² · 过拟合

修正决定系数 (24)

但是,仅仅使用 R² 是不够的。对于多元线性模型,不断增加解释变量个数 D 时,R² 将不断增大。 我们可以利用修正决定系数 (adjusted R squared)。简单来说,修正决定系数考虑到自变量的数目对决定系数的影响, 避免了当自变量数量增加时决定系数的人为提高。

R²adj = 1 - MSE/MST
= 1 - [SSE/(n-k)] / [SST/(n-1)]
= 1 - [(n-1)/(n-k)] · (SSE/SST)
= 1 - [(n-1)/(n-k)] · (1-R²)
= 1 - [(n-1)/(n-D-1)] · (SSE/SST)
作用
• 修正决定系数的作用在于:当模型中自变量的数目增加时,它能够抵消掉过拟合 (overfitting)
• 并导致了决定系数因为自变量个数增加而提高的问题
过拟合警告
• 过拟合是指一个模型在训练数据上表现良好,但在测试数据上表现较差的现象
• 在过拟合的情况下,模型过度学习了训练数据的特征和噪声,导致其在测试数据上的预测能力下降
避免过拟合的方法:增加训练数据量、降低模型复杂度、采用正则化 (regularization) 技术等。 本书第5章将讲解正则化回归。
代码6:计算决定系数和修正决定系数
# 计算决定系数
R2 = SSR/SST
# 计算修正决定系数
R2_adj = 1 - MSE/MST
✦
2.8

假设检验:F检验与t检验

验证模型和参数的显著性

🎯

F检验

检验目标
模型整体是否显著
原假设 H₀
所有系数 = 0
统计量
F = MSR / MSE
判断
F > Fα 或 p < α → 拒绝H₀
📌

t检验

检验目标
某个系数是否显著
原假设 H₀
bj = 0(某个系数为0)
统计量
t = b̂j / SE(b̂j)
判断
|t| > tα/2 或 p < α → 拒绝H₀
2.8

F检验:模型参数不全为0

检验线性回归模型参数是否显著

在线性回归中,F检验用于检验线性回归模型参数是否显著。它通过比较回归平方和和残差平方和的大小来判断模型是否具有显著的解释能力。

统计量 (25)

F = MSR / MSE
= (SSR/(k-1)) / (SSE/(n-k))
= [SSR·(n-k)] / [SSE·(k-1)]
= (SSR/D) / [SSE/(n-D-1)]
= [SSR·(n-D-1)] / [SSE·(D)]
= F(k-1, n-k)
代码7:F检验的统计量
# 计算F检验的统计量
F_test = MSR/MSE
print(F_test)
# 验证F检验的统计量
N = results.nobs
k = results.df_model+1
dfm, dfe = k-1, N - k
F = results.mse_model / results.mse_resid
print(F)

假设检验 (26)

原假设 H₀
b₁ = b₂ = ··· = bₑ = 0
所有回归系数都等于零
备择假设 H₁
bⱼ ≠ 0 for at least one j
至少有一个系数不为零
具体来说
F检验的原假设是模型的所有回归系数都等于零,即自变量对因变量没有显著的影响。
如果F检验的p值小于设定的显著性水平,就可以拒绝零假设,认为模型是显著的,即自变量对因变量有显著的影响。

临界值 (27)

(25)得到的F值和临界值Fα进行比较。临界值Fα可根据两个自由度(k-1和n-k)以及显著性水平α查表获得。
F > Fα(k-1, n-k)
在该置信水平上拒绝零假设 H₀,不认为自变量系数同时具有非显著性,即所有系数不大可能同时为零。
否则,接受H₀,自变量系数同时具有非显著性,即所有系数很可能同时为零。

举个例子 (28)

给定条件 α = 0.01,F1-α(1,250) = 6.7373。
图6结果告诉我们,F = 549.7 > 6.7373,表明可以显著地拒绝H₀。
也可以用图6中p值:
p-value = P(F < Fα(k-1, n-k))
如果p值小于α,则可以拒绝零假设 H₀。
✦
2.9

t检验:某个回归系数是否为0

检验线性回归模型中某个特定自变量的系数是否显著

在线性回归中,t检验主要用于检验线性回归模型中某个特定自变量的系数是否显著。具体地,t检验的假设设为特定回归系数等于零, 即自变量对因变量没有显著的影响。如果t检验的p值小于设定的显著性水平,就可以拒绝零假设,认为该自变量的系数是显著不为零的, 即自变量对因变量有显著的影响。

需要注意的是,t检验一般用来检验回归系数是否显著,而不能判断整个模型是否显著。如果需要判断整个模型的显著性, 可以使用前文介绍的F检验。

原假设、备择假设 (29)

对于一元线性回归,t检验原假设和备择假设分别为:
H₀: b₁ = b1,0
H₁: b₁ ≠ b1,0
一般b1,0取0,也就是检验回归系数是否为0。当然,b1,0也可以取其他值。

斜率系数 (30)(31)

b₁的t检验统计量:
tb1 = (b̂₁ - b1,0) / SE(b̂₁)
b̂₁为最小二乘法OLS线性回归估计得到的系数,SE(b̂₁)为其标准误:
SE(b̂₁) = √[MSE / Σ(x⁽ⁱ⁾ - x̅)²]
= √{[Σ(ε⁽ⁱ⁾)²/(n-2)] / [Σ(x⁽ⁱ⁾ - x̅)²]}
上式中,MSE为本章前文介绍的残差均值 (mean squared error),n是样本数据的数量(除去NaN)。标准误差越大,回归系数的估计值越不可靠。

代码8:b₁的t检验统计量

MSE = SSE/DFE
MSE = MSE.values
# 计算MSE
b1 = p.SP500
# 斜率系数
SSD_x = np.sum((x_df.values - x_mean)**2)
SE_b1 = np.sqrt(MSE/SSD_x)
# 标准误
T_b1 = (b1 - 0)/SE_b1
# b1的t检验统计量
SE(b̂₁) = √[MSE / Σ(x⁽ⁱ⁾ - x̅)²]tb1 = (b̂₁ - b1,0) / SE(b̂₁)

临界值 (32)

如果下式成立,接受零假设 H₀:
-t1-α/2, n-2 < T < t1-α/2, n-2
否则,则拒绝零假设 H₀。

截距项系数 (34)(35)

对于一元线性回归,对截距项系数b₀的t检验统计量:
tb0 = (b̂₀ - b0,0) / SE(b̂₀)
b̂₀为最小二乘法OLS线性回归估计得到的系数,SE(b̂₀)为其标准误:
SE(b̂₀) = √[MSE · (1/n + x̅²/Σ(x⁽ⁱ⁾ - x̅)²)]
= √{[Σ(ε⁽ⁱ⁾)²/(n-2)] · [1/n + x̅²/Σ(x⁽ⁱ⁾ - x̅)²]}

代码9:b₀的t检验统计量

b0 = p.const
# 截距系数
SE_b0 = np.sqrt(MSE*(1/n + x_mean**2/SSD_x))
# 标准误
T_b0 = (b0 - 0)/SE_b0
# b0的t检验统计量
✦
2.10

置信区间:因变量均值的区间

预测ŷ⁽ⁱ⁾,给1-α置信区间

本书前文在介绍一元线性回归时,大家都注意到这个区域是的思像,图中的带宽代表预测的置信区间。

置信区间公式 (42)

ŷ⁽ⁱ⁾ ± t1-α/2, n-2 · √MSE · √[1/n + (x⁽ⁱ⁾ - x̅)² / Σ(x⁽ⁱ⁾ - x̅)²]
置信区间的宽度为:
2 × t1-α/2, n-2 · √MSE · √[1/n + (x⁽ⁱ⁾ - x̅)² / Σ(x⁽ⁱ⁾ - x̅)²]

重要说明

随着 |x⁽ⁱ⁾ - x̅| 不断增大
置信区间宽度不断增大
当 x⁽ⁱ⁾ = x̅ 时
置信区间宽度最窄
随着 MSE (mean squared error) 减小
置信区间宽度越窄,在回归分析中,预测值置信区间用于评估回归模型的预测能力

图15. 一元线性回归置信区间 (95%和99%)

0.150.100.050.00-0.05-0.15-0.10-0.050.000.050.10xy回归线95%99%
图示展示了一元线性回归的置信区间。粉红色阴影区域为95%置信区间,蓝色阴影区域为99%置信区间。 可以看到,离中心点x̅越远,置信区间越宽。
✦
2.11

预测区间:因变量特定值的区间

预测区间比置信区间更宽

预测区间 (prediction interval) 是指回归模型估计时,对于自变量给定的某个值xp,求出因变量yp的个别值的估计区间。

预测区间公式 (44)

ŷp ± t1-α/2, n-2 · √MSE · √[1 + 1/n + (xp - x̅)² / Σ(x⁽ⁱ⁾ - x̅)²]
与置信区间的区别
• 预测区间包含两方面的误差:回归方程中的估计误差和未来观测值的随机误差
• 与预测值的置信区间不同,预测区间考虑了未来观测值的随机性
预测区间更宽
• 预测区间包含两方面的误差:回归方程中的估计误差和未来观测值的随机误差
• 与预测值的置信区间不同,预测区间考虑了未来观测值的随机性,因此通常比置信区间更宽

图16. 一元线性回归预测区间

0.150.100.050.00-0.05-0.15-0.10-0.050.000.050.10xy回归线预测区间
图示展示了一元线性回归的预测区间。紫色阴影区域为预测区间,明显比置信区间更宽。
✦
2.12

对数似然函数:用在最大似然估计MLE

似然函数是一种关于统计模型中的参数的函数

似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。

发差的定义 (45)

ε⁽ⁱ⁾ = y⁽ⁱ⁾ - ŷ⁽ⁱ⁾
在OLS线性回归中,假设残差服从正态分布N(0, σ²)。因此:

残差的PDF (46)

PDF(ε⁽ⁱ⁾) = (1/(σ√2π)) exp[-(y⁽ⁱ⁾ - ŷ⁽ⁱ⁾)²/(2σ²)]

似然函数 (47)

L = ∏ PDF(ε⁽ⁱ⁾) = ∏ [(1/(σ√2π)) exp(-(y⁽ⁱ⁾ - ŷ⁽ⁱ⁾)²/(2σ²))]

常用对数似然 ln(L)

公式 (48)
ln(L) = -n/2 · ln(2πσ²) - SSE/(2σ²)
注意,MLE中的σ² (49)
σ² = SSE/n
这样 ln(L) 可写成 (50)
ln(L) = -n/2 · ln(2πσ²) - n/2
➡️
有关似然函数和对数似然函数,请大家回顾《统计至简》第16、24章。
✦
2.13

信息准则:选择模型的标准

AIC和BIC是线性回归模型选择中常用的信息准则

AIC和BIC是线性回归模型选择中常用的信息准则,用于在多个模型中选择最优模型。

AIC (赤池信息量准则)

AIC为赤池信息量准则 (Akaike Information Criterion, AIC),定义如下:
公式 (51)
AIC = 2k - 2ln(L)
Penalty
其中,k = D + 1;L是似然函数。
AIC鼓励数据拟合的优良性;但是,尽量避免出现过度拟合。(51)中2k项为惩罚项 (penalty)。

BIC (贝叶斯信息准则)

贝叶斯信息准则 (Bayesian Information Criterion, BIC) 也称施瓦茨信息准则 (Schwarz information criterion, SIC),定义如下。
公式 (52)
BIC = k·ln(n) - 2ln(L)
Penalty
其中,n为样本数据数量。BIC的惩罚项比AIC大。

使用指南

选择原则
在使用AIC和BIC进行模型选择时,应该选择具有最小AIC或BIC值的模型。这意味着,较小的AIC或BIC值表示更好的模型拟合和更小的模型复杂度。
重要注意
需要注意的是,AIC和BIC都是用来选择模型的工具,但并不保证选择的模型就是最优模型。在实际应用中,应该将AIC和BIC作为指导,结合领域知识和经验来选择最优模型。同时,还需要对模型的假设和限制进行检验,以确保模型的可靠性和实用性。
✦
2.14

残差分析:假设残差服从均值为0正态分布

检验模型假设

残差分析 (residual analysis) 通过残差来提供的信息,对回归模型进行评估。分析数据是否存在可能的误差。残差分析的基本思想是,如果回归模型能够很好地拟合数据,那么残差应该是随机分布,没有明显的模式或趋势。因此,对残差的分析可以提供关于模型的优劣的信息。

残差分析通常包括以下几步:

▶ 绘制残差图
残差图是观测值的残差与预测值之间的散点图。如果残差呈现出随机分布、没有明显的模式或趋势,那么模型可能是合适的。
▶ 检查残差分布
通过绘制直方图来直观地检验残差是否服从正态分布。如果残差分布不是正态分布,那么可能需要采取转换或其他措施来改善模型的拟合。
▶ 检查残差对自变量的函数形式
通过绘制残差与自变量之间的散点图来检验是否存在系统性的变化。如果存在这种关系,那么可能需要更改模型或者更改拟合的函数形式。

图17. 残差散点图

xResidual零线
图17所示为残差的散点图。理想情况下,我们希望残差均值为0的正态分布。

图18. 残差分布直方图

ResidualDensity
图18所示为残差分布的直方图。

Omnibus正态检验

Omnibus正态检验 (Omnibus test for normality) 用于检验线性回归中残差是否服从正态分布。 Omnibus正态检验利用残差的偏度S和峰度K,检验残差分布为正态分布的原假设。Omnibus正态检验 的统计量为偏度平方、超值峰度平方两者之和。Omnibus正态检验利用χ2检验 (Chi-squared test)。

代码中我们利用 scipy.stats.normaltest() 复刻了本章前文的Omnibus正态检验统计量值。
➡️
《统计至简》第2章讲过偏度、峰度,请大家回顾。

加权最小二乘法 (WLS)

此外,加权最小二乘法 (Weighted Least Squares, WLS) 是最小二乘法OLS的一种扩展形式。加权最小二乘法引入了权重因子,用于调整每个数据点的相对重要性。

使用场景
使用加权最小二乘法的场景包括场分方差性 (heteroscedasticity)。当数据的方差不是恒定的时候,可以使用加权最小二乘法WLS来降低方差不稳定性的影响。
处理异常值
对于可能是异常值的数据点,可以通过WLS降低其权重来减少其对拟合的影响。
总结
总的来说,加权最小二乘法是在最小二乘法的基础上考虑了不同数据点的权重,使得拟合更加灵活。Statsmodels中有专门处理加权最小二乘法的工具,请大家参考。
✦
2.15

自相关检测:Durbin-Watson

检验残差序列的自相关性

Durbin-Watson用于检验序列的自相关。在线性回归中,自相关 (autocorrelation) 用来分析模型中的 残差与其在时间上的滞后版本之间的相关性。当模型中存在自相关时,它可能表明模型中遗漏了某些 重要的变量,或者模型中的时间序列数据存在没有被正确处理。

诊断方法

• 检验残差图来诊断
如果残差图表现出明显的趋势性,例如呈现出周期性区域的情况,那么就可能存在自相关。
• 检验残差 ACF 图
在这种情况下,可以考虑引入滞后多项自变量或使用时间序列分析方法来修正模型。

Durbin-Watson检验统计量 (53)

DW = Σ[(y⁽ⁱ⁾ - ŷ⁽ⁱ⁾) - (y⁽ⁱ⁻¹⁾ - ŷ⁽ⁱ⁻¹⁾)]² / Σ(y⁽ⁱ⁾ - ŷ⁽ⁱ⁾)²
DW ≈ 2:无自相关
上式中 DW 的取值区间为 0 ~ 4。当 DW 值很小时,表明序列可能存在正自相关。
DW < 1:正自相关
当明时 DW < 1,表明序列可能存在正自相关。
DW > 3:负自相关
当 DW 值很大时 (DW > 3) 表明序列可能存在负自相关。
当 DW 值在 2 附近时 (1.5 < DW < 2.5),表明序列无自相关。其余的取值区间则明确定是否存在自相关。

图19. 残差自相关

LagACF1.00.60.20.005101520置信区间
图19所示为残差的自相关图。第一个Lag的自相关系数接近1,其他Lag的自相关系数都在置信区间内,说明不存在自相关。
➡️
有关,请大家参考。
✦
2.16

条件数:多重共线性

检验设计矩阵XkXk是否存在多重共线性

在线性回归中,条件数 (condition number) 常用来检验设计矩阵XkXk是否存在多重共线性(multicollinearity)。

什么是多重共线性?

定义
多重共线性是指在多元回归模型中,独立变量之间存在高度相关或线性相关的情况。
影响
多重共线性会导致回归系数的估计不稳定,使模型的解释能力降低,甚至导致模型的预测精度下降。

条件数公式 (54)

对 X'X 进行特征值分解,得到最大特征值 λmax 和最小特征值 λmin。条件数的公式为两者的比值的平方根:
condition number = √(λmax / λmin)
Cond.No < 30
条件数较小,说明没有明显的多重共线性问题
Cond.No > 30
条件数较大,警告!可能存在严重的多重共线性问题

处理方法

特征选择
在实际应用中,如果 X'X 的系数过大,可以考虑用特征选择来改善。
正则化
也可以使用正则化回归(如Ridge、Lasso)来改善。下一章节多元回归分析时,条件数的作用更明显。

代码示例

Bk7_Ch02_03.ipynb 代码复刻图 1 中验 ANOVA 以外的其他统计量值。
线性回归是一种用于研究自变量与因变量之间关系的统计模型。方差分析可以评价模型的整体拟合优度,其中的 F 检验可以用来检验模型参数是否显著。F 检验可以评估自变量整体是否显著,拟合优度指标都是统计数据及其分布的。常用 R² 来度量。
总结
AIC 和 BIC 用于模型选择,可以在模型拟合度和模型复杂度的情况下,选出最平衡和有效最好的模型。自相关检验可以用来评估误差项之间的相关性,可以使用 Durbin-Watson 检验进行检测。条件数用于评估多重共线性性、预测能力和多重共线性等问题。这一章的内容较理论,现在不要求大家掌握所有的知识。
👉
Scikit-learn 也提供线性回归分析工具,请大家参考下方网页。