跳到主内容
研究主线模型诊断与稳定性 · 第14–19讲5/6 · 配套练习模块导览 →
练习

第18讲:残差分析 (Residual Analysis) · 练习

绘制并检验资产回归残差,使用稳健标准误处理异方差,再比较滚动 Beta 和自相关结果。

← 返回本讲讲义
完成状态保存在当前浏览器,可随时取消。

残差分析与异方差处理#

问题

使用yfinance获取苹果公司(AAPL)与标普500指数(SPY)2023年的日频数据,完成以下任务:

  1. 计算AAPL和SPY的对数收益率

  2. 建立AAPL收益率对SPY收益率的单变量回归模型

  3. 绘制残差与拟合值的关系图,判断是否存在非线性或异方差

  4. 进行Breusch-Pagan检验,若存在异方差,应用对数变换后重新回归,比较模型R平方变化

Python答题框架

code
import yfinance as yf
import numpy as np
import statsmodels.api as sm
import statsmodels.stats.diagnostic as smd

# 数据获取
start = '2023-01-01'
end = '2023-12-31'
aapl = yf.download(...)[...]
spy = yf.download(...)[...]

# 收益率计算与合并
df = (...)
df['log_ret_aapl'] = (...)
df['log_ret_spy'] = (...)

# 回归建模
X = sm.add_constant(df['log_ret_spy'])
model = sm.OLS(...).fit()
print(...)

# 残差诊断图
...

# 异方差检验
bp_test = (...)
if bp_test[1] < 0.05:
    # 应用对数变换(示例)
    df['transformed_y'] = np.log(...)
...

β系数稳定性与自相关检验#

问题

使用特斯拉(TSLA)和标普500指数(SPY)2018-2022年数据:

  1. 分年度计算TSLA的β系数,分析其年度变化

  2. 对2020年数据回归后,进行Ljung-Box自相关检验

  3. 若存在自相关,使用收益率滞后项作为新变量重新建模

Python答题框架

code
from statsmodels.stats.diagnostic import acorr_ljungbox

# 获取多年数据
full_data = yf.download(...)

# 分年度计算β系数
years = [...]
beta_values = []

for year in years:
    year_data = (...)
    ...

# 自相关检验
model_2020 = (...)
resid_2020 = (...)
lb_test = (...)
print(f"自相关检验P值:{lb_test[1]}")

# 处理自相关(示例:添加滞后项)
df_lag = (...)
X_lag = sm.add_constant(...)
model_lag = (...)

数据示例说明

收益率数据格式示例(年维度):

年份Beta系数R-squared
20181.320.65
20191.450.71
20202.010.82

自相关检验输出示例:

code
Ljung-Box检验P值:0.023 (lag=5)
存在显著自相关

提示:处理自相关时可引入ARIMA模型或添加滞后项,但需注意自由度损失

通过这两道习题,学生可以实践残差诊断、异方差处理、β稳定性分析及自相关检验,巩固回归模型验证的关键技能。

完成练习后,自评一次

建议先独立作答,再展开参考答案进行核对。