Momento R do Dia – Exercício do Enders, cap.6 (Cointegração)

Meu monitor, Victor, sempre me pede por exercícios para mostrar aos dois alunos que frequentam suas sessões (eventualmente, este número sobe para uns dez, mas só em época de prova).

Eis um Momento R do Dia para ele e todos os que, como ele, desejam usar o R para resolver seus problemas de aprendizado. Pegue-se o livro-texto de Walter Enders (a segunda edição), no capítulo 6, exercício 4.

Abriu o livro? Então, prepare-se pois, com este “script”, você terá o exercício mais completo que já vi para estudar um pouco de Cointegração. Claro, algumas coisas ficaram de fora, mas aí é pedir muito, né?

Pronto? Bom trabalho.

# Exemplo de Engle-Granger e Johansen (Enders, 2nd ed. p.374-5, ex.4)
# A base de dados deve ser importada de: 
# http://bcs.wiley.com/he-bcs/Books?action=resource&bcsId=1660&itemId=0471230650&resourceId=1957&chapterId=6746
# planilha: int_rates.xls (transforme para csv)
# importe como achar melhor. Abaixo como eu fiz.

enders<-read.table("C:/Users/cdshi_000/Documents/Meus Documentos/Meus Documentos/cursos/Econometria II/int_rates.csv", 
                   header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)
head(enders)
tail(enders)

library(urca)
summary(ur.df(enders$tbill, type=c("drift"), lags=12, selectlags=("Fixed")))
summary(ur.df(enders$r3, type=c("drift"), lags=12, selectlags=("Fixed")))
summary(ur.df(enders$r10, type=c("drift"), lags=12, selectlags=("Fixed")))

# vamos passar para formato ts

enders<-ts(enders, start=c(1954,7), freq=12)
plot(enders)

# por conveniencia de sintaxe, dynlm

library(dynlm)

summary(dynlm(tbill~r3+r10, data=enders))

reg1<-dynlm(tbill~r3+r10, data=enders)

# Teste de Engle-Granger sobre resíduos (tabela em Gujarati)

res<-reg1$residuals
y<-res
plot(y)

summary(dynlm(d(y)~L(y,1)+L(d(y),1)+L(d(y),2)+L(d(y),3)+L(d(y),4)+L(d(y),5)+L(d(y),6)+
                L(d(y),7)+L(d(y),8)+L(d(y),9)))

# Item c do exercicio: a idéia é alterar a variável dependente da equação.
# O autor pretende discutir...(pense enquanto relembra quando leu o exercício completo
# antes de começá-lo).

reg2<-dynlm(r10~tbill+r3, data=enders)

# Teste de Engle-Granger sobre resíduos (tabela em Gujarati)

res<-reg2$residuals
y1<-res
plot(y1)

# com 4 
summary(dynlm(d(y1)~L(y1,1)+L(d(y1),1)+L(d(y1),2)+L(d(y1),3)+L(d(y1),4)))

# com 12
summary(dynlm(d(y1)~L(y1,1)+L(d(y1),1)+L(d(y1),2)+L(d(y1),3)+L(d(y1),4)+L(d(y1),5)+L(d(y1),6)+
                L(d(y1),7)+L(d(y1),8)+L(d(y1),9)+L(d(y1),10)+L(d(y1),11)+L(d(y1),12)))

# ou (mesma coisa):

summary(dynlm(d(y1)~L(y1,1)+L(d(y1),c(1,2,3,4,5,6,7,8,9,10,11,12))))

# novamente, tabela de Gujarati. O que aconteceu entre o item b e c? Como você tiraria
# conclusões? (a caminho do método de Johansen...)

# item d
# para este item, ele deseja uma estimação do VECM, ainda sob Engle-Granger. Ele usa 
# (por que?) os resíduos encontrados no item "b". Por que?
# Basta estimar normalmente:
# vou facilitar minha vida primeiro, convertendo os nomes das séries:

head(enders)
tbill<-enders[,c(3)]
r10<-enders[,c(5)]
r3<-enders[,c(6)]


vec1<-(dynlm(d(tbill)~L(y,1)+L(d(tbill),c(1,2,3,4,5,6,7,8,9,10,11,12))+
                L(d(r3),c(1,2,3,4,5,6,7,8,9,10,11,12))+
                L(d(r10),c(1,2,3,4,5,6,7,8,9,10,11,12))))
