如何在R中循环使用lm函数?获取滚动回归系数向量
滚动窗口线性回归实现(R语言)
专业术语说明
这种回归方法的专业名称是滚动窗口回归(Rolling Window Regression),属于时变参数分析范畴,核心是通过固定大小的滑动窗口遍历数据集,逐窗口拟合模型以捕捉参数随时间的动态变化,常见于时间序列分析场景。
可复现解决方案
步骤1:生成基础数据
沿用你提供的随机数据生成代码:
set.seed(12345) a <- rnorm(852) b <- rnorm(852)
步骤2:基础R循环实现
用循环完成滑动窗口拟合,直接生成包含801个回归系数的向量:
# 定义窗口大小与总窗口数 window_size <- 52 total_windows <- length(a) - window_size + 1 # 初始化系数存储向量 coef_vector <- numeric(total_windows) # 滚动拟合并提取系数 for(i in 1:total_windows){ # 截取当前窗口的数据集 current_a <- a[i:(i + window_size - 1)] current_b <- b[i:(i + window_size - 1)] # 拟合线性回归 fit <- lm(current_a ~ current_b) # 提取自变量b的回归系数(第二个系数,第一个为截距) coef_vector[i] <- coef(fit)[2] } # 查看前5个系数示例 head(coef_vector)
步骤3:简洁函数式实现(purrr包版本)
若偏好函数式编程,可借助purrr包简化代码:
library(purrr) window_size <- 52 total_windows <- length(a) - window_size + 1 # 批量处理窗口并提取系数 coef_vector <- map_dbl(1:total_windows, function(i){ window_data <- data.frame(a = a[i:(i+window_size-1)], b = b[i:(i+window_size-1)]) coef(lm(a ~ b, data = window_data))[2] })
执行后,coef_vector即为包含全部801次回归中自变量b的系数的向量。
内容的提问来源于stack exchange,提问作者ToniNA
相关产品推荐
相关产品推荐

