03 线性回归 (Linear Regression)

核心问题:如何量化变量之间的线性关系?

线性回归是统计学习中最基础、最重要的监督学习方法

  • 拥有 200+ 年历史,但至今仍活跃于学术与工业界前沿
  • 可解释性强:每个系数都有明确的经济含义
  • 理论完备:拥有高斯-马尔可夫定理等坚实理论基础
  • 计算高效:闭合解析解,无需迭代优化

本章目标:从 \(Y = \beta_0 + \beta_1 X + \epsilon\) 出发,构建完整的多元回归分析框架

线性回归的历史地位:从高斯到机器学习

线性回归的历史横跨 200 多年,是整个定量科学的基石

时间 里程碑 贡献者
1805 最小二乘法首次应用于天文学 勒让德 (Legendre)
1809 证明最小二乘法的最优性(高斯-马尔可夫) 高斯 (Gauss)
1886 引入’回归’概念(身高回归均值) 高尔顿 (Galton)
1960s 计量经济学革命,Cowles 委员会 Haavelmo, Klein
2020s 作为深度学习最后一层,仍不可替代

核心洞察:线性回归之所以历久弥新,是因为它在可解释性预测效率之间取得了最佳平衡

为什么线性回归是’万法之母’?

几乎所有高级统计学习方法都可以看作对线性回归某些假设的放松或推广

高级方法 放松了线性回归的哪个限制
岭回归 / Lasso 放松”无约束”假设 → 加入正则化
广义线性模型 (GLM) 放松”正态分布”假设 → 连接函数
广义可加模型 (GAM) 放松”线性关系”假设 → 非参数光滑
树模型 / 随机森林 放松”全局线性”假设 → 局部分段常数
神经网络 放松几乎所有假设 → 通用函数逼近

学好线性回归 = 掌握了理解所有高级方法的统一框架

线性回归的历史地位:从高斯到机器学习

线性回归的历史横跨 200 多年,是整个定量科学的基石

时间 里程碑 贡献者
1805 最小二乘法首次应用于天文学 勒让德 (Legendre)
1809 证明最小二乘法的最优性(高斯-马尔可夫) 高斯 (Gauss)
1886 引入’回归’概念(身高回归均值) 高尔顿 (Galton)
1960s 计量经济学革命,Cowles 委员会 Haavelmo, Klein
2020s 作为深度学习最后一层,仍不可替代

核心洞察:线性回归之所以历久弥新,是因为它在可解释性预测效率之间取得了最佳平衡

为什么线性回归是’万法之母’?

几乎所有高级统计学习方法都可以看作对线性回归某些假设的放松或推广

高级方法 放松了线性回归的哪个限制
岭回归 / Lasso 放松”无约束”假设 → 加入正则化
广义线性模型 (GLM) 放松”正态分布”假设 → 连接函数
广义可加模型 (GAM) 放松”线性关系”假设 → 非参数光滑
树模型 / 随机森林 放松”全局线性”假设 → 局部分段常数
神经网络 放松几乎所有假设 → 通用函数逼近

学好线性回归 = 掌握了理解所有高级方法的统一框架

线性回归在金融领域的四大核心应用

应用场景 方法 典型案例
资产定价 CAPM / Fama-French 三因子 \(R_i - R_f = \alpha + \beta(R_m - R_f)\)
宏观经济预测 泰勒规则 利率 ~ GDP增速 + 通胀率
公司财务分析 Altman Z-Score 违约概率 ~ 财务指标组合
房地产估值 特征价格模型 房价 ~ 面积 + 区位 + 学区

核心本质:线性回归不仅是统计工具,更是理解经济金融运行规律的思维框架

理论基石:高斯-马尔可夫定理保证 OLS 最优

经典线性模型假设下,OLS 估计量是最佳线性无偏估计量 (BLUE)

五大经典假设:

  1. 线性性:模型相对于参数是线性的
  2. 零均值\(E(\epsilon | X) = 0\),误差项期望为零
  3. 同方差\(\text{Var}(\epsilon | X) = \sigma^2\),误差方差恒定
  4. 无自相关:不同观测的误差互不相关
  5. 无完全共线性:预测变量间无精确线性关系

BLUE = Best Linear Unbiased Estimator:在所有线性无偏估计量中方差最小

假设违反时会怎样?——后果与对策

违反的假设 后果 常见场景 对策
非线性 估计有偏 收益递减效应 多项式/对数变换
\(E(\epsilon|X) \neq 0\) 遗漏变量偏差 遗漏关键因素 工具变量/面板数据
异方差 SE不正确 → 推断失效 大小公司方差不同 稳健标准误/WLS
自相关 SE偏小 → 假显著 时间序列数据 Newey-West SE
完全共线性 \(\mathbf{X}^T\mathbf{X}\) 不可逆 虚拟变量陷阱 剔除/正则化

在中国 A 股数据中,异方差和遗漏变量偏差是最常遇到的两个问题

假设违反时会怎样?——后果与对策

违反的假设 后果 常见场景 对策
非线性 估计有偏 收益递减效应 多项式/对数变换
\(E(\epsilon|X) \neq 0\) 遗漏变量偏差 遗漏关键因素 工具变量/面板数据
异方差 SE不正确 → 推断失效 大小公司方差不同 稳健标准误/WLS
自相关 SE偏小 → 假显著 时间序列数据 Newey-West SE
完全共线性 \(\mathbf{X}^T\mathbf{X}\) 不可逆 虚拟变量陷阱 剔除/正则化

在中国 A 股数据中,异方差和遗漏变量偏差是最常遇到的两个问题

线性模型的数学框架

\[ \large{Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p + \epsilon} \]

各符号的经济含义:

  • \(Y\)响应变量(如营业收入、股票收益率)
  • \(X_1, \ldots, X_p\)预测变量(如研发投入、宏观指标)
  • \(\beta_0\)截距项,所有 \(X = 0\)\(Y\) 的基准值
  • \(\beta_j\)回归系数\(X_j\) 每增加 1 单位时 \(Y\) 的平均变化量
  • \(\epsilon\)误差项,捕捉所有未纳入模型的随机因素

简单线性回归:一元模型

\[ \large{Y = \beta_0 + \beta_1 X + \epsilon} \]

简单线性回归示意图 散点围绕拟合直线分布,展示残差的几何含义 简单线性回归:寻找最佳拟合直线 Y (响应变量) X (预测变量) ŷ = β₀ + β₁x 残差 eᵢ
Figure 1: 简单线性回归通过最小化残差平方和寻找最佳拟合直线

几何直觉:OLS 最小化的是’垂直距离’

OLS 与其他拟合准则的区别:

方法 最小化目标 几何含义
OLS(最常用) 垂直距离平方和 每个点到直线的纵向距离
正交回归 (TLS) 垂直距离平方和 每个点到直线的垂直距离
LAD(最小绝对偏差) 垂直距离绝对值和 对异常值更稳健

