2017-10-06 123 views
0

我正在尝试使用滞后,领先和差异变量进行一些面板分析。然而,plm函数不提供所需的结果,因为它不会循环遍历个人。我已经在网上查看,但是下面的帖子(Answer_Stack),使用pdata.frame()给出了同样有问题的结果。当我group_by(i)dplyr我得到所需的结果。任何人都可以解释发生了什么?在plm数据框中创建滞后,领先和差异变量

# 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 
+0

正如你所看到的,它适用于我。我建议你更新你的软件包作为第一遍。我刚安装了'plm',所以我有最新版本。如果你有最新版本,第二种可能是你在加载'plm'后加载'dplyr'。 'dplyr'有它自己的'lag'函数,它覆盖了R的''lag'函数。 'plm'使用基本R的滞后函数,因此加载'dplyr'会破坏这个功能。 – lmo

回答

1

一件事,你不使用正确的函数的data.frame转换为PDATA。帧。 plm.data返回一个数据帧,它可以直接用于估计函数,但不直接适用于数据转换函数。使用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::<function name>参考plm实现。

+0

我编辑了我的问题,但即使在执行了以下步骤后,我仍然得到错误的延迟 – Gooze

+0

尝试使用新的R会话运行代码。不要加载'dplyr'。 – lmo

+1

你上面的评论似乎解决了具体问题,所以不要加载dplyr并重新安装plm。我认为它可能导致它与dplyr的问题!谢谢! – Gooze