2009-12-28 33 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 

所以要小心。