为什么选择 OLS?

  • 对应于条件期望的最优近似:\(E(Y|X) = \beta_0 + \beta_1 X\)
  • 闭合解析解,计算效率最高
  • 在正态误差下等价于最大似然估计 (MLE)

几何直觉:OLS 最小化的是’垂直距离’

OLS 与其他拟合准则的区别:

方法 最小化目标 几何含义
OLS(最常用) 垂直距离平方和 每个点到直线的纵向距离
正交回归 (TLS) 垂直距离平方和 每个点到直线的垂直距离
LAD(最小绝对偏差) 垂直距离绝对值和 对异常值更稳健

为什么选择 OLS?

  • 对应于条件期望的最优近似:\(E(Y|X) = \beta_0 + \beta_1 X\)
  • 闭合解析解,计算效率最高
  • 在正态误差下等价于最大似然估计 (MLE)

OLS 目标函数:最小化残差平方和 (RSS)

最小二乘法 (OLS) 的优化目标:

\[ \large{\text{RSS}(\beta_0, \beta_1) = \sum_{i=1}^{n} (y_i - \beta_0 - \beta_1 x_i)^2} \]

通过对 \(\beta_0\)\(\beta_1\) 分别求偏导并令其为零,可得一阶条件

\[\frac{\partial \text{RSS}}{\partial \beta_0} = -2\sum_{i=1}^{n}(y_i - \beta_0 - \beta_1 x_i) = 0\]

\[\frac{\partial \text{RSS}}{\partial \beta_1} = -2\sum_{i=1}^{n}(y_i - \beta_0 - \beta_1 x_i)x_i = 0\]

OLS 解析解:斜率与截距的闭合公式

由一阶条件推导得到:

截距估计

\[ \large{\hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x}} \]

斜率估计

\[ \large{\hat{\beta}_1 = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n}(x_i - \bar{x})^2}} \]

关键性质:

  • 回归线一定经过样本中心点 \((\bar{x}, \bar{y})\)
  • 斜率 = 协方差 / 方差,与相关系数直接相关

补充推导:从一阶条件到 OLS 闭合解

第一步:从 \(\frac{\partial \text{RSS}}{\partial \beta_0} = 0\) 出发

\[-2\sum(y_i - \beta_0 - \beta_1 x_i) = 0 \implies n\beta_0 = \sum y_i - \beta_1 \sum x_i\]

\[ \large{\hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x}} \]

第二步:将 \(\hat{\beta}_0\) 代入 \(\frac{\partial \text{RSS}}{\partial \beta_1} = 0\)

\[\sum(y_i - \bar{y} + \hat{\beta}_1\bar{x} - \hat{\beta}_1 x_i)x_i = 0\]

\[\sum(y_i - \bar{y})x_i = \hat{\beta}_1 \sum(x_i - \bar{x})x_i\]

利用 \(\sum(x_i - \bar{x})x_i = \sum(x_i - \bar{x})^2\),即得 \(\hat{\beta}_1\) 的公式

补充推导:从一阶条件到 OLS 闭合解

第一步:从 \(\frac{\partial \text{RSS}}{\partial \beta_0} = 0\) 出发

\[-2\sum(y_i - \beta_0 - \beta_1 x_i) = 0 \implies n\beta_0 = \sum y_i - \beta_1 \sum x_i\]

\[ \large{\hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x}} \]

第二步:将 \(\hat{\beta}_0\) 代入 \(\frac{\partial \text{RSS}}{\partial \beta_1} = 0\)

\[\sum(y_i - \bar{y} + \hat{\beta}_1\bar{x} - \hat{\beta}_1 x_i)x_i = 0\]

\[\sum(y_i - \bar{y})x_i = \hat{\beta}_1 \sum(x_i - \bar{x})x_i\]

利用 \(\sum(x_i - \bar{x})x_i = \sum(x_i - \bar{x})^2\),即得 \(\hat{\beta}_1\) 的公式

实证:A 股上市公司销售费用对营收的影响

import numpy as np  # 导入numpy用于数值计算
import pandas as pd  # 导入pandas用于数据框操作
import matplotlib.pyplot as plt  # 导入matplotlib用于绑图
import statsmodels.api as sm  # 导入statsmodels用于OLS回归
import os  # 导入os模块用于跨平台路径处理

# 配置中文字体与负号显示
plt.rcParams['font.sans-serif'] = ['Source Han Serif SC', 'SimHei', 'Arial Unicode MS']  # 中文字体优先级
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示为方块的问题
# 自动选择本地数据路径(Windows或Linux)
local_data_path = r'C:\qiufei\data\stock\financial_statement.h5'  # Windows默认路径
if not os.path.exists(local_data_path):  # 若不存在则切换Linux路径
    local_data_path = '/home/ubuntu/r2_data_mount/qiufei/data/stock/financial_statement.h5'

df_financial_raw = pd.read_hdf(local_data_path)  # 读取A股上市公司财务报表数据
df_2023_annual = df_financial_raw[df_financial_raw['quarter'] == '2023q4'].copy()  # 筛选2023年年报

target_columns = ['revenue', 'selling_expense']  # 目标字段:营业收入和销售费用
df_analysis = df_2023_annual[target_columns].dropna()  # 剔除缺失值

# 过滤极端小值以保证对数变换有效
df_analysis = df_analysis[(df_analysis['revenue'] > 1e7) & (df_analysis['selling_expense'] > 1e6)]
df_analysis['log_revenue'] = np.log10(df_analysis['revenue'])  # 对营业收入取常用对数
df_analysis['log_selling_expense'] = np.log10(df_analysis['selling_expense'])  # 对销售费用取常用对数

双对数 OLS 回归:弹性系数的经济含义

Code
# 如果样本量过大,抽样以保持图表清晰
if len(df_analysis) > 250:  # 样本量超过可视化阈值
    df_plot = df_analysis.sample(250, random_state=42)  # 固定种子抽样
else:
    df_plot = df_analysis  # 全量使用

x_selling = df_plot['log_selling_expense']  # 自变量:对数销售费用
y_revenue = df_plot['log_revenue']  # 因变量:对数营业收入
X_with_const = sm.add_constant(x_selling)  # 添加截距列
ols_result = sm.OLS(y_revenue, X_with_const).fit()  # OLS拟合

fig, ax = plt.subplots(figsize=(10, 6))  # 创建画布
ax.scatter(x_selling, y_revenue, alpha=0.5, s=50, color='#34495e', edgecolors='white')  # 散点图
x_line = np.linspace(x_selling.min(), x_selling.max(), 100)  # 拟合线X坐标
y_line = ols_result.predict(sm.add_constant(x_line))  # 预测值
ax.plot(x_line, y_line, color='#e74c3c', linewidth=3,  # 红色拟合线
        label=f'OLS: β₁={ols_result.params.iloc[1]:.3f}, R²={ols_result.rsquared:.3f}')
