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

面板数据集与R语言滚动窗口回归实现问题

面板数据分组滚动窗口回归实现

需求说明

针对面板数据中的每个国家,执行4年滚动窗口回归:以连续4年为窗口,将log_gdp对窗口内的相对时间索引T_i=[1,2,3,4](而非原始年份)进行回归,提取回归的斜率系数,最终将所有系数存入原数据集的新列roll_beta中。每个国家的窗口依次为2000-2003、2001-2004…直到2006-2009,窗口不足4个有效观测时返回NA。

示例数据集

set.seed(123)

x=c(NA,NA,NA,5.1,5.2,5.3,5.15,4.9,5,5.01)
df=data.frame(country = c(replicate(10,"Germany"),replicate(10, "USA"),replicate(10,"Zimbabwe ")),
              year=c(replicate(3,2000:2009)),
              log_gdp=c(sample(runif(10,9.8,10.7)),sample(runif(10,11,12)),x))

原尝试代码

library(zoo)
rollapply(zoo(df),
      width=4,
      FUN = function(Z) 
      { 
        t = lm(formula=log_gdp~year, data = as.data.frame(Z), na.rm=T); 
        return(t$coef) 
      },
      by.column=FALSE, align="right") 

问题分析

原代码存在几个关键问题:

  • 未按country分组,导致跨国家计算滚动窗口,不符合面板数据的分析逻辑
  • 回归使用原始year变量,而非需求中的窗口内相对时间索引T_i
  • lm函数的na.rm=T参数无效,无法正确处理窗口内的缺失值
  • 返回截距+斜率两个系数,未提取所需的单一斜率,且结果无法直接匹配原数据集的行数

修正后的解决方案

方案1:使用dplyr + slider(语法直观,推荐)

library(dplyr)
library(slider)

# 分组执行滚动窗口回归
df_result <- df %>%
  group_by(country) %>%
  mutate(
    roll_beta = slide_dbl(
      .x = log_gdp,
      .f = function(window_vals) {
        # 窗口内有效观测不足4个时返回NA
        if(sum(!is.na(window_vals)) < 4) return(NA_real_)
        # 创建窗口内的相对时间索引T_i=1-4
        t_i = 1:length(window_vals)
        # 拟合回归并提取斜率系数
        coef(lm(window_vals ~ t_i))[["t_i"]]
      },
      .before = 3,  # 窗口包含当前行及前3行,共4个观测
      .complete = TRUE  # 仅返回完整窗口的计算结果
    )
  ) %>%
  ungroup()

# 查看结果
print(df_result)

方案2:使用dplyr + zoo(兼容原工具链)

library(zoo)
library(dplyr)

df_result_zoo <- df %>%
  group_by(country) %>%
  mutate(
    roll_beta = rollapply(
      data = log_gdp,
      width = 4,
      FUN = function(window_vals) {
        if(sum(!is.na(window_vals)) < 4) return(NA_real_)
        t_i = 1:4
        # 提取斜率系数(第2个回归系数)
        coef(lm(window_vals ~ t_i))[2]
      },
      align = "right",  # 窗口结束于当前行
      fill = NA  # 不完整窗口填充NA
    )
  ) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:10:29