单变量收益率回归分析#
问题:
使用yfinance获取特斯拉(TSLA)与纳斯达克指数(^IXIC)2022年全年的日频数据,完成以下任务:
-
计算两者的对数收益率(使用
np.log(close).diff()) -
以纳斯达克收益率为自变量、TSLA收益率为因变量建立单变量线性回归
-
输出回归结果的R平方与系数显著性标记(p-value)
-
根据系数解释市场波动对个股的影响程度
Python答题框架:
code
import yfinance as yf
import numpy as np
import statsmodels.api as sm
# 数据获取
start = '2022-01-01'
end = '2022-12-31'
tsla = yf.download('TSLA', start=start, end=end)['Close']
ixic = yf.download('^IXIC', start=start, end=end)['Close']
# 收益率计算
df = (...)
df['log_ret_tsla'] = (...)
df['log_ret_ixic'] = (...)
# 模型构建
X = (...)
model = (...)
print(...)多因子模型与共线性诊断#
问题:
在6.1题基础上增加科技行业ETF(XLK)作为第二个因子:
-
下载XLK同期数据并计算对数收益率
-
建立包含NASDAQ和XLK的双因子回归模型
-
比较单因子/双因子模型的调整R平方变化
-
计算方差膨胀因子(VIF)并诊断多重共线性
Python答题框架:
code
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 新增数据获取
xlk = yf.download(...)[...]
# 合并数据集
df_full = (...)
# 多因子回归
X_multi = (...)
multi_model = (...)
print(...)
# VIF计算
vif_df = pd.DataFrame()
vif_df["features"] = (...)
vif_df["VIF"] = [(...)]
print(vif_df)数据示例说明:
所有数据均通过yfinance实时获取,包含以下字段示例:
| Date | TSLA_Close | IXIC_Close | XLK_Close |
|---|---|---|---|
| 2022-01-03 | 352.26 | 15622.67 | 164.32 |
| 2022-01-04 | 362.12 | 15123.45 | 162.89 |
| ... | ... | ... | ... |
收益率计算后数据示例:
| Date | log_ret_tsla | log_ret_ixic | log_ret_xlk |
|---|---|---|---|
| 2022-01-04 | 0.0278 | -0.0321 | -0.0087 |
| 2022-01-05 | -0.0135 | 0.0187 | 0.0112 |
提示:计算VIF时需先移除常数项列,建议使用循环计算各特征VIF值