ax.set_xlabel('Log₁₀(销售费用)', fontsize=12)  # X轴标签
ax.set_ylabel('Log₁₀(营业收入)', fontsize=12)  # Y轴标签
ax.set_title('A股制造企业:销售费用→营业收入 (双对数OLS)', fontsize=14, fontweight='bold')
ax.legend(fontsize=11)  # 图例
ax.grid(True, linestyle='--', alpha=0.5)  # 网格
plt.tight_layout()  # 调整布局
plt.show()  # 显示
Figure 2: A股上市公司:销售费用与营业收入的双对数线性回归(2023年年报,OLS拟合)

经济解读:双对数模型下,\(\hat{\beta}_1\) 直接代表弹性——销售费用每增加 1%,营收平均增加 \(\hat{\beta}_1\)%

AIC 与 BIC:信息准则简介

除了调整 \(R^2\),还有两种更常用的模型比较工具:

赤池信息准则 (AIC)

\[ \large{\text{AIC} = n \ln(\text{RSS}/n) + 2p} \]

贝叶斯信息准则 (BIC)

\[ \large{\text{BIC} = n \ln(\text{RSS}/n) + p \ln(n)} \]

准则 惩罚力度 倾向选择
AIC 较轻(\(2p\) 预测最优模型
BIC 较重(\(p\ln n\) 更简约的模型

使用原则:当 \(n > 7\)(几乎总是),BIC 的惩罚更强 → 选出更小的模型

AIC 与 BIC:信息准则简介

除了调整 \(R^2\),还有两种更常用的模型比较工具:

赤池信息准则 (AIC)

\[ \large{\text{AIC} = n \ln(\text{RSS}/n) + 2p} \]

贝叶斯信息准则 (BIC)

\[ \large{\text{BIC} = n \ln(\text{RSS}/n) + p \ln(n)} \]

准则 惩罚力度 倾向选择
AIC 较轻(\(2p\) 预测最优模型
BIC 较重(\(p\ln n\) 更简约的模型

使用原则:当 \(n > 7\)(几乎总是),BIC 的惩罚更强 → 选出更小的模型

系数估计的准确性:标准误与抽样分布

OLS 估计量的方差与标准误:

\[ \large{\text{SE}(\hat{\beta}_1) = \sqrt{\frac{\sigma^2}{\sum_{i=1}^{n}(x_i - \bar{x})^2}}} \]

\[ \large{\text{SE}(\hat{\beta}_0) = \sqrt{\sigma^2\left[\frac{1}{n} + \frac{\bar{x}^2}{\sum(x_i - \bar{x})^2}\right]}} \]

其中 \(\sigma^2\)残差标准误 (RSE) 估计:

\[ \large{\hat{\sigma}^2 = \frac{\text{RSS}}{n - 2}} \]

为什么除以 \(n-2\) 因为估计了 2 个参数 (\(\beta_0, \beta_1\)),消耗了 2 个自由度(贝塞尔校正)

直觉理解:什么因素决定估计的精确度?

从标准误公式 \(\text{SE}(\hat{\beta}_1) = \frac{\sigma}{\sqrt{\sum(x_i - \bar{x})^2}}\) 可知:

因素 影响方向 直觉
噪声 \(\sigma\) 减小 SE ↓ 更精确 数据质量越高,估计越准
样本量 \(n\) 增大 SE ↓ 更精确 更多数据带来更多信息
X 的离散度增大 SE ↓ 更精确 自变量变化范围越大,越容易识别斜率

实验设计启示

  • 实验中应选择跨度大的自变量水平
  • 增加样本量是提高精度的最直接手段
  • 控制无关噪声(如行业固定效应)可有效降低 \(\sigma\)

直觉理解:什么因素决定估计的精确度?

从标准误公式 \(\text{SE}(\hat{\beta}_1) = \frac{\sigma}{\sqrt{\sum(x_i - \bar{x})^2}}\) 可知:

因素 影响方向 直觉
噪声 \(\sigma\) 减小 SE ↓ 更精确 数据质量越高,估计越准
样本量 \(n\) 增大 SE ↓ 更精确 更多数据带来更多信息
X 的离散度增大 SE ↓ 更精确 自变量变化范围越大,越容易识别斜率

实验设计启示

  • 实验中应选择跨度大的自变量水平
  • 增加样本量是提高精度的最直接手段
  • 控制无关噪声(如行业固定效应)可有效降低 \(\sigma\)

假设检验与置信区间

t 检验:检验 \(\beta_1\) 是否显著不为零

\[ \large{t = \frac{\hat{\beta}_1}{\text{SE}(\hat{\beta}_1)} \sim t_{n-2}} \]

  • \(H_0: \beta_1 = 0\)(X 与 Y 无线性关系)
  • \(H_a: \beta_1 \neq 0\)(X 与 Y 存在线性关系)
  • \(|t|\) 足够大(p值 < 0.05),拒绝 \(H_0\)

95% 置信区间

\[ \large{\hat{\beta}_1 \pm t_{0.025,\, n-2} \cdot \text{SE}(\hat{\beta}_1)} \]

置信区间包含了”如果我们重复无数次抽样,95% 的区间会覆盖真实参数”的含义

p 值的正确理解与常见误区

p 值的严格定义:在原假设为真的前提下,观察到与现有数据一样极端或更极端的结果的概率

常见误区 正确理解
❌ ‘p = 0.03 说明 H₀ 为真的概率是 3%’ ✅ p 值不是 H₀ 的后验概率
❌ ‘p < 0.05 就意味着经济上重要’ ✅ 统计显著 ≠ 经济显著(效应量才重要)
❌ ‘p > 0.05 就证明 X 没有影响’ ✅ 不拒绝 H₀ ≠ 接受 H₀(可能样本不够)
❌ ‘p 值越小,效应越大’ ✅ p 值受样本量影响(n → ∞ 时一切都显著)

金融研究中的 p-hacking 问题:反复尝试不同变量组合直到 p < 0.05

p 值的正确理解与常见误区

p 值的严格定义:在原假设为真的前提下,观察到与现有数据一样极端或更极端的结果的概率

常见误区 正确理解
❌ ‘p = 0.03 说明 H₀ 为真的概率是 3%’ ✅ p 值不是 H₀ 的后验概率
❌ ‘p < 0.05 就意味着经济上重要’ ✅ 统计显著 ≠ 经济显著(效应量才重要)
❌ ‘p > 0.05 就证明 X 没有影响’ ✅ 不拒绝 H₀ ≠ 接受 H₀(可能样本不够)
❌ ‘p 值越小,效应越大’ ✅ p 值受样本量影响(n → ∞ 时一切都显著)

金融研究中的 p-hacking 问题:反复尝试不同变量组合直到 p < 0.05

模型拟合优度:\(R^2\) 与 RSE

\(R^2\) 衡量预测变量解释了响应变量多大比例的变异

\[ \large{R^2 = 1 - \frac{\text{RSS}}{\text{TSS}} = 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}} \]

指标 含义 范围
\(R^2 = 1\) 模型完美拟合 \([0, 1]\)
\(R^2 = 0\) 模型无解释力(等同于均值预测)
RSE 观测值围绕拟合线的平均偏离程度 \([0, +\infty)\)

重要提醒\(R^2\) 随变量增加只增不减 → 需要调整 \(R^2\) 惩罚模型复杂度

\(R^2\) 的四大陷阱:高 \(R^2\) 不等于好模型

陷阱 说明 典型案例
虚假回归 两个趋势变量回归 \(R^2\) 极高 GDP ~ 手机用户数 (\(R^2 > 0.99\))
过拟合 变量越多 \(R^2\) 越高 加入250个无关变量 \(R^2 \to 1\)
遗漏变量 \(R^2\) 高但系数有偏 冰淇淋销量 ~ 溺水人数
非因果 \(R^2\) 不代表因果关系 尼古拉斯·凯奇电影数 ~ 泳池溺水

正确使用 \(R^2\) 的原则

  • 比较同一数据集上不同模型的解释力
  • 始终配合调整 \(R^2\) 或信息准则
  • 结合理论先验判断模型是否合理

\(R^2\) 的四大陷阱:高 \(R^2\) 不等于好模型

陷阱 说明 典型案例
虚假回归 两个趋势变量回归 \(R^2\) 极高 GDP ~ 手机用户数 (\(R^2 > 0.99\))
过拟合 变量越多 \(R^2\) 越高 加入250个无关变量 \(R^2 \to 1\)
遗漏变量 \(R^2\) 高但系数有偏 冰淇淋销量 ~ 溺水人数
非因果 \(R^2\) 不代表因果关系 尼古拉斯·凯奇电影数 ~ 泳池溺水

正确使用 \(R^2\) 的原则

  • 比较同一数据集上不同模型的解释力
  • 始终配合调整 \(R^2\) 或信息准则
  • 结合理论先验判断模型是否合理

从一元到多元:多元线性回归

当有 \(p\) 个预测变量时:

\[ \large{Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p + \epsilon} \]

矩阵形式更简洁:

\[ \large{\mathbf{Y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}} \]

其中:

  • \(\mathbf{Y}\)\(n \times 1\) 响应向量
  • \(\mathbf{X}\)\(n \times (p+1)\) 设计矩阵(含截距列)
  • \(\boldsymbol{\beta}\)\((p+1) \times 1\) 系数向量
  • \(\boldsymbol{\epsilon}\)\(n \times 1\) 误差向量

正规方程:OLS 的矩阵解析解

最小化 RSS 的矩阵推导:

\[ \text{RSS} = (\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})^T(\mathbf{Y} - \mathbf{X}\boldsymbol{\beta}) \]

\(\boldsymbol{\beta}\) 求梯度并令其为零:

\[ \nabla_{\boldsymbol{\beta}} \text{RSS} = -2\mathbf{X}^T\mathbf{Y} + 2\mathbf{X}^T\mathbf{X}\boldsymbol{\beta} = \mathbf{0} \]

得到正规方程 (Normal Equations):

\[ \large{\mathbf{X}^T\mathbf{X}\hat{\boldsymbol{\beta}} = \mathbf{X}^T\mathbf{Y}} \]

OLS 的矩阵闭合解:

\[ \large{\hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}} \]

前提\(\mathbf{X}^T\mathbf{X}\) 必须可逆 → 否则存在完全多重共线性

矩阵推导的逐步细化

展开 RSS 的矩阵形式

\[\text{RSS} = (\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})^T(\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})\]

