rtime-seriespanel-dataplm

Generating a lagged time series cross sectional variable in R


I am a new R user. I have a time series cross-sectional dataset and, although I have found ways to lag time series data in R, I have not found a way to create lagged time-series cross-sectional variables so that I can use them in my analysis.


Solution

  • Here's how you could use the lag() function with zoo (and panel series data):

    > 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
    

    Lag forward by 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 backward by 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
    

    As Dirk mentioned, be careful with the meaning of lag in the different time series packages. Notice how xts treats this differently:

    > 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