如何计算波动率?基于BigVAR包的实操困惑与数据说明
问题:参考BigVAR示例代码无法计算波动率
- 数据背景:拥有不含日期的日度时间序列数据,共2425个观测值,时间跨度10年,年均交易日252天
- 参考的示例代码:
# BigVAR包在自带波动率数据上的使用示例 library(BigVAR) ## 加载必需包:lattice data(volatilities) big_var_est <- function(data) { Model1 = constructModel(as.matrix(data), p = 4, struct = "Basic", gran = c(50, 50), VARX = list(), verbose = F) Model1Results = cv.BigVAR(Model1) } # 执行估计 oo <- big_var_est(log(volatilities[apply(volatilities>0, 1, all),]))
- 问题现象:按照上述示例步骤操作后,未得到预期的波动率结果,相关运行界面截图如下:
[截图:代码运行后的终端界面,无有效波动率输出]
排查与解决建议
数据预处理校验
- 检查数据是否全为正值:示例代码仅对全正的行取对数,先运行
sum(your_data <= 0)确认是否存在0或负值,若有,可替换为极小值(如your_data[your_data <= 0] <- 1e-8)或删除对应行。 - 确认数据格式:确保输入数据是数值型矩阵或数据框,无字符型、因子型数据混入,可通过
str(your_data)查看。
- 检查数据是否全为正值:示例代码仅对全正的行取对数,先运行
模型参数适配调整
- 滞后阶数p:示例用p=4,可通过
vars::VARselect(your_data)确定适合数据的最优滞后阶数后替换。 - 粒度参数gran:示例设置c(50,50),若你的数据维度较小,可尝试调整为c(20,20)或c(30,30);维度大则可增大数值。
- 模型结构:尝试切换为"HLag"或"Pooled"结构,修改
struct参数后重新运行。
- 滞后阶数p:示例用p=4,可通过
结果提取方法
cv.BigVAR返回的结果对象需要主动提取预测值,运行predict(Model1Results)可得到波动率预测结果;也可通过Model1Results$beta查看模型系数,结合原始数据计算波动率。
内容的提问来源于stack exchange,提问作者MOGHIS UR REHMAN
相关产品推荐
相关产品推荐

