r - 在 plm 数据框中创建滞后、超前和差异变量

标签 r plm

我正在尝试使用滞后变量、领先变量和差异变量进行一些面板分析。但是,plm 函数无法提供所需的结果,因为它不会循环遍历个体。我在网上查看过,但是使用 pdata.frame() 的以下帖子( Answer_Stack )给出了相同的有问题的结果。当我在dplyrgroup_by(i)时,我得到了想要的结果。谁能解释一下这是怎么回事?

# Variables
i <- c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7)
t <- c(2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003)
y <- c(0.047136, 0.044581, 0.040973, 0.045536, 0.043952, 0.038797, 0.049942, 0.047440, 0.042193, 0.048503, 0.046816, 0.040292, 0.056089, 0.052054, 0.047078, 0.044223, 0.041516, 0.036947, 0.045608, 0.042028, 0.037878)
x <- c(0.32691, 0.33013, 0.32888, 0.40301, 0.40337, 0.40326, 0.29692, 0.29982, 0.29790, 0.30380, 0.30698, 0.30668, 0.27942, 0.28696, 0.28616, 0.31218, 0.31424, 0.31382, 0.34592, 0.34738, 0.34782)

# Create plm dataframe
dta <- data.frame(i, t, y, x)
pdta <- plm.data(dta, indexes = c("i", "t"))

# Create lagged variable with plm
pdta$l.x <- lag(pdta$x)             # Does not work

# Create using dplyr
pdta <- pdta %>%
  group_by(i) %>%
  mutate(lag.x = lag(x))

View(pdta)

回答注意事项:即使按照建议的步骤进行操作,我也得到了这个:

> pdta <- pdata.frame(dta, index= c("i", "t"))
    > head(cbind(pdta$i, pdta$y, lag(pdta$y)), 10)
           [,1]     [,2]     [,3]
    1-2001    1 0.047136       NA
    1-2002    1 0.044581 0.047136
    1-2003    1 0.040973 0.044581
    2-2001    2 0.045536 0.040973
    2-2002    2 0.043952 0.045536
    2-2003    2 0.038797 0.043952
    3-2001    3 0.049942 0.038797
    3-2002    3 0.047440 0.049942
    3-2003    3 0.042193 0.047440
    4-2001    4 0.048503 0.042193

最佳答案

一方面,您没有使用正确的函数将 data.frame 转换为 pdata.frame。 plm.data返回一个可以直接在估计器函数中使用的 data.frame,但不能直接适用于数据转换函数。使用pdata.frame相反:

pdta <- pdata.frame(dta, index= c("i", "t"))

然后给lag尝试一下:

head(cbind(pdta$i, pdta$y, lag(pdta$y)), 10)
       [,1]     [,2]     [,3]
1-2001    1 0.047136       NA
1-2002    1 0.044581 0.047136
1-2003    1 0.040973 0.044581
2-2001    2 0.045536       NA
2-2002    2 0.043952 0.045536
2-2003    2 0.038797 0.043952
3-2001    3 0.049942       NA
3-2002    3 0.047440 0.049942
3-2003    3 0.042193 0.047440
4-2001    4 0.048503       NA

或者,你也可以这样做

pdta <- pdata.frame(plm.data(dta, indexes= c("i", "t")))

第二,正如我们在评论中指出的,正在加载 dplyr “覆盖”(屏蔽)许多基本 R 函数,包括您提到的函数。 plm基于这些基本 R 函数构建,以对其 pdata.frame 对象执行所需的操作。正如 helix123 提到的,即使有 dplyr已加载,可以引用plm使用 plm::<function name> 实现.

关于r - 在 plm 数据框中创建滞后、超前和差异变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604591/

相关文章:

R SQLite 在使用 COUNT 时将 char 转换为数字

r - 防止在ggplot2中居中多层标题

r - R 中的固定效应回归(具有大量虚拟变量)

R coxph() 警告 : Loglik converged before variable

r - 字符串不是标准的明确格式

r - 如何反转 ggplot2 的默认调色板

r - 使用用户提供的协方差矩阵计算 F 统计量

r - 如何针对某些特定值对面板数据回归系数执行联合 Wald 检验?

R - Plm 和 lm - 固定效果

R plm lag - 什么相当于 Stata 中的 L1.x?