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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:55:27