在R中生成滞后时间序列交叉变量

4

我是一个新的R语言用户。我有一个时间序列横截面数据集,虽然我已经找到了在R中对时间序列数据进行滞后处理的方法,但我还没有找到一种创建滞后时间序列横截面变量的方法,以便我可以在我的分析中使用它们。

2个回答

4

以下是如何在使用zoo(和面板数据)的情况下使用lag()函数:

> 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

向后滞后1个时间点:

> 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的处理方式与众不同:

> 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

只需注意lap运算符的含义即可:请注意‘k’的符号:一个由正‘k’滞后的系列将在时间上向_早期_移动。 - Dirk Eddelbuettel
这个问题涉及到横截面时间序列(又称为面板)数据。据我所知,由于时间观测的重复,zoo无法处理这种类型的数据。 - Eduardo Leoni

4

对于横断面时间序列数据,plm软件包非常有用。它具有考虑数据面板特性的滞后函数。

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(或within或transform)会得到错误的答案。

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

所以要小心。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接