\[= \mathbf{Y}^T\mathbf{Y} - 2\boldsymbol{\beta}^T\mathbf{X}^T\mathbf{Y} + \boldsymbol{\beta}^T\mathbf{X}^T\mathbf{X}\boldsymbol{\beta}\]

\(\boldsymbol{\beta}\) 求梯度(利用矩阵微分法则):

\[\nabla_{\boldsymbol{\beta}}(\boldsymbol{\beta}^T\mathbf{A}\boldsymbol{\beta}) = 2\mathbf{A}\boldsymbol{\beta}, \quad \nabla_{\boldsymbol{\beta}}(\boldsymbol{\beta}^T\mathbf{b}) = \mathbf{b}\]

\[\nabla_{\boldsymbol{\beta}} \text{RSS} = -2\mathbf{X}^T\mathbf{Y} + 2\mathbf{X}^T\mathbf{X}\boldsymbol{\beta} = \mathbf{0}\]

\[\implies \hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}\]

前提:需要 \(\mathbf{X}^T\mathbf{X}\) 为正定矩阵 → 即 \(\text{rank}(\mathbf{X}) = p + 1\)

\(\mathbf{X}^T\mathbf{X}\) 不可逆时怎么办?

\(\mathbf{X}^T\mathbf{X}\) 不可逆(奇异)的两种常见情况:

情况 条件 后果
完全共线性 某个 \(X_j\) 是其他变量的线性组合 OLS 无唯一解
高维问题 \(p > n\)(变量数 > 样本数) 无穷多个完美拟合的解

解决方案预览(后续章节详解):

  • 岭回归 (Ridge)\((\mathbf{X}^T\mathbf{X} + \lambda\mathbf{I})^{-1}\mathbf{X}^T\mathbf{Y}\) → 加入 \(\lambda\mathbf{I}\) 保证可逆
  • Lasso\(L_1\) 惩罚 → 自动变量选择
  • 主成分回归 (PCR):先降维再回归

这些方法将在第6章线性模型选择与正则化中详细讨论

矩阵推导的逐步细化

展开 RSS 的矩阵形式

\[\text{RSS} = (\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})^T(\mathbf{Y} - \mathbf{X}\boldsymbol{\beta})\]

\[= \mathbf{Y}^T\mathbf{Y} - 2\boldsymbol{\beta}^T\mathbf{X}^T\mathbf{Y} + \boldsymbol{\beta}^T\mathbf{X}^T\mathbf{X}\boldsymbol{\beta}\]

\(\boldsymbol{\beta}\) 求梯度(利用矩阵微分法则):

\[\nabla_{\boldsymbol{\beta}}(\boldsymbol{\beta}^T\mathbf{A}\boldsymbol{\beta}) = 2\mathbf{A}\boldsymbol{\beta}, \quad \nabla_{\boldsymbol{\beta}}(\boldsymbol{\beta}^T\mathbf{b}) = \mathbf{b}\]

\[\nabla_{\boldsymbol{\beta}} \text{RSS} = -2\mathbf{X}^T\mathbf{Y} + 2\mathbf{X}^T\mathbf{X}\boldsymbol{\beta} = \mathbf{0}\]

\[\implies \hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}\]

前提:需要 \(\mathbf{X}^T\mathbf{X}\) 为正定矩阵 → 即 \(\text{rank}(\mathbf{X}) = p + 1\)

