2009-12-28 36 views
4

我是一个新的R用户。我有一个时间序列横截面数据集,尽管我已经找到了在R中滞后时间序列数据的方法,但我还没有找到创建滞后的时间序列横截面变量的方法,以便我可以在我的分析中使用它们。生成滞后时间序列横截面变量R

回答

4

下面是您可以使用lag()函数zoo(与面板系列数据):1

> library(plm) 
> library(zoo) 
> data("Produc") 
> dnow <- pdata.frame(Produc) 
> x.Date <- as.Date(paste(rownames(t(as.matrix(dnow$pcap))), "-01-01", sep="")) 
> x <- zoo(t(as.matrix(dnow$pcap)), x.Date) 
> x[1:3,1:3] 
      ALABAMA ARIZONA ARKANSAS 
1970-01-01 15032.67 10148.42 7613.26 
1971-01-01 15501.94 10560.54 7982.03 
1972-01-01 15972.41 10977.53 8309.01 

滞后前锋:向后1

> lag(x[1:3,1:3],1) 
      ALABAMA ARIZONA ARKANSAS 
1970-01-01 15501.94 10560.54 7982.03 
1971-01-01 15972.41 10977.53 8309.01 

滞后:

> lag(x[1:3,1:3],k=-1) 
      ALABAMA ARIZONA ARKANSAS 
1971-01-01 15032.67 10148.42 7613.26 
1972-01-01 15501.94 10560.54 7982.03 

正如Dirk所提到的,小心不同时间序列包中滞后的含义年龄。注意如何xts将这种情况是不同的:在封装plm

> lag(as.xts(x[1:3,1:3]),k=1) 
      ALABAMA ARIZONA ARKANSAS 
1970-01-01  NA  NA  NA 
1971-01-01 15032.67 10148.42 7613.26 
1972-01-01 15501.94 10560.54 7982.03 
+0

只要注意圈操作符的含义就是动物园:“注意'k'的符号:一个滞后于正值'k'的序列在时间上偏移_earlier_。 – 2009-12-28 21:06:21

+0

问题是关于横截面时间序列(又名面板)数据。 afaik动物园不处理这种数据(由于重复的时间观察)。 – 2009-12-28 21:30:09

+0

Edwardo:使用您的数据更新为我的示例。 – Shane 2009-12-28 22:35:48

4

对于横截面的时间序列数据是非常有用的。它有一个滞后函数,考虑到数据的面板性质。

library(plm) 
data("Produc", package="plm") 
dnow <- pdata.frame(Produc) 
head(lag(dnow$pcap,1)) 
      ALABAMA-1970 ALABAMA-1971 ALABAMA-1972 ALABAMA-1973 ALABAMA-1974 
      NA  15032.67  15501.94  15972.41  16406.26  16762.67 

该软件包的一个问题是使用with(或in或transform)会给你错误的答案。

head(with(dnow, lag(pcap,1))) 
15032.67 15501.94 15972.41 16406.26 16762.67 17316.26 

所以要小心。