我想使用 R 中的面板局部投影方法,使用“lpirfs”包,特别是“lp_lin_panel()”命令。但是,我怀疑我的冲击是内生的,因此我想创建一个包含冲击滞后值的新列。
我给出了一个包含 plm 包中的“Parity”数据的示例:
require(lpirfs)
require(dplyr)
require(plm)
data("Parity")
View(Parity)
p <- Parity %>% dplyr::select(country, time, everything())
lp_panel <- lp_lin_panel(p,
endog_data="lp",
shock="is",
diff_shock=F,
confint=1.96,
hor=10,
cumul_mult=T,
c_exog_data="ls",
l_exog_data=c("ls", "lp"),
lags_exog_data=1,
panel_model="within", panel_effect = "individual")
plot(lp_panel)
该代码有效。但是,假设我想创建一个新列,其滞后值是(diff() 函数也会出现同样的问题!):
pp <- p %>%
mutate(lagged_is = lag(is))
当我检查数据库时,新列与原始列完全相同。如果我想添加 is (或任何其他列)的差分值,我会收到以下错误:
“
mutate()
中的错误:
!计算时出现问题lagged_is = diff(is)
。
x lagged_is
的尺寸必须为 1768 或 1,而不是 1767。”
那么有没有一种方法可以使用面板数据集中变量的差异/滞后值创建一个新列,最简单的方法是什么(我一直在考虑它,所有解决方案都很长,只要我需要重新创建一个数据集并撤回第一列,以便从长到宽......)?
我终于找到答案了,其实很简单! lag() 函数存在于许多包中,包括基础 R 中。dplyr 中的 lag() 函数是这里最有效的函数。另外,考虑到我有一个面板数据集,我必须在添加滞后之前按国家/地区进行分组,因此最终(工作)代码如下:
pp <- p %>%
group_by(country) %>%
mutate(lagged_is <- dplyr::lag(is))