如何在R中整理10天时间窗口时序数据并构建滚动回归模型
解决方案
实现逻辑
- 首先预处理数据集,提取日期对应的年、月、日维度字段,方便按固定日期区间跨年份筛选样本
- 遍历所有10天窗口的起始日期,每次拉取2002-2012年所有对应日期区间的样本
- 批量拟合回归模型,将所有窗口的建模结果统一存储为结构化表格,方便后续分析调用
完整代码
首先加载依赖包并预处理数据:
library(tidyverse) library(lubridate) # 预处理数据:转换日期格式,拆分年/月/日字段 CFbasin <- CFbasin %>% # 如果你的日期列实际名为Data,把下面的Date替换为Data即可 mutate(Date = ymd(Date), month = month(Date), day = day(Date), year = year(Date))
然后批量滑动窗口建模:
# 生成所有窗口的起始日(只需匹配月日,年份可随便填) window_starts <- seq.Date(ymd("2023-10-04"), ymd("2023-10-19"), by = "1 day") # 批量执行窗口筛选+回归建模 reg_results <- map_dfr(window_starts, function(start) { # 计算当前窗口的结束日(10天窗口) end <- start + days(9) # 跨年份筛选当前窗口对应日期的所有样本 window_data <- CFbasin %>% filter(month == 10, day >= day(start), day <= day(end)) # 拟合线性回归,此处以Qkl为因变量为例,可根据需求修改回归公式 model <- lm(Qkl ~ Qllt + Qhaw + Qdp + Qlit, data = window_data) # 整理返回需要的建模结果,可按需增减字段 tibble( window_range = paste0(month(start), "月", day(start), "日-", month(end), "月", day(end), "日"), sample_count = nrow(window_data), r_squared = summary(model)$r.squared, adj_r_squared = summary(model)$adj.r.squared, full_model = list(model) # 存储完整模型对象,可后续调用做预测、显著性检验等 ) })
结果说明
最终生成的reg_results是结构化表格,每一行对应一个滑动窗口的建模结果:
- 要查看单个窗口的模型详情,直接调用对应行的
full_model即可,比如summary(reg_results$full_model[[1]])即可查看第一个窗口的回归结果 - 如果需要处理缺失值,可在
lm()函数中添加na.action参数配置缺失值处理规则
内容的提问来源于stack exchange,提问作者Rua Jing
相关产品推荐
相关产品推荐

