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

如何在R中按滑动窗口循环执行线性回归提取系数?

滚动窗口线性回归代码调整方案

原代码存在的问题

  • 循环边界错误:窗口大小为20行时,i的最大取值应为总数据行数减19,否则当i接近末尾时,i:(i+20)会超出数据集行索引范围,同时i:(i+20)本身会取到21行数据,和需求的20行窗口不符
  • 变量选取错误:需求的因变量是第一列的Streamflow,原代码错误取了第二列作为y;且需求的自变量包含x1-x4四个变量,原代码仅选取了x1、x2两个变量
  • 系数存储结构错误:lm()返回的系数包含截距+4个自变量共5个值,原代码用一维向量mod_coef[i]无法存储多列系数结果

修正后的代码

# 预定义存储系数的矩阵,每一行对应一个窗口的系数:截距、x1、x2、x3、x4
window_size <- 20
max_i <- nrow(CFbasin) - window_size + 1
mod_coef <- matrix(NA, nrow = max_i, ncol = 5, dimnames = list(NULL, c("intercept", "x1", "x2", "x3", "x4")))

for(i in 1:max_i) {
  # 取当前窗口的20行数据
  window_data <- CFbasin[i:(i + window_size - 1), ]
  # 拟合指定线性模型
  mod <- lm(Streamflow ~ x1 + x2 + x3 + x4, data = window_data)
  # 保存系数
  mod_coef[i, ] <- coef(mod)
}

补充说明

如果需要提升运行效率,可以用rollRegres包的roll_regres()函数替代for循环实现向量化计算,避免循环带来的性能损耗。

内容的提问来源于stack exchange,提问作者Rua Jing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:01