\(\mathbf{X}^T\mathbf{X}\) 不可逆时怎么办?

\(\mathbf{X}^T\mathbf{X}\) 不可逆(奇异)的两种常见情况:

情况 条件 后果
完全共线性 某个 \(X_j\) 是其他变量的线性组合 OLS 无唯一解
高维问题 \(p > n\)(变量数 > 样本数) 无穷多个完美拟合的解

解决方案预览(后续章节详解):

  • 岭回归 (Ridge)\((\mathbf{X}^T\mathbf{X} + \lambda\mathbf{I})^{-1}\mathbf{X}^T\mathbf{Y}\) → 加入 \(\lambda\mathbf{I}\) 保证可逆
  • Lasso\(L_1\) 惩罚 → 自动变量选择
  • 主成分回归 (PCR):先降维再回归

这些方法将在第6章线性模型选择与正则化中详细讨论

多元回归实证:三种费用对营收的综合贡献

import numpy as np  # 导入numpy用于数值运算
import pandas as pd  # 导入pandas用于数据框操作
import matplotlib.pyplot as plt  # 导入matplotlib用于绑图
from sklearn.linear_model import LinearRegression  # 导入线性回归
from sklearn.preprocessing import StandardScaler  # 导入标准化工具

np.random.seed(42)  # 设置随机种子
n_firms = 250  # 模拟250家企业

# 模拟三种费用(万元)
rd_expense = np.random.uniform(100, 1000, n_firms)  # 研发费用
sales_expense = np.random.uniform(80, 800, n_firms)  # 销售费用
admin_expense = np.random.uniform(50, 500, n_firms)  # 管理费用

# DGP: Revenue = 200 + 1.5*RD + 2.2*Sales + 0.8*Admin + ε
revenue_observed = (200 + 1.5 * rd_expense + 2.2 * sales_expense +  # 真实线性关系
                    0.8 * admin_expense + np.random.normal(0, 150, n_firms))  # 加入噪声
df_multi = pd.DataFrame({  # 构建数据框
    '研发费用': rd_expense, '销售费用': sales_expense,  # 三种费用列
    '管理费用': admin_expense, '营业收入': revenue_observed  # 响应变量
})

feature_names = ['研发费用', '销售费用', '管理费用']  # 特征名列表
X_raw = df_multi[feature_names]  # 提取特征矩阵
y_target = df_multi['营业收入']  # 提取目标向量

scaler = StandardScaler()  # 实例化标准化器
X_scaled = scaler.fit_transform(X_raw)  # 标准化(均值0标准差1)

model_multi = LinearRegression().fit(X_scaled, y_target)  # 拟合多元回归模型
print(f'截距: {model_multi.intercept_:.2f}')  # 输出截距
for name, coef in zip(feature_names, model_multi.coef_):  # 遍历输出标准化系数
    print(f'{name} 标准化系数: {coef:.2f}')  # 标准化后系数可直接比较重要性
print(f'R² = {model_multi.score(X_scaled, y_target):.4f}')  # 输出拟合优度
截距: 2212.06
研发费用 标准化系数: 399.39
销售费用 标准化系数: 476.76
管理费用 标准化系数: 98.41
R² = 0.9460

标准化系数直接反映各变量的相对重要性(消除了量纲差异)

三维可视化:回归超平面

Code
from mpl_toolkits.mplot3d import Axes3D  # 导入3D绑图引擎

fig = plt.figure(figsize=(12, 8))  # 创建画布
ax = fig.add_subplot(111, projection='3d')  # 添加3D子图

# 绘制散点
scatter = ax.scatter(X_scaled[:, 0], X_scaled[:, 1], y_target,  # 研发(X)、销售(Y)、营收(Z)
                     c=y_target, cmap='viridis', s=40, alpha=0.6)  # 颜色映射营收高低

# 构建网格用于绘制回归平面
x_grid = np.linspace(X_scaled[:, 0].min(), X_scaled[:, 0].max(), 20)  # 研发维度网格
y_grid = np.linspace(X_scaled[:, 1].min(), X_scaled[:, 1].max(), 20)  # 销售维度网格
X_mesh, Y_mesh = np.meshgrid(x_grid, y_grid)  # 二维网格矩阵
Z_mesh = (model_multi.intercept_ + model_multi.coef_[0] * X_mesh +  # 预测超平面
          model_multi.coef_[1] * Y_mesh + model_multi.coef_[2] * 0)  # 管理费用=0(均值)

ax.plot_surface(X_mesh, Y_mesh, Z_mesh, alpha=0.2, color='red')  # 半透明红色回归平面
ax.set_xlabel('研发费用(标准化)', fontsize=11)  # X轴
ax.set_ylabel('销售费用(标准化)', fontsize=11)  # Y轴
ax.set_zlabel('营业收入(万元)', fontsize=11)  # Z轴
ax.set_title('多元回归超平面', fontsize=14, fontweight='bold')  # 标题
plt.tight_layout()  # 调整布局
plt.show()  # 显示
Figure 3: 多元回归三维可视化:研发费用与销售费用对营业收入的联合预测超平面(管理费用固定于均值)

多元回归系数的’偏效应’含义

核心问题:多元回归中 \(\hat{\beta}_j\) 与简单回归中 \(\hat{\beta}_j\) 有何不同?

回归类型 \(\hat{\beta}_j\) 的含义
简单回归 \(Y \sim X_j\) \(X_j\) 变化1单位对 \(Y\)总效应(包含混淆)
多元回归 \(Y \sim X_1 + \cdots + X_p\) 控制其他变量后\(X_j\) 变化1单位对 \(Y\)净效应

为什么系数会改变?

  • 如果 \(X_j\) 与其他 \(X\) 相关,简单回归的系数包含了间接效应
  • 多元回归’净化’了这些混淆,给出 ceteris paribus 效应
  • 这就是计量经济学强调’控制变量’的核心原因

多元回归系数的’偏效应’含义

核心问题:多元回归中 \(\hat{\beta}_j\) 与简单回归中 \(\hat{\beta}_j\) 有何不同?

回归类型 \(\hat{\beta}_j\) 的含义
简单回归 \(Y \sim X_j\) \(X_j\) 变化1单位对 \(Y\)总效应(包含混淆)
多元回归 \(Y \sim X_1 + \cdots + X_p\) 控制其他变量后\(X_j\) 变化1单位对 \(Y\)净效应

为什么系数会改变?

  • 如果 \(X_j\) 与其他 \(X\) 相关,简单回归的系数包含了间接效应
  • 多元回归’净化’了这些混淆,给出 ceteris paribus 效应
  • 这就是计量经济学强调’控制变量’的核心原因

F 检验:整体模型的联合显著性

检验所有预测变量是否都与 \(Y\) 无关:

  • \(H_0: \beta_1 = \beta_2 = \cdots = \beta_p = 0\)
  • \(H_a:\) 至少有一个 \(\beta_j \neq 0\)

