Gerando uma variável transversal de série temporal defasada em R
-
21-09-2019 - |
Pergunta
Eu sou um novo usuário R.Eu tenho um conjunto de dados de seção transversal de série temporal e, embora tenha encontrado maneiras de atrasar os dados de série temporal em R, não encontrei uma maneira de criar variáveis de seção transversal de série temporal defasadas para que eu possa usá-las em minha análise.
Solução
Veja como você pode usar o lag()
função com zoo
(e dados da série do painel):
> 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
Atraso em 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
Atraso para trás em 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
Como Dirk mencionou, tome cuidado com o significado do atraso nos diferentes pacotes de séries temporais.Note como xts
trata isso de forma diferente:
> 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
Outras dicas
Para dados transversais de séries temporais, o pacote por favor é muito útil.Possui uma função de atraso que leva em consideração a natureza do painel dos dados.
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
Um problema com o pacote é que usar with (ou inside ou transform) fornece a resposta errada.
head(with(dnow, lag(pcap,1)))
15032.67 15501.94 15972.41 16406.26 16762.67 17316.26
Por isso tem cuidado.