【问题标题】:Duplicate Vector in Rolling Manner in RR中滚动方式的重复向量
【发布时间】:2019-05-08 12:28:27
【问题描述】:

假设我想运行一个回归,其中 DV 的数据输入应该以滚动方式获取。为了简化这个过程,我首先想“复制”那个向量,从而相应地滚动观察结果。例如,请参见下面的数据结构。

# libraries #
library(dplyr)

# reproducible data # 
df1 <- tibble(ID = as.factor(rep(c(1, 2), each = 40)),
              YEAR = rep(rep(c(2001:2010), each = 4), 2),
              QTR = rep(c(1:4), 20),
              DV = rnorm(80))

df2 <- tibble(ID = as.factor(rep(c(1, 2), each = 120)),
              YEAR = rep(rep(c(2005:2010), each = 20), 2),
              IV = rnorm(240))

数据结构如此的原因是因为 df2 中的数据是早期执行回归的残差,同样使用了"rolling" data。

然后,目标是运行一个模型,从而“滚动” df1 中的观察结果:

  • 回归 1:DV = df1 中的第 1-20 行,IV = df2 中的第 1-20 行
  • 回归 2:DV = df1 中的第 5-25 行,IV = df2 中的第 21-40 行
  • 回归 3:DV = df1 中的第 10-30 行,IV = df2 中的第 41-60 行
  • 等等

我解决这个问题的方法是尝试以滚动方式“复制”df1,以便更容易执行回归。

目前我尝试通过 base 包中的函数 embed() 滚动它,但这很快就变得一团糟,因为我的真实数据集要大得多。会有优雅的 dplyr 替代方案吗?

谢谢!

【问题讨论】:

    标签: r vector regression rolling-computation


    【解决方案1】:

    我们可以使用

    v1 <- c(1, seq(5, nrow(df1), by = 4))
    v2 <- seq(20, nrow(df1), by = 4)
    i1 <- seq_len(min(c(length(v1), length(v2))))
    lst1 <- map2(v1[i1], v2[i1], ~ df1 %>% 
                               slice(.x:.y))
    

    同样,使用 'df2' 执行此操作

    v11 <- seq(1, nrow(df2), by = 20)
    v22 <- seq(20, nrow(df2), by = 20)
    i2 <- seq_len(min(c(length(v11), length(v22))))
    lst2 <- map2(v11[i2], v22[i2], ~ df2 %>% 
                               slice(.x:.y))
    

    然后使用map2对lists的对应元素应用函数

    更新

    正如 OP 提到的按“ID”分组,一个选项是 group_split 按“ID”,然后使用与上述相同的步骤

    df1 %>%
        group_split(ID) %>% 
        map(~ {
          v1 <- c(1, seq(5, nrow(.x), by = 4))
          v2 <- seq(20, nrow(.), by = 4)
          i1 <- seq_len(min(c(length(v1), length(v2))))
          map2(v1[i1], v2[i1], function(x, y) .x %>%
               slice(x:y))
       })
    

    【讨论】:

    • @Oscar 已修复,i1(查看第 3 行)
    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多