这是一个非常简单的问题,但我一直没有找到确定的答案,所以我想问一下。我使用
示例代码:
plm
包来处理面板数据。我尝试使用 lag
函数将变量向前滞后(默认情况下,获取上一时期的值,我需要下一时期的值)。我发现许多旧的文章/问题(约2009年)表明可以通过使用 k=-1
作为参数来实现这一点。然而,当我尝试这样做时,出现了错误。示例代码:
library(plm)
df<-as.data.frame(matrix(c(1,1,1,2,2,3,20101231,20111231,20121231,20111231,20121231,20121231,50,60,70,120,130,210),nrow=6,ncol=3))
names(df)<-c("individual","date","data")
df$date<-as.Date(as.character(df$date),format="%Y%m%d")
df.plm<-pdata.frame(df,index=c("individual","date"))
延迟:
lag(df.plm$data,0)
##returns
1-2010-12-31 1-2011-12-31 1-2012-12-31 2-2011-12-31 2-2012-12-31 3-2012-12-31
50 60 70 120 130 210
lag(df.plm$data,1)
##returns
1-2010-12-31 1-2011-12-31 1-2012-12-31 2-2011-12-31 2-2012-12-31 3-2012-12-31
NA 50 60 NA 120 NA
lag(df.plm$data,-1)
##returns
Error in rep(1, ak) : invalid 'times' argument
我还看到过一些关于 plm.data
在 plm
的某些应用中替代了 pdata.frame
的文章。然而,plm.data
与 lag
函数似乎完全无法配合使用:
df.plm<-plm.data(df,indexes=c("individual","date"))
lag(df.plm$data,1)
##returns
[1] 50 60 70 120 130 210
attr(,"tsp")
[1] 0 5 1
我需要帮助。如果有人对用于滞后的软件包有其他建议,我非常乐意听取。然而,我很喜欢plm
,因为它可以自动处理多个个体间的滞后,并跳过时间序列中的空白。
lag
是 stats 包中的通用程序,因此相关代码将是plm:::lag.pseries
,它可能没有编写来处理k
的负值。 - GSeelag.pseries
的第二个参数被分配为 "k",因此您应该尝试命名您的 'lag' 参数(而 k 将默认为 1)。 - IRTFMlag(df.plm$data,k=-1
))会导致相同的错误。 GSee - 看起来k
可以是任何值,但函数确实使用向量的长度,所以你可能是正确的。 - Matt