\[ \large{F = \frac{(\text{TSS} - \text{RSS}) / p}{\text{RSS} / (n - p - 1)} \sim F_{p,\, n-p-1}} \]

统计量 含义
分子 模型解释的平均变异(每个自由度)
分母 残差的平均变异(每个自由度)
F 值大 模型整体解释力显著
p值 < 0.05 拒绝 \(H_0\),至少一个变量有用

F 检验与 t 检验的关系

当只有一个预测变量时 (\(p = 1\)):

\[ F = t^2 \]

F 检验与 t 检验完全等价!

当有多个变量时,F 检验回答的问题不同于 t 检验

检验 原假设 回答的问题
t 检验 \(H_0: \beta_j = 0\) 这个变量单独有没有用?
F 检验 \(H_0: \beta_1 = \cdots = \beta_p = 0\) 这组变量作为整体有没有用?

悖论情形:每个 t 检验都不显著,但 F 检验显著

→ 说明变量联合解释力强,但因多重共线性导致个体被掩盖

F 检验与 t 检验的关系

当只有一个预测变量时 (\(p = 1\)):

\[ F = t^2 \]

F 检验与 t 检验完全等价!

当有多个变量时,F 检验回答的问题不同于 t 检验

检验 原假设 回答的问题
t 检验 \(H_0: \beta_j = 0\) 这个变量单独有没有用?
F 检验 \(H_0: \beta_1 = \cdots = \beta_p = 0\) 这组变量作为整体有没有用?

悖论情形:每个 t 检验都不显著,但 F 检验显著

→ 说明变量联合解释力强,但因多重共线性导致个体被掩盖

变量选择与多重共线性诊断

单变量显著性:对每个 \(\beta_j\) 做 t 检验

多重共线性:预测变量间高度相关时的危害:

  • 系数估计不稳定,方向可能反转
  • 标准误膨胀,本应显著的变量变得不显著
  • 解释力被”瓜分”

方差膨胀因子 (VIF) 诊断:

\[ \large{\text{VIF}(\hat{\beta}_j) = \frac{1}{1 - R_j^2}} \]

VIF 范围 判定
1 ~ 5 可接受
5 ~ 10 中度共线性,需关注
> 10 严重共线性,必须处理

处理方法:剔除冗余变量、PCA 降维、岭回归 / Lasso

中国上市公司数据中的共线性典型案例

场景:用多个财务指标预测 ROE

变量 含义 与其他变量的关系
总资产 企业规模 与营收、利润高度相关
营业收入 销售规模 与总资产相关 (VIF > 15)
营业利润 盈利规模 几乎是营收的固定比例
所有者权益 净资产 与总资产高度相关

诊断结果:营收与总资产的 VIF 往往超过 10,甚至达到 50+

实践策略

  • 只保留总资产作为规模代理变量
  • 或者用总资产周转率 = 营收/总资产,将两个变量合并为一个比率
  • 规模效应可用对数变换缓解

中国上市公司数据中的共线性典型案例

场景:用多个财务指标预测 ROE

变量 含义 与其他变量的关系
总资产 企业规模 与营收、利润高度相关
营业收入 销售规模 与总资产相关 (VIF > 15)
营业利润 盈利规模 几乎是营收的固定比例
所有者权益 净资产 与总资产高度相关

诊断结果:营收与总资产的 VIF 往往超过 10,甚至达到 50+

实践策略

  • 只保留总资产作为规模代理变量
  • 或者用总资产周转率 = 营收/总资产,将两个变量合并为一个比率
  • 规模效应可用对数变换缓解

定性预测变量:虚拟变量编码

对于分类变量(如企业性质),引入虚拟变量 (Dummy Variable):

\[ D_i = \begin{cases} 1 & \text{国有企业} \\ 0 & \text{民营企业} \end{cases} \]

模型:\(Y_i = \beta_0 + \beta_1 D_i + \epsilon_i\)

系数的经济含义:

  • \(\beta_0\)民营企业的平均值(基准组)
  • \(\beta_0 + \beta_1\)国有企业的平均值
  • \(\beta_1\)两组之间的平均差异

多分类变量(如行业)需要 \(k-1\) 个虚拟变量编码 \(k\) 个类别

实证:国企 vs 民企的 ROE 差异

Table 1: 虚拟变量回归:产权性质对净资产收益率(ROE)的影响(控制资产规模)
import statsmodels.api as sm  # 导入statsmodels

np.random.seed(42)  # 设置随机种子
n_obs = 300  # 300家企业

log_asset = np.random.uniform(20, 26, n_obs)  # 对数资产规模
is_soe = np.random.choice([0, 1], size=n_obs, p=[0.7, 0.3])  # 30%国企

# DGP: ROE = 0.02 + 0.005*(Size-23) - 0.015*SOE + ε
roe_values = 0.02 + 0.005 * (log_asset - 23) - 0.015 * is_soe + np.random.normal(0, 0.02, n_obs)

df_dummy = pd.DataFrame({'LogAsset': log_asset, 'IsSOE': is_soe, 'ROE': roe_values})  # 构建数据框
X_dummy = sm.add_constant(df_dummy[['LogAsset', 'IsSOE']])  # 加截距
model_dummy = sm.OLS(df_dummy['ROE'], X_dummy).fit()  # OLS拟合
print(model_dummy.summary().tables[1])  # 输出系数表
soe_coef = model_dummy.params['IsSOE']  # 提取国企系数
print(f'\n控制资产规模后,国企ROE平均比民企低 {abs(soe_coef)*100:.2f} 个百分点')
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         -0.0796      0.015     -5.178      0.000      -0.110      -0.049
LogAsset       0.0043      0.001      6.498      0.000       0.003       0.006
IsSOE         -0.0179      0.003     -7.126      0.000      -0.023      -0.013
==============================================================================

控制资产规模后,国企ROE平均比民企低 1.79 个百分点

线性模型的扩展:交互效应

可加性假设的放松:变量之间可能存在协同效应

\[ \large{Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3(X_1 \times X_2) + \epsilon} \]

交互项 \(\beta_3\) 的含义:

  • \(\beta_3 > 0\):两个变量有正向协同效应
  • \(\beta_3 < 0\):两个变量有负向协同效应
  • \(\beta_3 = 0\):无交互,退化为标准可加模型

金融案例:研发投入在低竞争行业中的产出比是否高于高竞争行业?

\[ \text{Revenue} = \beta_0 + \beta_1 X_{RD} + \beta_2 X_{HHI} + \beta_3(X_{RD} \times X_{HHI}) + \epsilon \]

交互项的经济直觉:协同与替代

\(Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3(X_1 \times X_2) + \epsilon\)

\(X_1\) 对 Y 的边际效应不再是常数

\[ \frac{\partial Y}{\partial X_1} = \beta_1 + \beta_3 X_2 \]

\(X_1\) 的效应取决于 \(X_2\) 的水平

