You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言循环优化:NZDUSD与多证券时间序列线性回归

时间序列回归代码优化方案

需求说明

  • 以nzdusd为因变量,分别与spx、adxy、vix三个自变量执行时间序列线性回归,获取每个回归的R²值
  • 原代码仅针对spx实现了完整逻辑(含60天滑动窗口、收益率转换、回归计算),需通过循环重构代码,消除重复复制变量名的冗余操作,支持后续快速添加更多自变量
  • 保留原代码的核心计算逻辑,确保结果一致性

优化后代码

library(tseries)
library(lmtest)
library(dplyr)
library(lubridate)

# 配置参数:60天时间窗口
window_days <- 60

# 加载数据(修正原代码路径语法错误)
my_path <- file.path("K:", "X", "bbg_daily.Rdata")
load(file = my_path)

# 处理因变量nzdusd的收益率
pct_nzdusd <- nzdusd %>%
  select(date, PX_LAST) %>%
  mutate(
    lag_price = lag(PX_LAST),
    pct_chg = (PX_LAST - lag_price) * 100 / lag_price
  ) %>%
  select(date, pct_chg) %>%
  drop_na()  # 移除缺失值(lag后第一行缺失)

# 定义单个自变量的回归处理函数
run_regression <- function(var_name) {
  # 获取对应的数据框
  var_data <- get(var_name)
  
  # 处理自变量收益率
  pct_var <- var_data %>%
    select(date, PX_LAST) %>%
    mutate(
      lag_price = lag(PX_LAST),
      pct_chg = (PX_LAST - lag_price) * 100 / lag_price
    ) %>%
    select(date, pct_chg) %>%
    drop_na()
  
  # 合并因变量和自变量的收益率数据
  combined_ts <- inner_join(pct_nzdusd, pct_var, by = "date")
  
  # 截取最后60天的窗口数据
  start_idx <- nrow(combined_ts) - window_days + 1
  ts_sub <- combined_ts[start_idx:nrow(combined_ts), ]
  
  # 执行回归
  reg_model <- lm(pct_chg.x ~ pct_chg.y, data = ts_sub)
  
  # 提取结果
  r2 <- summary(reg_model)$r.squared
  stderr <- sqrt(deviance(reg_model)/df.residual(reg_model))
  
  # 返回结果列表
  return(list(
    variable = var_name,
    r_squared = r2,
    standard_error = stderr
  ))
}

# 定义需要处理的自变量列表(后续添加新变量直接修改此处)
independent_vars <- c("spx", "adxy", "vix")

# 循环执行所有回归并收集结果
reg_results <- lapply(independent_vars, run_regression)
reg_results_df <- bind_rows(reg_results)

# 查看结果
print(reg_results_df)

# 保存结果到指定路径
save_path <- file.path("K:", "x", "regression_results.Rdata")
save(reg_results_df, file = save_path)

代码优化说明

  1. 消除冗余代码:将重复的收益率转换、窗口截取、回归计算逻辑封装为run_regression函数,避免重复复制变量名
  2. 灵活扩展:只需修改independent_vars向量即可添加新的自变量,无需修改核心逻辑
  3. 规范数据处理:添加drop_na()移除收益率计算后的缺失值,避免回归报错;用数据框统一存储结果,便于后续分析和查看
  4. 修正原代码问题:修复了原代码中路径字符串的语法错误,移除了不必要的assign操作(R中不推荐使用assign动态创建变量,易导致代码混乱)

内容的提问来源于stack exchange,提问作者Niall Healy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:00:51