【发布时间】: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