\(\beta_3\) 经济含义 金融案例
\(> 0\) 互补/协同 研发投入在知识产权保护强的地区回报更高
\(< 0\) 替代 线上广告减弱了线下广告的边际效果
\(= 0\) 可加 两因素独立作用,无协同

层级原则:如果模型包含交互项 \(X_1 \times X_2\),则必须同时包含 \(X_1\)\(X_2\) 的主效应

交互项的经济直觉:协同与替代

\(Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3(X_1 \times X_2) + \epsilon\)

\(X_1\) 对 Y 的边际效应不再是常数

\[ \frac{\partial Y}{\partial X_1} = \beta_1 + \beta_3 X_2 \]

\(X_1\) 的效应取决于 \(X_2\) 的水平

\(\beta_3\) 经济含义 金融案例
\(> 0\) 互补/协同 研发投入在知识产权保护强的地区回报更高
\(< 0\) 替代 线上广告减弱了线下广告的边际效果
\(= 0\) 可加 两因素独立作用,无协同

层级原则:如果模型包含交互项 \(X_1 \times X_2\),则必须同时包含 \(X_1\)\(X_2\) 的主效应

非线性关系:多项式回归

线性假设的放松:真实关系可能呈 U 型或倒 U 型

\[ \large{Y = \beta_0 + \beta_1 X + \beta_2 X^2 + \epsilon} \]

经典案例——熊彼特假设:公司规模与创新效率的倒 U 型关系

  • \(\beta_2 < 0\):存在最优规模,超过后边际效益转负
  • 最优规模点:\(X^* = -\frac{\beta_1}{2\beta_2}\)
from sklearn.preprocessing import PolynomialFeatures  # 导入多项式特征生成器
from sklearn.pipeline import Pipeline  # 导入管道工具

np.random.seed(42)  # 固定随机种子
n_obs = 200  # 200个观测
x_budget = np.random.uniform(0, 300, n_obs)  # 广告预算
# 二次关系:边际收益递减
y_sales = 5 + 0.06 * x_budget - 0.0001 * x_budget**2 + np.random.normal(0, 2, n_obs)

模型复杂度对比:欠拟合 vs 适度拟合 vs 过拟合

Code
from sklearn.metrics import r2_score  # 导入R²评分

fig, axes = plt.subplots(1, 3, figsize=(18, 5))  # 1行3列
degrees = [1, 2, 10]  # 三种阶数
colors = ['steelblue', 'darkgreen', 'crimson']  # 对应颜色
titles = ['线性(欠拟合)', '二次(适度)', '10次(过拟合)']  # 标题

for i, (deg, clr, ttl) in enumerate(zip(degrees, colors, titles)):  # 遍历
    pipe = Pipeline([('poly', PolynomialFeatures(deg)), ('lr', LinearRegression())])  # 管道
    pipe.fit(x_budget.reshape(-1, 1), y_sales)  # 拟合
    x_grid = np.linspace(0, 300, 300).reshape(-1, 1)  # 网格
    y_pred = pipe.predict(x_grid)  # 预测
    r2 = r2_score(y_sales, pipe.predict(x_budget.reshape(-1, 1)))  # R²

    axes[i].scatter(x_budget, y_sales, alpha=0.4, color='gray', s=40)  # 散点
    axes[i].plot(x_grid, y_pred, color=clr, linewidth=2.5)  # 拟合线
    axes[i].set_title(f'{ttl}\nR²={r2:.4f}', fontsize=13, fontweight='bold')  # 标题
    axes[i].set_xlabel('广告预算(万元)', fontsize=11)  # X轴
    axes[i].set_ylabel('销售量(千件)', fontsize=11)  # Y轴
    axes[i].grid(True, alpha=0.3)  # 网格

plt.tight_layout()  # 调整
plt.show()  # 显示
Figure 4: 多项式回归的三种拟合状态:1次(欠拟合)、2次(适度拟合)、10次(过拟合)

第2章的偏差-方差权衡在此完美体现:复杂度太低偏差大,太高方差大

模型选择的实践原则:奥卡姆剃刀

奥卡姆剃刀 (Occam’s Razor):在解释力相当的模型中,选择最简单的那个

线性回归中的具体操作

  1. 从简单到复杂:先拟合线性模型,再尝试多项式
  2. 每增加一个变量,检查
    • 调整 \(R^2\) 是否提高?
    • AIC/BIC 是否下降?
    • 新变量是否统计显著?
  3. 关注预测误差:在测试集上验证,而非仅看训练集 \(R^2\)

金融领域的经验法则

  • 截面回归(公司分析):3~10 个变量为宜
  • 时间序列模型:变量少于样本数的 \(\sqrt{n}\)

模型选择的实践原则:奥卡姆剃刀

奥卡姆剃刀 (Occam’s Razor):在解释力相当的模型中,选择最简单的那个

线性回归中的具体操作

  1. 从简单到复杂:先拟合线性模型,再尝试多项式
  2. 每增加一个变量,检查
    • 调整 \(R^2\) 是否提高?
    • AIC/BIC 是否下降?
    • 新变量是否统计显著?
  3. 关注预测误差:在测试集上验证,而非仅看训练集 \(R^2\)

金融领域的经验法则

  • 截面回归(公司分析):3~10 个变量为宜
  • 时间序列模型:变量少于样本数的 \(\sqrt{n}\)

回归诊断:五大潜在问题

回归诊断五大问题 非线性、误差相关、异方差、异常值、共线性五个问题的概览图 线性回归的五大诊断问题 非线性 残差呈现 系统模式 → 多项式/变换 误差相关 时间序列 自相关 → DW检验 异方差 误差方差 随X变化 → WLS/稳健SE 异常值 极端残差 高杠杆点 → Cook距离 共线性 变量间 高度相关 → VIF/PCA 诊断流程建议 1. 残差图 → 检查非线性与异方差 2. DW 统计量 → 检查误差自相关(时间序列数据) 3. 学生化残差 + Cook 距离 → 识别异常值与高杠杆点 4. VIF → 诊断多重共线性(VIF > 10 需处理)
Figure 5: 回归诊断是确保模型可靠性的必要步骤

残差图实战:如何’读’残差图

将残差 \(e_i = y_i - \hat{y}_i\)\(\hat{y}_i\) 绑图,不同模式的含义:

残差图模式 诊断 对策
随机散布(无模式) ✅ 假设满足 无需调整
U 型或倒 U 型 ❌ 非线性 加多项式项/变换
喇叭形(越来越宽) ❌ 异方差 对数变换/WLS
锯齿形/周期性 ❌ 自相关 差分/滞后项
个别极端点 ⚠️ 异常值 检查 Cook 距离

最佳实践:拟合任何回归模型后的第一步就是画残差图

中国金融数据中最常见的假设违反

异方差——几乎在所有截面数据中存在

  • 大公司和小公司的残差方差差异巨大
  • 解决:使用 White 稳健标准误HC3 标准误
  • Python:model.get_robustcov_results(cov_type='HC3')

