小样本偏差验证#
问题:
使用yfinance获取蔚来汽车(NIO)2023年Q1的日频数据(约60个交易日),完成以下任务:
-
随机抽取10天数据建立价格趋势回归模型(时间戳为自变量)
-
用完整季度数据重复上述回归
-
对比两次回归斜率的差异程度
-
通过自助采样法(Bootstrap)计算斜率置信区间
Python答题框架:
code
import yfinance as yf
import numpy as np
from sklearn.utils import resample
# 数据获取
nio = yf.download('NIO', start='2023-01-01', end='2023-03-31')['Close']
days = np.arange(len(nio))
# 小样本回归
sample_idx = np.random.choice(...)
small_X = days[sample_idx]
small_y = nio.iloc[sample_idx]
model_small = sm.OLS(...).fit()
# 全样本回归
model_full = sm.OLS(...).fit()
# 自助采样
bootstrap_slopes = []
for _ in range(1000):
...
...
print(f"小样本斜率:{model_small.params[1]:.2f}")
print(f"全样本斜率:{model_full.params[1]:.2f}")
print(f"95%置信区间:{[np.percentile(bootstrap_slopes, 2.5), ...]}")结构突变检测#
问题:
选取纳斯达克指数(^IXIC)2015-2020年月频数据:
-
对价格序列进行分段线性回归(假设2020年3月为潜在断点)
-
使用CUSUM检验验证结构突变
-
比较断点前后趋势系数变化
-
绘制残差序列观察突变特征
Python答题框架:
code
from statsmodels.stats.diagnostic import breaks_cusumolsresid
# 获取数据
nasdaq = yf.download(...)
prices = (...)
time_index = (...)
# 分段回归
break_date = '2020-03-01'
pre_break = (...)
post_break = (...)
# CUSUM检验
full_model = sm.OLS(...).fit()
cusum_test = (...)
print(f"结构突变检验p值:{cusum_test[1]:.4f}")
# 残差可视化
...数据示例说明:
code
分段回归结果:
2015-2020趋势系数: 25.3
2020年前趋势系数: 22.1
2020年后趋势系数: 38.6
CUSUM检验p值: 0.013提示:残差图的突变点可通过垂直线标记,使用plt.axvline()实现