在 R 中面板局部投影的面板数据集中添加具有滞后(或差异)值的列

问题描述 投票:0回答:1

我想使用 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。”

那么有没有一种方法可以使用面板数据集中变量的差异/滞后值创建一个新列,最简单的方法是什么(我一直在考虑它,所有解决方案都很长,只要我需要重新创建一个数据集并撤回第一列,以便从长到宽......)?

r dplyr panel
1个回答
0
投票

我终于找到答案了,其实很简单! lag() 函数存在于许多包中,包括基础 R 中。dplyr 中的 lag() 函数是这里最有效的函数。另外,考虑到我有一个面板数据集,我必须在添加滞后之前按国家/地区进行分组,因此最终(工作)代码如下:

pp <- p %>%
 group_by(country) %>%
 mutate(lagged_is <- dplyr::lag(is))
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.