在R中为各行业分组执行5年期滚动回归的技术求助
按行业执行5年滚动窗口线性回归解决方案
步骤1:准备环境与数据
首先确保数据按行业和年份排序,避免窗口时间错位。以下是模拟的示例数据(可替换为你的实际dput输出):
# 示例数据(替换为你的dput输出) df <- structure(list( industry = rep(c("A", "B", "C"), each = 11), year = rep(2000:2010, 3), industry_sales = rnorm(33, 100, 10) ), class = "data.frame", row.names = c(NA, -33L))
安装并加载所需工具包:
install.packages(c("dplyr", "slider", "broom")) library(dplyr) library(slider) library(broom)
步骤2:核心滚动回归代码
按行业分组,执行5年滚动窗口的线性回归(仅保留完整5年窗口的结果):
rolling_reg_results <- df %>% arrange(industry, year) %>% # 强制按行业+年份排序,保证时间序列顺序 group_by(industry) %>% slide_dfr( .f = function(window_data) { # 仅当窗口包含5个观测值时运行回归 if(nrow(window_data) == 5) { model <- lm(industry_sales ~ year, data = window_data) # 提取回归统计量,同时标记窗口起止年份 tidy(model) %>% mutate( window_start = min(window_data$year), window_end = max(window_data$year), industry = first(window_data$industry) ) } }, .before = 4, # 窗口包含当前行+前4行,共5年数据 .complete = TRUE # 只返回完整窗口的结果 ) %>% ungroup()
步骤3:查看与使用结果
输出回归结果,包含每个窗口的系数、p值、窗口时间范围和行业:
# 打印结果 print(rolling_reg_results) # 若需筛选特定行业或系数,例如提取行业A的year系数: filter(rolling_reg_results, industry == "A", term == "year")
常见问题排查
若之前代码失败,大概率是以下原因:
- 数据未按年份排序,导致窗口时间混乱
- 窗口设置错误(比如未限定完整5年样本)
- 未按行业分组,导致跨行业混合回归
- 数据存在缺失年份,需先补全或处理缺失值
内容的提问来源于stack exchange,提问作者fsure
相关产品推荐
相关产品推荐