vec2<-(dynlm(d(r3)~L(y,1)+L(d(tbill),c(1,2,3,4,5,6,7,8,9,10,11,12))+
                L(d(r3),c(1,2,3,4,5,6,7,8,9,10,11,12))+
                L(d(r10),c(1,2,3,4,5,6,7,8,9,10,11,12))))
vec3<-(dynlm(d(r10)~L(y,1)+L(d(tbill),c(1,2,3,4,5,6,7,8,9,10,11,12))+
                L(d(r3),c(1,2,3,4,5,6,7,8,9,10,11,12))+
                L(d(r10),c(1,2,3,4,5,6,7,8,9,10,11,12))))

plot(vec1$residuals)
plot(vec2$residuals)
plot(vec3$residuals)

# O correto é fazer o teste de Engle-Granger nos resíduos, como no item b. 
# Contudo, para não perdermos muito tempo (você faz isso como dever de casa), 
# vejamos os resultados dos testes de Phillips-Perron, o ADF e o KPSS.

library(forecast)

ndiffs(vec1$residuals, test=c("pp"))
ndiffs(vec2$residuals, test=c("pp"))
ndiffs(vec3$residuals, test=c("pp"))

ndiffs(vec1$residuals, test=c("kpss"))
ndiffs(vec2$residuals, test=c("kpss"))
ndiffs(vec3$residuals, test=c("kpss"))

ndiffs(vec1$residuals, test=c("adf"))
ndiffs(vec2$residuals, test=c("adf"))
ndiffs(vec3$residuals, test=c("adf"))

# Apenas em um resultado (usando o KPSS), um dos resíduos parece ser não estacionário. 

# Agora, o item "e". 

library(vars)

# preciso da matriz dos dados, não no formato de série de tempo (é, está escrito isto lá
# na ajuda)
# Não é um problema. Eis uma forma fácil: leia de novo e mude o nome.

enders_matrix<-read.table("C:/Users/cdshi_000/Documents/Meus Documentos/Meus Documentos/cursos/Econometria II/int_rates.csv", 
                   header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)

head(enders_matrix)
# Agora, vamos tirar as duas primeiras colunas. Depois,a quarta.

enders_matrix<-enders_matrix[-c(1,2,4)]

# Confira

head(enders_matrix)

# No comando do R, vamos usar 13 lags ao invés de 12, como pede Enders no enunciado.
# O motivo para isto é simples: o R já sabe que, para estimar o VECM, ele terá que descontar
# uma defasagem (pense nisto um pouco). Repare que teremos exatamente os mesmos resultados.

enders_eigen <- ca.jo(enders_matrix, ecdet = "const", type="eigen", K=13, spec="transitory")
enders_trace <- ca.jo(enders_matrix, ecdet = "const", type="trace", K=13, spec="transitory")

summary(enders_eigen)
summary(enders_trace)

# Aceitando que há uma única relação de cointegração, vamos estimar o VECM sob esta restrição.
# repare que ele já estima com 12 defasagens, como falei anteriormente.

vecm<-cajorls(enders_trace, r=1)
vecm
summary(vecm$rlm)

# Repare que a relação de cointegração é exatamente a que ele pede para checar no item f.
# subitem i: tbill = -0.379 + 1.603R3 - 0.665R10. (veja os resultados acima).
# Veja que acertou todo o exercício conferindo os coeficientes de ajustamento 
# (subitem ii do item f).

# Pronto, você terminou o exercício.

# Caso queira fazer testes de diagnóstico, lembre-se de converter o vec para var primeiro.
# Caso queira ver as funções de resposta ao impulso e/ou a decomposição de variância,
# verifique os comandos adequados no pacote vars.
# dica: http://cran.r-project.org/web/packages/vars/vars.pdf


varzinho<-vec2var(enders_eigen, r=1)

arch.test(varzinho)
normality.test(varzinho)
serial.test(varzinho)

irf(varzinho, impulse = "tbill", response = c("tbill", "r3", "r10"), boot =
      FALSE)

# ou, visualizando...

irf_tbill<-irf(varzinho, impulse = "tbill", response = c("tbill", "r3", "r10"), boot =
      TRUE)

plot(irf_tbill)

# Obviamente, você pode mudar os impulsos e pedir as respostas conforme o que deseja analisar.

# Decompos. de Var.

fevd(varzinho, n.ahead=4)

Anúncios

2 respostas em “Momento R do Dia – Exercício do Enders, cap.6 (Cointegração)

  1. Pingback: Momento R do Dia – Cointegração e Finanças: tão óbvio, né? | De Gustibus Non Est Disputandum

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s