/ / /
第17讲:模型误设定 (Model Misspecification)
🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第17讲:模型误设定 (Model Misspecification)

💡

查看全集:💎Quantopia量化分析56讲

概述

模型设定指选择适合数据的函数形式,包含三个要素:因变量、自变量和函数形式。错误的模型设定会导致回归假设被违反,影响模型准确性。本教程将系统讲解常见的模型设定错误及解决方法。


一、遗漏重要变量

概念解析

当模型中遗漏与已包含变量相关的关键解释变量时,会导致系数估计偏差。例如两个股票价格都受大盘影响,若遗漏大盘变量,可能误判两股票间的伪因果关系。

公式表达

真实模型:

Y=β0+β1X1+β2X2+ϵY = \beta_0 + \beta_1X_1 + \beta_2X_2 + \epsilon

错误模型:

Y=β0+β1X1+ϵY = \beta_0 + \beta_1X_1 + \epsilon

这描述了遗漏变量偏误的情况:

这是计量经济学中的一个重要概念,说明模型设定错误可能导致参数估计有偏。

实例演示

import yfinance as yf
import statsmodels.api as sm

# 获取数据
start = '2013-01-01'
end = '2015-01-01'
bench = yf.download('SPY', start=start, end=end)['Adj Close']
aapl = yf.download('AAPL', start=start, end=end)['Adj Close']
lrcx = yf.download('LRCX', start=start, end=end)['Adj Close']

# 回归分析
X = sm.add_constant(lrcx)
model1 = sm.OLS(aapl, X).fit()

X_bench = sm.add_constant(bench)
model_bench = sm.OLS(lrcx, X_bench).fit()

print(f"AAPL与LRCX的R²: {model1.rsquared:.3f}")
print(f"LRCX与SPY的R²: {model_bench.rsquared:.3f}")

演进分析

时间范围AAPL-LRCX R²LRCX-SPY R²
2013-20150.9110.875
2009-20150.5000.747

结论:长期来看个股与大盘的相关性更稳定


二、包含无关变量

概念对比

情形影响R²变化
包含真正无关变量降低估计精度调整R²下降
包含弱相关变量可能导致过拟合样本内R²虚高

过拟合示例

# 获取多只股票数据
tickers = ['PEP', 'MCD', 'ATHN', 'DOW', 'PG']
data = yf.download(tickers, start='2014-01-01', end='2015-01-01')['Adj Close']

# 单变量 vs 多变量回归
X_single = sm.add_constant(data['PEP'])
model_single = sm.OLS(data['PG'], X_single).fit()

X_multi = sm.add_constant(data[['PEP','MCD','ATHN','DOW']])
model_multi = sm.OLS(data['PG'], X_multi).fit()

print(f"单变量调整R²: {model_single.rsquared_adj:.3f}")
print(f"多变量调整R²: {model_multi.rsquared_adj:.3f}")

样本外验证

# 扩展时间范围测试
new_data = yf.download(tickers, start='2015-01-01', end='2015-06-01')['Adj Close']

# 使用原模型预测
pred_single = model_single.params[0] + model_single.params[1]*new_data['PEP']
pred_multi = model_multi.params[0] + new_data[['PEP','MCD','ATHN','DOW']] @ model_multi.params[1:]

# 计算样本外R²
SST = ((new_data['PG'] - new_data['PG'].mean())**2).sum()
SSR_single = ((pred_single - new_data['PG'])**2).sum()
print(f"单变量样本外R²: {1 - SSR_single/SST:.3f}")

三、函数形式错误

常见形式对比

形式方程适用场景
线性模型Y=β0+β1XY = \beta_0 + \beta_1X简单比例关系
对数线性模型lnY=β0+β1X\ln Y = \beta_0 + \beta_1X指数增长关系
多项式模型Y=β0+β1X+β2X2Y = \beta_0 + \beta_1X + \beta_2X^2存在拐点的情况

模型诊断练习

给定数据集:

import numpy as np
X = np.linspace(1, 10, 100)
Y = 2 + 3*np.log(X) + np.random.normal(0, 0.5, 100)

请尝试:

  1. 用线性模型拟合并计算R²
  1. 用对数模型拟合并比较结果
  1. 绘制残差图分析拟合效果

四、非平稳时间序列

单位根检验

使用ADF检验判断序列平稳性:

from statsmodels.tsa.stattools import adfuller

# 生成随机游走
np.random.seed(42)
rw = np.cumsum(np.random.randn(1000))

# 执行ADF检验
result = adfuller(rw)
print(f'ADF统计量: {result[0]:.2f}')
print(f'p值: {result[1]:.4f}')

差分处理

# 一阶差分
diff = rw[1:] - rw[:-1]

# 再次检验
result_diff = adfuller(diff)
print(f'差分后p值: {result_diff[1]:.4f}')

关键概念总结

  1. 遗漏变量偏差:通过Granger因果检验和变量显著性检验诊断
  1. 过拟合风险:使用交叉验证和信息准则(AIC/BIC)评估
  1. 函数形式选择:残差分析和Box-Cox变换辅助判断
  1. 非平稳处理:差分/协整分析结合VAR模型
练习:下载任意两只股票5年数据,尝试:
  1. 检验它们的价格序列是否平稳
  1. 建立回归模型分析相关性
  1. 引入大盘指数作为控制变量,观察系数变化

通过系统理解这些模型设定问题,可显著提升计量分析的有效性。记住:好的模型始于理论构建,而非单纯的数据挖掘。

附:练习合集