遗漏变量 / 内生性——因果推断的最大障碍

  • 管理层能力、公司文化等不可观测因素
  • 解决:面板固定效应工具变量 (IV)DID

自相关——在时间序列回归中普遍存在

  • 股票收益率存在短期动量和长期反转
  • 解决:Newey-West 标准误、ARMA 模型

实际操作原则:始终报告稳健标准误,不要依赖默认标准误

残差图实战:如何’读’残差图

将残差 \(e_i = y_i - \hat{y}_i\)\(\hat{y}_i\) 绑图,不同模式的含义:

残差图模式 诊断 对策
随机散布(无模式) ✅ 假设满足 无需调整
U 型或倒 U 型 ❌ 非线性 加多项式项/变换
喇叭形(越来越宽) ❌ 异方差 对数变换/WLS
锯齿形/周期性 ❌ 自相关 差分/滞后项
个别极端点 ⚠️ 异常值 检查 Cook 距离

最佳实践:拟合任何回归模型后的第一步就是画残差图

中国金融数据中最常见的假设违反

异方差——几乎在所有截面数据中存在

  • 大公司和小公司的残差方差差异巨大
  • 解决:使用 White 稳健标准误HC3 标准误
  • Python:model.get_robustcov_results(cov_type='HC3')

遗漏变量 / 内生性——因果推断的最大障碍

  • 管理层能力、公司文化等不可观测因素
  • 解决:面板固定效应工具变量 (IV)DID

自相关——在时间序列回归中普遍存在

  • 股票收益率存在短期动量和长期反转
  • 解决:Newey-West 标准误、ARMA 模型

实际操作原则:始终报告稳健标准误,不要依赖默认标准误

调整 \(R^2\):惩罚模型复杂度

\(R^2\) 随变量增加只增不减 → 不适合比较不同复杂度的模型

\[ \large{\text{Adjusted } R^2 = 1 - \frac{\text{RSS}/(n - p - 1)}{\text{TSS}/(n - 1)}} \]

对比:

指标 特点 适用场景
\(R^2\) 只增不减 固定变量数的模型评估
调整 \(R^2\) 增加无用变量时会下降 不同变量数的模型比较
AIC / BIC 信息准则,惩罚更严 模型选择

经验法则:优先参考调整 \(R^2\),辅以 AIC/BIC

回归分析的完整工作流程

步骤 操作 关键检查
1. 理论建模 基于经济理论选择变量 有理论支撑吗?
2. 数据准备 清洗、变换、标准化 有缺失值/异常值吗?
3. 模型拟合 OLS 回归 系数符号合理吗?
4. 统计推断 t/F检验、置信区间 显著性与经济意义一致吗?
5. 模型诊断 残差图、VIF、DW检验 假设满足吗?
6. 稳健性检验 换变量、换样本、换方法 结果稳定吗?
7. 结果解读 经济含义、政策启示 因果还是相关?

“没有诊断的回归是不完整的回归”

思考练习(一):简单回归的直觉与应用

练习 1:概念理解

假设对100家A股公司回归:\(\text{营收增长率} = \beta_0 + \beta_1 \times \text{研发强度} + \epsilon\)

    1. \(\hat{\beta}_1 = 2.5\)\(\text{SE} = 1.2\),判断研发强度是否显著影响营收增长率
    1. 如果 \(R^2 = 0.08\),能否说明研发强度不重要?为什么?
    1. 列出至少两个可能的遗漏变量

练习 2:系数解读

某双对数回归结果为 \(\ln(\text{营收}) = 3.2 + 0.85 \ln(\text{销售费用})\)

    1. 解释 0.85 的经济含义
    1. 弹性小于1意味着什么?

思考练习(二):多元回归与诊断

练习 3:多元回归与偏效应

已知简单回归 \(\text{ROE} \sim \text{杠杆率}\) 得到 \(\hat{\beta} = -0.05\)(显著),但加入行业虚拟变量后变为 \(\hat{\beta} = 0.02\)(不显著)。

    1. 为什么系数从负变正?
    1. 这说明了什么统计现象?

练习 4:诊断实践

你拟合了一个多元回归模型,发现:

  • 残差图呈喇叭形(方差随预测值增大)
  • 某变量的 VIF = 12.3

请分别说明这两个发现意味着什么,以及你会如何处理。

回归分析的完整工作流程

步骤 操作 关键检查
1. 理论建模 基于经济理论选择变量 有理论支撑吗?
2. 数据准备 清洗、变换、标准化 有缺失值/异常值吗?
3. 模型拟合 OLS 回归 系数符号合理吗?
4. 统计推断 t/F检验、置信区间 显著性与经济意义一致吗?
5. 模型诊断 残差图、VIF、DW检验 假设满足吗?
6. 稳健性检验 换变量、换样本、换方法 结果稳定吗?
7. 结果解读 经济含义、政策启示 因果还是相关?

“没有诊断的回归是不完整的回归”

思考练习(一):简单回归的直觉与应用

练习 1:概念理解

假设对100家A股公司回归:\(\text{营收增长率} = \beta_0 + \beta_1 \times \text{研发强度} + \epsilon\)

    1. \(\hat{\beta}_1 = 2.5\)\(\text{SE} = 1.2\),判断研发强度是否显著影响营收增长率
    1. 如果 \(R^2 = 0.08\),能否说明研发强度不重要?为什么?
    1. 列出至少两个可能的遗漏变量

练习 2:系数解读

某双对数回归结果为 \(\ln(\text{营收}) = 3.2 + 0.85 \ln(\text{销售费用})\)

    1. 解释 0.85 的经济含义
    1. 弹性小于1意味着什么?

思考练习(二):多元回归与诊断

练习 3:多元回归与偏效应

已知简单回归 \(\text{ROE} \sim \text{杠杆率}\) 得到 \(\hat{\beta} = -0.05\)(显著),但加入行业虚拟变量后变为 \(\hat{\beta} = 0.02\)(不显著)。

    1. 为什么系数从负变正?
    1. 这说明了什么统计现象?

练习 4:诊断实践

你拟合了一个多元回归模型,发现:

  • 残差图呈喇叭形(方差随预测值增大)
  • 某变量的 VIF = 12.3

请分别说明这两个发现意味着什么,以及你会如何处理。

本章核心知识体系总结

第三章知识体系 线性回归从简单到多元到扩展到诊断的完整知识体系 线性回归知识体系 简单线性回归 (SLR) 多元线性回归 (MLR) 统计推断 模型扩展 诊断与修正 • t 检验 / F 检验 • 置信区间 • R² / 调整R² • RSE • 虚拟变量 • 交互项 • 多项式回归 • 对数变换 • 残差图 • VIF (共线性) • Cook 距离 • DW 统计量 核心公式:β̂ = (X⊤X)⁻¹X⊤Y
Figure 6: 从简单回归到多元回归,从参数估计到统计推断,再到模型诊断——完整的分析框架