R语言使用group_by分组后如何批量执行后续全部操作
R语言group_by分组后批量执行建模回测流程的实现方案
你现有代码的核心问题是动态分组变量的传递写法有误,且for循环的存储方式不便于结果统一管理,优化方案如下:
核心修正点
- 原代码中
group_by((.[a[i]]))的动态传参写法错误,无法正确识别分组变量,应该用dplyr提供的.data[[变量名]]语法做动态变量引用 - 原代码拆分样本后调用
BacktestVaR(OutSampleData[[i]], VaR, alpha)写法有误,OutSampleData已经是当前分组的数值向量,不需要加[[i]]索引 - 建议用tidyverse的map族函数替代for循环,所有分组的处理结果可以统一存储,后续汇总分析更便捷
优化后的完整实现代码
library(tidyverse) library(GAS) # 定义分组变量列表与全局参数 group_vars <- c("w","api","oc","fc","fc2","cov","OPEC") alpha <- 0.05 # 批量遍历所有分组变量执行全流程 result_list <- map(group_vars, function(current_var){ # 按当前变量分组提取目标列 daytime <- r_new %>% group_by(.data[[current_var]]) %>% pull(r_daytime) %>% as.numeric() %>% as.matrix() # 样本拆分 InSampleData <- daytime[1:3100] OutSampleData <- daytime[3100:3853] # 建模-预测-回测 Fit <- UniGASFit(GASSpec, InSampleData) Forecast <- UniGASFor(Fit, Roll = TRUE, out = OutSampleData) VaR <- quantile(Forecast, alpha) BackTest <- BacktestVaR(OutSampleData, VaR, alpha) # 返回所有需要的结果,可根据需求增减返回字段 return(list( group_var = current_var, fit_model = Fit, var_value = VaR, backtest_result = BackTest )) }) # 批量打印所有分组的回测结果 walk(result_list, ~ print(.x$backtest_result))
额外使用提示
所有分组的处理结果都存储在result_list列表中,后续可直接批量提取指标汇总,比如提取所有分组的无条件覆盖率LR检验p值:
map_dbl(result_list, ~ .x$backtest_result$LRuc$p.value)
内容的提问来源于stack exchange,提问作者TAT
相关产品推荐
相关产品推荐

