如何在tidyverse中实现滚动计算以生成GARCH模型的sigma_forecast列
Tidyverse框架下递推计算波动率序列的实现方案
这种依赖上一步输出的迭代计算,直接用tidyverse生态中purrr包的accumulate()函数即可实现,不需要写循环,代码简洁易维护。
前置准备
首先加载tidyverse包:
library(tidyverse)
提前确认你的数据集已生成r2_lag_1列,且首行的sigma2为你预先计算好的初始波动率值。
核心实现代码
假设你的数据集名为vol_df,计算sigma_forecast列的代码如下:
vol_df <- vol_df %>% mutate( sigma_forecast = accumulate( # 遍历r2_lag_1列的所有值 .x = r2_lag_1, # 迭代计算逻辑:prev_sigma为上一步的sigma_forecast结果,current_r2为当前行的r2_lag_1值 .f = \(prev_sigma, current_r2) { # 适配滞后列首行是NA的常规情况 if(is.na(current_r2)) return(prev_sigma) 0.96 * prev_sigma + 0.04 * current_r2 }, # 指定初始值:第一个sigma_forecast取首行的sigma2 .init = first(sigma2) ) %>% # 去掉accumulate多生成的最后一个冗余值,保证长度和原数据集行数一致 head(-1) )
逻辑验证
以你给出的计算规则为例,验证计算结果:
- 第一行sigma_forecast = 初始值sigma2,符合规则要求
- 第二行sigma_forecast = 0.96第一行结果 + 0.04第二行r2_lag_1,符合规则
- 第三行及之后的所有值都自动基于上一行结果迭代计算,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Jacy
相关产品推荐
相关产品推荐

