Parte 1: Pacotes Utilizados
Foram utilizados os pacotes fredr, ecoseries, zoo, xts, urca, vars, readxl, stargazer, tsDyn, dplyr, kableExtra, knitr, ggplot2, reshape2 e seastests.
Parte 2: Download e tratamento dos dados
Definem-se as datas de início e fim, abaixo, para o processo de coleta dos dados, de acordo com o enunciado da prova. Todos os dados utilizados são obtidos através de pacotes do próprio R e podem, assim, ser replicados com facilidade para diferentes períodos, bastanto alterar as variáveis “start” e “end”.
Todas as séries foram transformadas em formato xts de forma a facilitar a combinação e padronização das frequências das variáveis e posteriores análises e modelagens. Ademais, foi obtido o log de cada série de forma a torná-las contínuas.
start<-as.Date("2005-01-01")
end<-as.Date("2018-12-31")
Parte 2.1.1: Download do “Crude Oil Prices: Brent - Europe” e do CPI
Para a obtenção desses dados, utilizou-se o pacote fredr, o qual possibilita o downolad de séries disponíveis na base de dados do FRED (Federal Reserve Bank of St. Louis) diretamente através do R. Para tanto, é necessário um cadastro no site e a obtenção de uma API, a qual precisa ser validada antes da obtenção dos dados. Por se tratar de uma informação confidencial, essa parte do código foi ocultada deste script. No entanto, o processo de obtenção da API é simples e imediato.
Em primeiro lugar, obteve-se a base de dados sem ajuste sazonal do preço do petróleo brent, cuja unidade de medida é em Dólares Americanos por barril, com frequência diária. A série é publicada pela U.S. Energy Information Administration e também pode ser acessada através do site do FRED, https://fred.stlouisfed.org/series/DCOILBRENTEU.
oil<-fredr(series_id = "DCOILBRENTEU",
observation_start = start,
observation_end = end)
oil_xts<-xts(log(oil[,3]),order.by=as.Date(oil$date))
names(oil_xts)<-c("OIL")
Também através do pacote fredr, obteve-se a base de dados sem ajuste sazonal do índice acumulado de preços para o consumidor estadunidense (CPI), cuja publicação é mensal e divulgada pelo U.S. Bureau of Labor Statistics e pode ser acessada através do FRED, https://fred.stlouisfed.org/series/CPIAUCNS. Para fins desse trabalho, transformamos os valores em base-100 (janeiro/2005=100).
cpi<-fredr(series_id = "CPIAUCNS",
observation_start = start,
observation_end = end)
j<-cpi$value[1]
cpi$value[1]<-100
for (i in 2:length(cpi$value)) {
cpi$value[i]<-100*(cpi$value[i]/j)
}
cpi_xts<-xts(cpi[,3],order.by=as.Date(cpi$date))
names(cpi_xts)<-c("CPI")
Parte 2.1.2: Download do IPCA, da Taxa de Câmbio Nominal BRL/USD e do Índice de Preços de Commodities"
Para a obtenção desses dados, utilizou-se o pacote BETS, que permite a obtenção de dados do BACEN, IBGE, FGV/IBRE e FGV Data, bastando informar o código da série desejada (consultas à base do BETS podem ser realizadas através da função BETSsearch).
A primeira série obtida é o Índice de Preços para o Consumidor Amplo, sem ajuste sazonal, que mensura a inflação de um conjunto de produtos e serviços comercializados no varejo, referentes ao consumo pessoal das famílias. Os dados, cuja fonte é o IBGE possuem frequência mensal e podem ser consultados através do BCB/SGS. Para fins desse trabalho, transformamos a série em acumulada com base-100 (janeiro/2005=100).
ipca<-BETSget(433,data.frame = TRUE,from=as.character(start),
to=as.character(end))
ipca$value[1]<-100
for (i in 2:length(ipca$value)) {
ipca$value[i]<-ipca$value[i-1]*(1+ipca$value[i]/100)
}
ipca_xts<-xts(ipca[2],order.by = as.Date(ipca$date))
names(ipca_xts)<-c("ipca")
A segunda série obtida através do BETS é o Câmbio Nominal, que mensura o valor do Real em relação ao Dólar Americano, sem ajuste ajustes pela inflação doméstica ou externa e cuja fonte é o Sisbacen. A frequência da série obtida é diária e a mesma pode ser consultada através do BCB/SGS.
cambionom<-BETSget(10813,data.frame = TRUE,from=as.character(start),
to=as.character(end))
cambionom_xts<-xts(cambionom[2],order.by = as.Date(cambionom$date))
names(cambionom_xts)<-c("cambionom")
Em seguida, obreve-se também a série do Índice de Commodities - Brasil (ICBr), publicado mensalmente pelo BCB-Depec. O índice é um indicador de preços de commodites agrícolas, energéticas e metálicas e pode ser obtido através do BCB/SGS.
comindex<-BETSget(27574,data.frame = TRUE,from=as.character(start),
to=as.character(end))
comindex_xts<-xts(log(comindex[2]),order.by = as.Date(comindex$date))
names(comindex_xts)<-c("comindex")
Obteve-se também a série do consumo de energia industrial, mensurada em GWh com frequência mensal e publicada pela Eletrobras. A série pode ser obtida através do BCB/SGS.
enerind<-BETSget(1404,data.frame = TRUE,from=as.character(start),
to=as.character(end))
enerind_xts<-xts(log(enerind[2]),order.by = as.Date(enerind$date))
names(enerind_xts)<-c("enerind")
Parte 2.1.3: Download da série de Transações Correntes/PIB e CDS"
A série de Transações Correntes/PIB e do CDS foram obtidas diretamente através do Terminal Bloomberg e foram importadas para o R através dos códigos abaixo.
transcor <-read_xlsx("C:/Users/lucas/Documents/Mestrado/Macroeconometria/PF/trans.xlsx")
transcor_xts<-xts(transcor[2],order.by = as.Date(enerind$date))
names(transcor_xts)<-c("transcor")
cds <-read.csv("C:/Users/lucas/Documents/Mestrado/Macroeconometria/PF/CDS.csv", sep =";")
cds_xts<-xts(log(cds[2]),order.by = as.Date(enerind$date))
names(cds_xts)<-c("cds")
Parte 2.5: Desenvolvimento da Base de Dados
Fez-se necessário transformar as séries diárias do Preço do Petróleo Brent e do Câmbio Nominal para frequência mensal, valendo-se do valor do fechamento do mês através da função to.monthly do pacote xts.
oil_xts<-to.monthly(oil_xts)[,4]
## Warning in to.period(x, "months", indexAt = indexAt, name = name, ...): missing
## values removed from data
names(oil_xts)<-c("OIL")
cambionom_xts<-to.monthly(cambionom_xts)[,4]
names(cambionom_xts)<-c("cambionom")
Ademais, criou-se a série do ICBr em Dólares Americanos.
comindex_usd_xts<- comindex_xts/cambionom_xts
names(comindex_usd_xts)<- c("comindexUsd")
Por fim, todos os dados foram compilados em uma única base, adicionando-se a ela o câmbio real, obtido através do cálculo demonstrado no código abaixo.
dados<-merge(oil_xts,cambionom_xts,comindex_xts,comindex_usd_xts,enerind_xts,transcor_xts,cds_xts,cpi_xts,ipca_xts)[-1,]
for (i in length(dados)) {
dados$cambioreal<-log(dados$cambionom * dados$CPI/dados$ipca)
}
A tabela abaixo traz uma breve descrição das variáveis que serão utilizadas nas modelagens que serão doravante realizadas:
sumario<-function(x){
c(Início=as.character(start(x)),Fim=as.character(end(x)),
Observações=length(dados),Frequência="Mensal")
}
tabela1<-as.data.frame(sapply(dados,sumario))
knitr::kable(tabela1,caption="Tabela 1: Informações da Base de Dados",digits=3,align="c", format.args = list(big.mark=",",scientific=FALSE)) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width =TRUE,position = "center")
| OIL | cambionom | comindex | comindexUsd | enerind | transcor | cds | CPI | ipca | cambioreal | |
|---|---|---|---|---|---|---|---|---|---|---|
| Início | jan 2005 | jan 2005 | jan 2005 | jan 2005 | jan 2005 | jan 2005 | jan 2005 | jan 2005 | jan 2005 | jan 2005 |
| Fim | dez 2018 | dez 2018 | dez 2018 | dez 2018 | dez 2018 | dez 2018 | dez 2018 | dez 2018 | dez 2018 | dez 2018 |
| Observações | 1680 | 1680 | 1680 | 1680 | 1680 | 1680 | 1680 | 1680 | 1680 | 1680 |
| Frequência | Mensal | Mensal | Mensal | Mensal | Mensal | Mensal | Mensal | Mensal | Mensal | Mensal |
Testes de Sazonalidade
Para inferirmos a existência ou não existência de sazonalidade nas séries, realizaram-se dois testes de sazonalidade através do código abaixo. O primeiro é o Teste-WO de sazonalidade em séries temporais, cuja hipótese nula é a inexistência de sazonalidade. Como o p-valor registrado é praticamente nulo, rejeita-se a hipótese nula e o teste acaba por informar que identificou sazonalidade na série. Foi realizado também o Teste-QS que ao retornar “TRUE”, confirma a existência de sazonalidade na série. Apenas a série de consumo de energia industrial apresentou sazonalidade em ambos os testes. Adotamos como critério que a condição necessária para uma série ser aqui considerada com componente sazonal é tal característica ser confirmada em ambos os testes.
summary(wo(dados$comindexUsd,freq=12))
## Test used: WO
##
## Test statistic: 0
## P-value: 1 1 0.02743551
##
## The WO - test does not identify seasonality
isSeasonal(dados$comindexUsd,test="qs",freq=12)
## [1] FALSE
summary(wo(dados$OIL,freq=12))
## Test used: WO
##
## Test statistic: 0
## P-value: 1 1 0.4811497
##
## The WO - test does not identify seasonality
isSeasonal(dados$OIL,test="qs",freq=12)
## [1] FALSE
summary(wo(dados$cambioreal,freq=12))
## Test used: WO
##
## Test statistic: 0
## P-value: 1 1 0.0365459
##
## The WO - test does not identify seasonality
isSeasonal(dados$cambioreal,test="qs",freq=12)
## [1] FALSE
summary(wo(dados$transcor,freq=12))
## Test used: WO
##
## Test statistic: 0
## P-value: 1 1 0.9948133
##
## The WO - test does not identify seasonality
isSeasonal(dados$transcor,test="qs",freq=12)
## [1] FALSE
summary(wo(dados$cds,freq=12))
## Test used: WO
##
## Test statistic: 0
## P-value: 1 1 0.08558287
##
## The WO - test does not identify seasonality
isSeasonal(dados$cds,test="qs",freq=12)
## [1] FALSE
summary(wo(dados$enerind,freq=12))
## Test used: WO
##
## Test statistic: 1
## P-value: 0 0 3.118616e-12
##
## The WO - test identifies seasonality
isSeasonal(dados$enerind,test="qs",freq=12)
## [1] TRUE
Conforme esperado, apenas o Índice de Consumo de Energia Industrial apresentou evidências significantes de sazonalidade, uma vez que nele é refletido o impacto do clima em diferentes épocas do ano.
Decomposição das Séries
Abaixo, faz-se um estudo da decomposição das séries em tendência, sazonalidade e ruido. Importante notar que nenhuma série apresenta tendência determinística.
x<-dados$comindexUsd
plot(decompose(ts(x,frequency=12)))
x<-dados$OIL
plot(decompose(ts(x,frequency=12)))
x<-dados$cambioreal
plot(decompose(ts(x,frequency=12)))
x<-dados$transcor
plot(decompose(ts(x,frequency=12)))
x<-dados$cds
plot(decompose(ts(x,frequency=12)))
x<-dados$enerind
plot(decompose(ts(x,frequency=12)))
Análise das Dinâmicas das Séries com o ICBR
x<-as.data.frame(cbind(dados$OIL,dados$comindexUsd))
x$date<-enerind$date
x<-melt(x,id="date")
gg1<-ggplot(x,aes(x=date,y=value,colour=variable,group=variable))+
geom_line(size=1.2)+
theme_minimal()+
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
axis.line = element_line(color="black",size=1),
panel.border=element_rect(colour="black",fill=NA,size=0.1),
legend.background = element_blank(),
legend.box.background = element_rect(colour="black",size=1),
strip.text = element_text(size = 16, color = "black"),
axis.title = element_text(color = "black", hjust = 0, face = "italic"),
axis.text = element_text(color = "black"),
plot.title = element_text(face = "bold", size = (10)),
plot.subtitle = element_text(face = "italic", size = (8)))+
labs(y="Log das Variáveis",x="Tempo (anos)",title="Gráfico 1: Log do Preço do Petróleo Brent em USD x Log do ICBr em USD",subtitle = "As dinâmicas das séries são muito parecidas")
gg1
O indice IC_BR apresenta em sua composição o preço do barril de petróleo (referência para o produto brasileiro). Portanto, era esperado que as dinâmicas das duas séries tivessem bastante proximidade. A se atentar ao fato de que no gráfico acima, o índice está em USD, assim como o preço
x<-as.data.frame(cbind(dados$cambioreal,dados$comindexUsd))
x$date<-enerind$date
x<-melt(x,id="date")
gg2<-ggplot(x,aes(x=date,y=value,colour=variable,group=variable))+
geom_line(size=1.2)+
theme_minimal()+
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
axis.line = element_line(color="black",size=1),
panel.border=element_rect(colour="black",fill=NA,size=0.1),
legend.background = element_blank(),
legend.box.background = element_rect(colour="black",size=1),
strip.text = element_text(size = 16, color = "black"),
axis.title = element_text(color = "black", hjust = 0, face = "italic"),
axis.text = element_text(color = "black"),
plot.title = element_text(face = "bold", size = (10)),
plot.subtitle = element_text(face = "italic", size = (8)))+
labs(y="Log das Variáveis",x="Tempo (anos)",title="Gráfico 2: Log do Câmbio Real x Log do ICBr em USD",subtitle = "Dinâmicas das séries refletem o real brasileiro como uma commodity currency")
gg2
Assim como no caso Oil Price vs IC-BR, o choque entre os gráficos de câmbio real (USD/BRL) e do índice IC-BR(USD/BRL) também apresenta dinâmica próxima. De fato ao se voltar aos conceitos de câmbio real e sua composição baseada em um cesta de consumo típica e ao IC-Br, também como uma proxy para esta cesta (vide relatório de construção do índice) era de se esperar tão próxima relação. Além disso a literatura apresenta amplo debate com relação ao Real Brasileiro ser uma , reforçando o peso que tais elementos tem em nossa economia, troca e consequentemente moeda.
Além das séries exploradas no próprio enuniado da atividade adicionamos para futura avaliação e seleção de modelos duas séries que entendemos serem elementos importantes na discussão econômica dos preços das comodities negociadas em mercado mundial (com influência dp câmbio).São elas :
x<-as.data.frame(cbind(dados$transcor,dados$comindexUsd))
x$date<-enerind$date
x<-melt(x,id="date")
gg3<-ggplot(x,aes(x=date,y=value,colour=variable,group=variable))+
geom_line(size=1.2)+
theme_minimal()+
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
axis.line = element_line(color="black",size=1),
panel.border=element_rect(colour="black",fill=NA,size=0.1),
legend.background = element_blank(),
legend.box.background = element_rect(colour="black",size=1),
strip.text = element_text(size = 16, color = "black"),
axis.title = element_text(color = "black", hjust = 0, face = "italic"),
axis.text = element_text(color = "black"),
plot.title = element_text(face = "bold", size = (10)),
plot.subtitle = element_text(face = "italic", size = (8)))+
labs(y="Log das Variáveis",x="Tempo (anos)",title="Gráfico 3: Log das Transações Correntes/PIB x Log do ICBr em USD",subtitle = "Relação através da alteração dos preços realativos na economia e efeito direto na absorção")
gg3
O saldo das transações correntes possui relação com o câmbio por duas vias principais : alteração dos preços realativos na economia, alterando assim o câmbio real e o efeito direto na absorção, que opera principalmente através do chamado – a reação dos agentes à modificação de seu estoque real de moeda, que os leva a modificar a absorção (isto é, a aumentarou reduzir seus gastos) para restabelecer o estoque real de moeda que desejam manter.(Lyrio Carneiro, 2014).
x<-as.data.frame(cbind(dados$cds,dados$comindexUsd))
x$date<-enerind$date
x<-melt(x,id="date")
gg4<-ggplot(x,aes(x=date,y=value,colour=variable,group=variable))+
geom_line(size=1.2)+
theme_minimal()+
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),
axis.line = element_line(color="black",size=1),
panel.border=element_rect(colour="black",fill=NA,size=0.1),
legend.background = element_blank(),
legend.box.background = element_rect(colour="black",size=1),
strip.text = element_text(size = 16, color = "black"),
axis.title = element_text(color = "black", hjust = 0, face = "italic"),
axis.text = element_text(color = "black"),
plot.title = element_text(face = "bold", size = (10)),
plot.subtitle = element_text(face = "italic", size = (8)))+
labs(y="Log das Variáveis",x="Tempo (anos)",title="Gráfico 4: Log do CDS x Log do ICBr em USD",subtitle = "Relação do CDS sobre o ICBR através de aparato institucional e segurança de contratos")
gg4
O CDS também exerce força importante sobre o câmbio (efeito que deveremos observar com cuidado para que os modelos estudados não apresentam muita correlação entre si, perdendo assim força estatística) mas também sobre a credibilidade do país em termos de contratos, que terá impacto diretamente sobre o ICBR.
Diferentes combinações dessas séries serão estudadas, respeitando sempre o crivo economico, nosso principal guida na seleção de modelos.
Inicialmente iremos construir os passos de análise e testes de uma estrutura de vetor auto regressivo estrutural que pela sua caracterísitca de manter o sentido econômico das variáveis analisadas nos permitirá investigar economicamente as relações entre as séries estudadas e suas decomposições de variância e séries de impulso-resposta.
Estudaremos no VAR e SVAR as séries diretamente diferenciadas pois estamos interessados em como as variações das variaveis impactam outras e não puramente o nível das mesmas. Dito isso, teremos como primeiro passo a diferenciação das séries e posteriormente os testes para verificação de estacionaridade, bem como os respectivos gráficos de autocorrelação e autocorrelação parcial, para começarmos a termos pistas dos lags relevantes para o VAR e posteriormente o SVAR. Contudo, saliento que a escolha final dos lags será dada pelos critérios de informação contidos na função do R, especialmente o critério HQ(Lutkepohl(2005)).
Como o estudo de séries temporais não segue um algorítimo rígido, diversos modelos serão estudados, sempre antes com a sua motivação econômica e depois uma análise dos principais resultados.
icbrDif <- diff(dados$comindexUsd)
cambiorealDif <- diff(dados$cambioreal)
oilDif <- diff(dados$OIL)
cdsDif <- diff(dados$cds)
enerindDif <- diff(dados$enerind)
transcorDif <- diff(dados$transcor)
## ACF e PACF da série ICBR diferenciada
par(mfrow = c(2,1))
acf(icbrDif[-1], lag.max = 24, main = " " )
pacf(icbrDif[-1], lag.max = 24, main = "")
Os gráficos de autocorrelação e autocorrelação parcial da série de ICBR diferenciada apresentam baixa influência tanto dos erros passados quando dos valores passados para explica a dinâmica da série. Caso haja alguma influência ela estará nos primeiros Lags, a definição dos Lags a serem utilizados, reforçando será dada pela função , Não há aparente problema de não estacionariedade. Esse efeito será capturado no próximo bloco chamado testes de estacionariedade onde serão performados testes de raiz unitária.
## ACF e PACF da série cambio real (usd) diferenciada
par(mfrow = c(2,1))
acf(cambiorealDif[-1], lag.max = 24, main = " " )
pacf(cambiorealDif[-1], lag.max = 24, main = "")
A dinâmica das autocorrelações e autocorrelações parciais da série de cÊambio real diferenciado apresenta muito similar àquela apresentada pela série do ICBR diferenciada. Podemos esperar resultados, no tocante à dinÂmica semelhantes
## ACF e PACF da série BRENT (usd) diferenciada
par(mfrow = c(2,1))
acf(oilDif[-1], lag.max = 24, main = " " )
pacf(oilDif[-1], lag.max = 24, main = "")
Aqui a dinâmica reforça a participação do passado explicando a série contemporânea, portanto, é de se esperar que um modelo que apresente a série de Brent como variável endógena, apresente algum lag significativo na equação de explicação da dinâmica performada pelo petróleo.
## ACF e PACF da série transações correntes diferenciada
par(mfrow = c(2,1))
acf(transcorDif[-1], lag.max = 24, main = " " )
pacf(transcorDif[-1], lag.max = 24, main = "")
Aqui a presença de elementos passados explicando movimentos contemporâneos ganha maior evidência, portanto uma bandeira vermelha é colocada sobre a atuação da série em conjunto com as outras, cujo passado longíncuo não era tão representativo. Por apresentar um decrescimento exponencial rápido, o problema da estabilidade não parece ser crítico.
## ACF e PACF da série CDS diferenciada
par(mfrow = c(2,1))
acf(cdsDif[-1], lag.max = 24, main = " " )
pacf(cdsDif[-1], lag.max = 24, main = "")
Diferentemente da série anterior (transações correntes) aqui, o passado não parece ser um grande influenciador da dinâmica da série no momento contemporâneo.
#ICBR diferenciada
icbrADF<- ur.df(icbrDif[-1], type = "none", lags = 12, )
summary(icbrADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.36798 -0.05296 0.00019 0.05260 0.25448
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -1.15077 0.26904 -4.277 3.47e-05 ***
## z.diff.lag1 0.15664 0.25342 0.618 0.5375
## z.diff.lag2 0.32473 0.24055 1.350 0.1792
## z.diff.lag3 0.39120 0.22762 1.719 0.0879 .
## z.diff.lag4 0.33683 0.21335 1.579 0.1166
## z.diff.lag5 0.28480 0.19813 1.437 0.1528
## z.diff.lag6 0.35183 0.18643 1.887 0.0612 .
## z.diff.lag7 0.28125 0.17720 1.587 0.1147
## z.diff.lag8 0.15687 0.16407 0.956 0.3407
## z.diff.lag9 0.10774 0.14968 0.720 0.4728
## z.diff.lag10 0.14979 0.13520 1.108 0.2698
## z.diff.lag11 0.16886 0.11714 1.442 0.1517
## z.diff.lag12 0.05874 0.08384 0.701 0.4847
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0964 on 141 degrees of freedom
## Multiple R-squared: 0.5193, Adjusted R-squared: 0.475
## F-statistic: 11.72 on 13 and 141 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -4.2774
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
#cambio real diferenciada
cambioADF<- ur.df(cambiorealDif[-1], type = "none", lags = 12, )
summary(cambioADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.105938 -0.027558 -0.002077 0.025633 0.146906
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -1.25249 0.28622 -4.376 2.34e-05 ***
## z.diff.lag1 0.21103 0.27021 0.781 0.4361
## z.diff.lag2 0.31691 0.25690 1.234 0.2194
## z.diff.lag3 0.38116 0.24379 1.563 0.1202
## z.diff.lag4 0.35979 0.22965 1.567 0.1194
## z.diff.lag5 0.31569 0.21369 1.477 0.1418
## z.diff.lag6 0.40326 0.20185 1.998 0.0477 *
## z.diff.lag7 0.32118 0.19298 1.664 0.0983 .
## z.diff.lag8 0.19460 0.17869 1.089 0.2780
## z.diff.lag9 0.14556 0.16195 0.899 0.3703
## z.diff.lag10 0.19799 0.14361 1.379 0.1702
## z.diff.lag11 0.21032 0.12187 1.726 0.0866 .
## z.diff.lag12 0.09036 0.08531 1.059 0.2913
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0458 on 141 degrees of freedom
## Multiple R-squared: 0.543, Adjusted R-squared: 0.5008
## F-statistic: 12.88 on 13 and 141 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -4.3759
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
# Brent diferenciada
oilADF<- ur.df(oilDif[-1], type = "none", lags = 12, )
summary(oilADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.35577 -0.05121 -0.00172 0.05269 0.30688
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -1.02883 0.26723 -3.850 0.000179 ***
## z.diff.lag1 0.27710 0.25390 1.091 0.276967
## z.diff.lag2 0.34588 0.24354 1.420 0.157757
## z.diff.lag3 0.28963 0.23012 1.259 0.210252
## z.diff.lag4 0.35220 0.21488 1.639 0.103429
## z.diff.lag5 0.21916 0.19997 1.096 0.274944
## z.diff.lag6 0.12838 0.18288 0.702 0.483846
## z.diff.lag7 0.07461 0.16609 0.449 0.653976
## z.diff.lag8 0.06839 0.15096 0.453 0.651241
## z.diff.lag9 0.05116 0.13861 0.369 0.712590
## z.diff.lag10 0.02026 0.12190 0.166 0.868246
## z.diff.lag11 0.13533 0.10588 1.278 0.203305
## z.diff.lag12 0.06114 0.08420 0.726 0.469007
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09749 on 141 degrees of freedom
## Multiple R-squared: 0.4017, Adjusted R-squared: 0.3465
## F-statistic: 7.281 on 13 and 141 DF, p-value: 9.121e-11
##
##
## Value of test-statistic is: -3.85
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
#Transações correntes diferenciada
transcorADF<- ur.df(transcorDif[-1], type = "none", lags = 12, )
summary(transcorADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.270876 -0.058244 0.001207 0.043400 0.274604
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.302790 0.093097 -3.252 0.001432 **
## z.diff.lag1 -0.267234 0.097214 -2.749 0.006762 **
## z.diff.lag2 -0.003363 0.098127 -0.034 0.972712
## z.diff.lag3 0.106020 0.095714 1.108 0.269888
## z.diff.lag4 0.184903 0.095380 1.939 0.054549 .
## z.diff.lag5 0.150320 0.096394 1.559 0.121134
## z.diff.lag6 0.209148 0.096094 2.176 0.031184 *
## z.diff.lag7 0.101572 0.097054 1.047 0.297099
## z.diff.lag8 0.176731 0.095816 1.844 0.067210 .
## z.diff.lag9 0.143901 0.096237 1.495 0.137078
## z.diff.lag10 0.084287 0.094253 0.894 0.372705
## z.diff.lag11 0.071809 0.090193 0.796 0.427273
## z.diff.lag12 -0.283113 0.075843 -3.733 0.000274 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08943 on 141 degrees of freedom
## Multiple R-squared: 0.4456, Adjusted R-squared: 0.3945
## F-statistic: 8.717 on 13 and 141 DF, p-value: 7.33e-13
##
##
## Value of test-statistic is: -3.2524
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
#CDS diferenciada
cdsADF<- ur.df(cdsDif[-1], type = "none", lags = 12, )
summary(cdsADF)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.40221 -0.12437 -0.00660 0.09043 0.65384
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -1.390116 0.325799 -4.267 3.62e-05 ***
## z.diff.lag1 0.351354 0.308991 1.137 0.257
## z.diff.lag2 0.303305 0.290173 1.045 0.298
## z.diff.lag3 0.319566 0.272770 1.172 0.243
## z.diff.lag4 0.269260 0.257862 1.044 0.298
## z.diff.lag5 0.209613 0.243087 0.862 0.390
## z.diff.lag6 0.190398 0.226179 0.842 0.401
## z.diff.lag7 0.142209 0.207710 0.685 0.495
## z.diff.lag8 0.196788 0.188841 1.042 0.299
## z.diff.lag9 0.098961 0.168361 0.588 0.558
## z.diff.lag10 0.018569 0.145361 0.128 0.899
## z.diff.lag11 -0.036221 0.117394 -0.309 0.758
## z.diff.lag12 0.009154 0.082357 0.111 0.912
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1743 on 141 degrees of freedom
## Multiple R-squared: 0.5467, Adjusted R-squared: 0.5049
## F-statistic: 13.08 on 13 and 141 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -4.2668
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
Conforme esperado, todos as séries apresentam estacionariedade quando diferenciadas.
Agora propriamente iremos gerador modelos visando explicar o ICBR pelas séries escolhidas, não necessariamente todas, mas alguma combinação com sentido econômica das mesmas. Cabe uma explicação da ordem de como serão organizadas as informações e resultados : Primeiramente serão simulados uma variedade de modelos.O modelo que melhor performar segundo o critério de sinais apresentados e grau explicativo (\(R^2_{ajustado}\)), será estudado do ponto de vista dos testes de correlação serial, SVAR, causalidade de Granger e graficos de impulso-resposta;
Inicialmente iremos modelar como endógenas as variáveis ICBR em dólares (comindexusd) e câmbio real (BRL/USD) e como variável exógena a variável Preço petróleo Brent (OIL). Tal escolha é motivada pelo fato de o índice de comodities ter como um de seus elementos formadores o preço Brent, gerando possíveis efeitos indesejados caso este fosse tratado de forma endógena, por isso a escolha de seu tratamento exógeno buscando explicar parte da variabilidade do ICBR e mesmo do Cambio Real, que tbm sofre seu efeito, pelo efeito inflação. Vejamos os resultados :
x <- cbind(icbrDif[-1],cambiorealDif[-1])
select3<- VARselect(x, lag.max = 12, type = c("const"), exogen = cbind(oilDif[-1]))
stargazer(select3$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 1 1 1 1
## -------------------------
stargazer(select3$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -13.544 -13.514 -13.488 -13.446 -13.400 -13.368 -13.364 -13.339 -13.300 -13.269 -13.219 -13.189
## HQ(n) -13.480 -13.418 -13.360 -13.286 -13.209 -13.145 -13.109 -13.051 -12.981 -12.918 -12.836 -12.774
## SC(n) -13.387 -13.278 -13.174 -13.053 -12.929 -12.818 -12.736 -12.632 -12.514 -12.405 -12.277 -12.168
## FPE(n) 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
## ------------------------------------------------------------------------------------------------------
Temos pelo critério HQ que o primeiro lag é o melhor para a cosntrução do modelo VAR, seguimos.
model3 <- VAR(x, p = 1, exogen = cbind(oilDif[-1]))
stargazer(model3$varresult, type = "text")
##
## ===========================================================
## Dependent variable:
## ----------------------------
## y
## (1) (2)
## -----------------------------------------------------------
## comindexUsd.l1 0.314 -0.080
## (0.239) (0.120)
##
## cambioreal.l1 0.863* -0.251
## (0.491) (0.247)
##
## const -0.001 -0.001
## (0.007) (0.003)
##
## OIL 0.411*** -0.158***
## (0.070) (0.035)
##
## -----------------------------------------------------------
## Observations 166 166
## R2 0.209 0.127
## Adjusted R2 0.194 0.111
## Residual Std. Error (df = 162) 0.085 0.043
## F Statistic (df = 3; 162) 14.242*** 7.842***
## ===========================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
O modelo explica muito pouco ambas as variáveis, respectivamente 20% do delta ICBR e 11% do delta câmbio real. As váriaveis significativas apresentam sinais coerentes com os esperados, a se saber para o caso da explicação do delta do ICBR ( principal foco do estudo, conforme o enunciado) : uma variação positiva do delta cambio no passado (desvalorização real do BRL frente ao Dólar) provoca uma elevação no índice de comodities e uma elevação do delta do valor do Brent, por este estar dentro do índice, também exerce força positiva para o mesmo.
Adicionalmente ao primeiro modelo adicionaremos a série de CDS diferenciada como variável exógena, buscando explicar a variabilidade do câmbio e consequentemente de ICBR ( dado sua comercialização internacional), uma vez que tal série busca mensurar o nível de risco associado ao Brasil e sua dinâmica, segundo literatura, influencia significativamente a dinâmica do câmbio ( mas sobremaneira seus deltas).
x <- cbind(icbrDif[-1],cambiorealDif[-1])
select1<- VARselect(x, lag.max = 12, type = c("const"), exogen = cbind(oilDif[-1],cdsDif[-1]))
stargazer(select1$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 1 1 1 1
## -------------------------
stargazer(select1$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -13.996 -13.957 -13.929 -13.885 -13.840 -13.810 -13.800 -13.775 -13.732 -13.696 -13.647 -13.616
## HQ(n) -13.916 -13.845 -13.785 -13.710 -13.633 -13.571 -13.528 -13.472 -13.397 -13.330 -13.248 -13.185
## SC(n) -13.800 -13.682 -13.575 -13.453 -13.330 -13.221 -13.132 -13.029 -12.907 -12.793 -12.665 -12.555
## FPE(n) 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
## ------------------------------------------------------------------------------------------------------
Temos pelo critério HQ que o primeiro lag é o melhor para a cosntrução do modelo VAR, seguimos.
model1 <- VAR(x, p = 1, exogen = cbind(oilDif[-1],cdsDif[-1]))
stargazer(model1$varresult, type = "text")
##
## ===========================================================
## Dependent variable:
## ----------------------------
## y
## (1) (2)
## -----------------------------------------------------------
## comindexUsd.l1 0.383** -0.117
## (0.193) (0.094)
##
## cambioreal.l1 0.957** -0.300
## (0.397) (0.193)
##
## const -0.002 -0.0004
## (0.005) (0.003)
##
## OIL 0.272*** -0.084***
## (0.059) (0.029)
##
## cds -0.296*** 0.157***
## (0.032) (0.015)
##
## -----------------------------------------------------------
## Observations 166 166
## R2 0.487 0.468
## Adjusted R2 0.474 0.455
## Residual Std. Error (df = 161) 0.068 0.033
## F Statistic (df = 4; 161) 38.236*** 35.468***
## ===========================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
O resultado obtido com a inclusão da série de CDS diferenciada apresenta resultados significativamente melhores que os apresentados sem a sua utilização ( primeiro modelo ), explicando cerca de 49% da variabilidade do delta do indice ICBR e cerca de 47% do delta câmbio real. Novamente os sinais das variáveis significativas tem total coerência com o esperado, aqui ressaltando o efeito cds que é bastante interessante do ponto de vista econômico, uma vez que ele capta efeitos de segurança institucional de um pais, risco brasil e afins, e um efeito de piora deste índice gera um efeito negativo no ICBR, mesmo que frente à uma desvalorização de nossa moeda ( aumento da relação BRL/USD ) que tem efeito positivo no índice de commodities. Além desse efeito local o CDS e seu delta tem crescimento em momentos de crise, de aversão a risco que coincidem comperíodos de menor demanda global, explicando essa queda.
O presente modelo foi construído adcionando como variável endógena O saldo das transações correntes para captar sua relação com o com o câmbio por duas vias principais : alteração dos preços realativos na economia, alterando assim o câmbio real e o efeito direto na absorção, que opera principalmente através do chamado – a reação dos agentes à modificação de seu estoque real de moeda, que os leva a modificar a absorção (isto é, a aumentarou reduzir seus gastos) para restabelecer o estoque real de moeda que desejam manter.(Lyrio Carneiro, 2014).
Outros trabalhos também incluem o saldo de transações correntes e seus deltas como explicativo do câmbio real (vide Branco, 2016)
x <- cbind(icbrDif[-1],cambiorealDif[-1],transcorDif[-1])
select4 <- VARselect(x, lag.max = 12, type = c("const"),exogen = cbind(oilDif[-1],cdsDif[-1]))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
Temos pelo critério HQ que o primeiro lag é o melhor para a cosntrução do modelo VAR, seguimos.
model4 <- VAR(x, p = 1,exogen = cbind(oilDif[-1],cdsDif[-1]))
stargazer(model4$varresult, type= "text")
##
## ============================================================
## Dependent variable:
## -----------------------------
## y
## (1) (2) (3)
## ------------------------------------------------------------
## comindexUsd.l1 0.389** -0.130 -0.050
## (0.195) (0.095) (0.307)
##
## cambioreal.l1 0.969** -0.324* -0.395
## (0.400) (0.194) (0.631)
##
## transcor.l1 0.010 -0.021 0.585***
## (0.040) (0.020) (0.064)
##
## const -0.002 -0.001 -0.007
## (0.005) (0.003) (0.009)
##
## OIL 0.271*** -0.082*** -0.193**
## (0.059) (0.029) (0.093)
##
## cds -0.296*** 0.156*** -0.067
## (0.032) (0.015) (0.050)
##
## ------------------------------------------------------------
## Observations 166 166 166
## R2 0.487 0.472 0.365
## Adjusted R2 0.471 0.456 0.346
## Residual Std. Error (df = 160) 0.069 0.033 0.108
## F Statistic (df = 5; 160) 30.423*** 28.646*** 18.428***
## ============================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Novamente os coeficientes significativos apresentam sinais coerentes com o esperado, mas infelizmente os coeficientes que envolvem as transações correntes explicando as variacões do delta do índice de comodities apresentam-se não significativos algo que somado ao \(R^2_{ajustado}\) menor que do modelo anterior nos leva a conclusão que a adição desta variável não aumenta o poder de explicação do modelo.
Nesta seção serão estudados a estabilidade, causalidade de Granger, e a modelagem SVAR (melhor significado ecônomico) para o modelo que melhor performou na etapa anterior (Segundo modelo : Variáveis endógenas (ICBR e Cambio real) variáveis exógenas ( Brent e CDS ) ).
serial.test(model1)
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object model1
## Chi-squared = 38.964, df = 60, p-value = 0.9839
arch.test(model1, multivariate.only = TRUE)
##
## ARCH (multivariate)
##
## data: Residuals of VAR object model1
## Chi-squared = 82.043, df = 45, p-value = 0.000616
roots(model1, modulus = TRUE)
## [1] 0.11146032 0.02899259
causality(model1, cause = "cambioreal")
## $Granger
##
## Granger causality H0: cambioreal do not Granger-cause comindexUsd
##
## data: VAR object model1
## F-Test = 5.8275, df1 = 1, df2 = 322, p-value = 0.01633
##
##
## $Instant
##
## H0: No instantaneous causality between: cambioreal and comindexUsd
##
## data: VAR object model1
## Chi-squared = 76.446, df = 1, p-value < 2.2e-16
Dos resultados acima é possível ler que o modelo é Estavel, Raizes menores que a unidade, não apresentam o problema de correlação serial ( Portmanteau Test hipótese nula de não correlação serial não pode ser rejeitada), que os resíduos do modelo são homocedásticos ( rejeita hipótese nula de heterocedasticidade dos resíduos) e há causalidade granger entre Cambio real diferenciado e o índice de comodities. Então por fim, temos as seguintes equações motoras das váriáveis do modelo escolhido:
\(\Delta IBCR_{t} = -0.002 + 0.383\Delta IBCR_{t-1} + 0.957\cdot\Delta Câmbio Real_{t-1} + 0.272\cdot\Delta Oil_{t} -0.296\cdot\Delta CDS_{t} +\varepsilon_{t}\)
\(\Delta Câmbio Real_{t} = -0.0004 - 0.117\Delta IBCR_{t-1} -0.300\cdot\Delta Câmbio Real_{t-1} - 0.084\cdot\Delta Oil_{t} + 0.157\cdot\Delta CDS_{t} +\varepsilon_{t}\)
E seguiremos com este modelo para sua construção estrutural que se segue.
Definidas condições de estabilidade, não heterocedasticidade dos resíduos, podemos sair da formulação reduzida, que apresenta erros correlacionados que dificultam a interpretação economica do modelo (modelo VAR), para a formulação estrutural, seguimos :
Amat<- diag(2)
Amat[1,2]<-NA
Amat[2,1]<-NA
varest_1<- model1
svar.A1<-SVAR(varest_1,Amat=Amat,estmethod = "direct")
# MAtriz A (contemporânea) da formulação SVAR
summary(svar.A1)
##
## SVAR Estimation Results:
## ========================
##
## Call:
## SVAR(x = varest_1, estmethod = "direct", Amat = Amat)
##
## Type: A-model
## Sample size: 166
## Log Likelihood: 541.715
## Method: direct
## Number of iterations: 115
## Convergence code: 0
##
## LR overidentification test:
##
## LR overidentification
##
## data: x
## Chi^2 = 314, df = 1, p-value <2e-16
##
##
## Estimated A matrix:
## comindexUsd cambioreal
## comindexUsd 1.00 30.97
## cambioreal -14.38 1.00
##
## Estimated B matrix:
## comindexUsd cambioreal
## comindexUsd 1 0
## cambioreal 0 1
##
## Covariance matrix of reduced form residuals (*100):
## comindexUsd cambioreal
## comindexUsd 0.481786 -0.008324
## cambioreal -0.008324 0.104302
model1_var<-fevd(svar.A1)
plot(model1_var)
irf1<- irf(svar.A1,impulse = "cambioreal", response = "comindexUsd", boot = TRUE)
names(irf1)
## [1] "irf" "Lower" "Upper" "response" "impulse"
## [6] "ortho" "cumulative" "runs" "ci" "boot"
## [11] "model"
irf2<- irf(svar.A1,impulse = "comindexUsd", response = "cambioreal", boot = TRUE)
names(irf2)
## [1] "irf" "Lower" "Upper" "response" "impulse"
## [6] "ortho" "cumulative" "runs" "ci" "boot"
## [11] "model"
plot(irf1)
plot(irf2)
#Matriz dos Coeficientes Contemporâneos
svar.A1$A
## comindexUsd cambioreal
## comindexUsd 1.0000 30.96891
## cambioreal -14.3822 1.00000
Finalmente chegando às análise finais vemos que os resultados do modelo estrutural apresentam resultados bastante positivos em termos de modelagem. Iniciando com os gráficos da decomposição de variâncias dos erros de previsão podemos observar que cada variável tem enorme poder explicador dos erros de previsão da outra variável, algo que na prática mostra bom poder de realizarmos boas previsões com o modelo. O gráfico de impulso e resposta dos modelo estrutaral também corrobora com a avaliação satisfatória do exercíco, indicando dinâmica coerente com as equações motoras das váriáveis, a se saber um efeito negativo no curto prazo para o índice de comódities em dólar que se deprecia no curto prazo, com um impulso positivo do dólar , se estabilizando e convergindo ao patamar neutro de maneira tambem rápida, menor que 4 Lags. e assim como era esperado, o impulso positivo do índice tem como contra-parte a elevação do câmbio real, seja por um efeito nominal, depreciação do BRL, seja por um efeito real de baixa pressão do nível de preços.
Testes de Cointegração
Os modelos VEC são uma classe especial dos modelos VAR, porém que podem também incluir relações de cointegração entre as variáveis. São condições necessárias para a estimação de um modelo VEC que as variáveis (i) sejam não-estacionárias em seus níveis, porém estacionárias em suas primeiras diferenças I(1) e (ii) que as variáveis sejam cointegradas. A interpretação econômica da cointegração é a existência de uma relação significante entre um conjunto de variáveis que persiste no tempo.
Abaixo são realizados testes Augmented Dickey-Fuller para existência de raiz unitária das variáveis relevantes no nível. A hipótese nula do teste pressupõe a existência de raiz unitária na série e, portanto, sua não rejeição implica em não-estacionariedade. Cabe ressaltar que, conforme já testado anteriormente, todas as variáveis abaixo são I(1).
#ICBR no nível
icbrADFlevel<- ur.df(dados$comindex, type = "none", lags = 12, )
icbrADFlevel@cval
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
icbrADFlevel@teststat
## tau1
## statistic 1.722016
#cambio real no nível
cambioADFlevel<- ur.df(dados$cambioreal, type = "none", lags = 12, )
cambioADFlevel@cval
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
cambioADFlevel@teststat
## tau1
## statistic -0.213543
# Brent no nível
oilADFlevel<- ur.df(dados$OIL, type = "none", lags = 12, )
oilADFlevel@cval
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
oilADFlevel@teststat
## tau1
## statistic -0.257002
#Transações no nível
transcorADFlevel<- ur.df(dados$transcor, type = "none", lags = 12, )
transcorADFlevel@cval
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
transcorADFlevel@teststat
## tau1
## statistic -0.5711392
#CDS no nível
cdsADFlevel<- ur.df(dados$cds, type = "none", lags = 12, )
cdsADFlevel@cval
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
cdsADFlevel@teststat
## tau1
## statistic -0.1511812
Conforme esperado, todos as séries apresentam não-estacionariedade em seus níveis, satisfazendo uma das condições necessárias para a modelagem VEC/VECM.
Para auxiliar a determinar o apropriado número de lags (K) dos testes de cointegração, analisou-se a ACF e a PACF das variáveis relevantes.
## ACF e PACF da série ICBR diferenciada
par(mfrow = c(2,1))
acf(dados$comindexUsd, lag.max = 24, main = "ACF do ICBR em USD no nível" )
pacf(dados$comindexUsd, lag.max = 24, main = "PACF do ICBR em USD no nível")
par(mfrow = c(2,1))
acf(dados$cambioreal, lag.max = 24, main = "ACF do Câmbio Real no Nível " )
pacf(dados$cambioreal, lag.max = 24, main = "PACF do Câmbio Real no Nível")
par(mfrow = c(2,1))
acf(dados$OIL, lag.max = 24, main = "ACF do Preço do Petróleo no Nível " )
pacf(dados$OIL, lag.max = 24, main = "PACF do Preço do Petróleo no Nível")
par(mfrow = c(2,1))
acf(dados$enerind, lag.max = 24, main = "ACF do Consumo de Energia no Nível " )
pacf(dados$enerind, lag.max = 24, main = "PACF do Consumo de Energia no Nível")
par(mfrow = c(2,1))
acf(dados$transcor, lag.max = 24, main = "ACF das Transações Correntes/PIB no Nível " )
pacf(dados$transcor, lag.max = 24, main = "PACF das Transações Correntes/PIB no Nível")
par(mfrow = c(2,1))
acf(dados$cds, lag.max = 24, main = "ACF do CDS no Nível " )
pacf(dados$cds, lag.max = 24, main = "PACF do CDS no Nível")
Ademais, também para auxiliar na determinação do número de lags testes de cointegração, optou-se por analisar o número de lags indicado pela função , o qual, espera-se, seja o mesmo, ou próximo, do que indicam os gráficos ACF e PACF.
x <- cbind(dados$comindexUsd,dados$cambioreal)
selectlag1 <- VARselect(x, lag.max = 12, type = c("const"))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
De acordo com o resultado da seleção de lags do modelo VAR, através do critério HQ, optou-se pela inclusão de 2 lags (K=2) no teste de cointegração entre o ICBR em USD e o Câmbio Real.
x <- cbind(dados$comindexUsd,dados$oil)
selectlag2 <- VARselect(x, lag.max = 12, type = c("const"))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
De acordo com o resultado da seleção de lags do modelo VAR, através do critério HQ, optou-se pela inclusão de 2 lags (K=2) no teste de cointegração entre o ICBR em USD e o Preço do Petróleo Brent.
x <- cbind(dados$comindexUsd,dados$enerind)
selectlag3 <- VARselect(x, lag.max = 12, type = c("const"))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
De acordo com o resultado da seleção de lags do modelo VAR, através do critério HQ, optou-se pela inclusão de 2 lags (K=2) no teste de cointegração entre o ICBR em USD e o Consumo de Energia.
x <- cbind(dados$comindexUsd,dados$transcor)
selectlag4 <- VARselect(x, lag.max = 12, type = c("const"))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
De acordo com o resultado da seleção de lags do modelo VAR, através do critério HQ, optou-se pela inclusão de 2 lags (K=2) no teste de cointegração entre o ICBR em USD e as Transações Correntes/PIB.
x <- cbind(dados$comindexUsd,dados$transcor,dados$enerind)
selectlag5 <- VARselect(x, lag.max = 12, type = c("const"))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
De acordo com o resultado da seleção de lags do modelo VAR, através do critério HQ, optou-se pela inclusão de 2 lags (K=2) no teste de cointegração entre o ICBR em USD, as Transações Correntes/PIB e o consumo de energia.
x <- cbind(dados$comindexUsd,dados$cds)
selectlag6 <- VARselect(x, lag.max = 12, type = c("const"))
stargazer(select4$selection, type = "text")
##
## =========================
## AIC(n) HQ(n) SC(n) FPE(n)
## -------------------------
## 2 1 1 2
## -------------------------
stargazer(select4$criteria, type = "text")
##
## ======================================================================================================
## 1 2 3 4 5 6 7 8 9 10 11 12
## ------------------------------------------------------------------------------------------------------
## AIC(n) -18.546 -18.579 -18.544 -18.532 -18.438 -18.404 -18.392 -18.319 -18.247 -18.214 -18.138 -18.225
## HQ(n) -18.402 -18.363 -18.256 -18.173 -18.008 -17.902 -17.818 -17.673 -17.529 -17.425 -17.276 -17.292
## SC(n) -18.193 -18.048 -17.837 -17.648 -17.378 -17.167 -16.978 -16.729 -16.480 -16.270 -16.017 -15.928
## FPE(n) 0 0 0 0 0 0 0 0 0 0 0 0
## ------------------------------------------------------------------------------------------------------
De acordo com o resultado da seleção de lags do modelo VAR, através do critério HQ, optou-se pela inclusão de 2 lags (K=2) no teste de cointegração entre o ICBR e o CDS.
Os testes de cointegração foram realizados através do Teste de Johansen, o qual verifica se duas ou mais séries possuem uma relação de cointegração. A primeira hipótese nula do Teste, r=0, assume a não existência de cointegração. A ordem de lags foi especificada de maneira a minimizar o critério de informação através dos modelos VAR acima estimados. Cada teste é seguido de uma breve explicação econômica acerca da relação entre as variáveis.
x <- cbind(dados$comindexUsd,dados$cambioreal,dados$OIL)
cointest<-ca.jo(x,K=2,type="eigen",ecdet="none",spec="longrun")
cointest@cval
## 10pct 5pct 1pct
## r <= 2 | 6.50 8.18 11.65
## r <= 1 | 12.91 14.90 19.19
## r = 0 | 18.90 21.07 25.75
cointest@teststat[2]
## [1] 8.238567
Em primeiro lugar, testou-se a hipótese de cointegração entre o ICBR, o Câmbio Real e o Preço do Petróleo. O resultado do teste indica não ser possível rejeitar a hipótese nula, indicando que não há evidências estatísticas suficientes para confirmar a existência de cointegração entre o ICBR em USD. As dinâmicas dessas séries serão exploradas nos próximos dois testes.
x <- cbind(dados$comindexUsd,dados$cambioreal)
cointest<-ca.jo(x,K=2,type="eigen",ecdet="none",spec="longrun")
cointest@cval
## 10pct 5pct 1pct
## r <= 1 | 6.50 8.18 11.65
## r = 0 | 12.91 14.90 19.19
cointest@teststat[2]
## [1] 7.320523
O resultado do teste indica não ser possível rejeitar a hipótese nula, indicando que não há evidências estatísticas suficientes para confirmar a existência de cointegração entre o ICBR em USD e o Câmbio Real, contrariando a observação inicial de que as séries possuem dinâmicas parecidas (o que foi conferido graficamente mais acima) e de que o Real pode ser considerado uma “commoditie currency”.
x <- cbind(dados$comindexUsd,dados$OIL)
cointest<-ca.jo(x,K=2,type="eigen",ecdet="none",spec="longrun")
cointest@cval
## 10pct 5pct 1pct
## r <= 1 | 6.50 8.18 11.65
## r = 0 | 12.91 14.90 19.19
cointest@teststat[2]
## [1] 11.9535
O resultado do teste indica não ser possível rejeitar a hipótese nula, indicando que não há evidências estatísticas suficientes para confirmar a existência de cointegração entre o ICBR em USD e o Preço do Petróleo Brent. A cointegração entre essas variáveis poderia ser , uma vez que o ICBR leva, em sua composição, o preço do petróleo. No entanto, a existência de outras variáveis nessa cesta impacta significativamente a dinâmica conjunta dessas variáveis, de modo que não são significativamente cointegradas.
x <- cbind(dados$comindexUsd,dados$transcor)
cointest<-ca.jo(x,K=2,type="eigen",ecdet="none",spec="longrun")
cointest@cval
## 10pct 5pct 1pct
## r <= 1 | 6.50 8.18 11.65
## r = 0 | 12.91 14.90 19.19
cointest@teststat[2]
## [1] 16.64066
O resultado do teste indica ser possível rejeitar a hipótese nula, indicando que há evidências estatísticas suficientes para confirmar a existência de cointegração entre o ICBR em USD e as Transações Correntes/PIB. Quiçá, a dinâmica de longo prazo entre essas variáveis seja resultado, em parte, dos impactos das transações correntes com o câmbio real através da alteração dos preços relativos e o efeito direto na absorção. Uma vez que ambas as séries são I(1) e são cointegradas, doravante serão modelados VEC valendo-se delas.
x <- cbind(dados$comindexUsd,dados$cds)
cointest<-ca.jo(x,K=2,type="eigen",ecdet="none",spec="longrun")
cointest@cval
## 10pct 5pct 1pct
## r <= 1 | 6.50 8.18 11.65
## r = 0 | 12.91 14.90 19.19
cointest@teststat[2]
## [1] 11.15729
O resultado do teste indica não ser possível rejeitar a hipótese nula, indicando que não há evidências estatísticas suficientes para confirmar a existência de cointegração entre o ICBR em USD e o CDS. Embora possa haver uma relação entre o CDS e o câmbio, em razão do aparato institucional e da confiança dos agentes na economia, e entre o CDS e o preço de commodities (refletindo efeitos de restrição de oferta diante de menor confiança em contratos, por exemplo), tais relações não parecem ser fortes o suficiente para prover uma relação de longo prazo entre as séries.
Em primeiro lugar, estimamos um modelo VEC valendo-se das variáveis ICBR e Transações correntes/PIB, as únicas que apresentaram cointegração, sem variáveis exógenas. Economicamente, há razões para se acreditar que as transações correntes impactam o ICBR, e vice-versa, através através da alteração dos preços relativos e o efeito direto na absorção.
x <- cbind(dados$comindexUsd,dados$transcor)
#Performar teste de cointegração
vecm1<-ca.jo(x,ecdet="const",type="trace",K=2,spec="transitory")
#Estimar modelo VEC irrestrito
VECM1.ir<-cajorls(vecm1,r=1)
VECM1.ir
## $rlm
##
## Call:
## lm(formula = substitute(form1), data = data.mat)
##
## Coefficients:
## comindexUsd.d transcor.d
## ect1 0.01449 -0.06449
## comindexUsd.dl1 0.02073 0.16032
## transcor.dl1 0.06445 0.47967
##
##
## $beta
## ect1
## comindexUsd.l1 1.0000000
## transcor.l1 0.2176527
## constant -1.6351202
summary(VECM1.ir$rlm)
## Response comindexUsd.d :
##
## Call:
## lm(formula = comindexUsd.d ~ ect1 + comindexUsd.dl1 + transcor.dl1 -
## 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.40060 -0.05586 0.00238 0.04893 0.23056
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 0.01449 0.01411 1.028 0.306
## comindexUsd.dl1 0.02073 0.07986 0.260 0.796
## transcor.dl1 0.06445 0.05983 1.077 0.283
##
## Residual standard error: 0.09443 on 163 degrees of freedom
## Multiple R-squared: 0.01083, Adjusted R-squared: -0.007374
## F-statistic: 0.595 on 3 and 163 DF, p-value: 0.6192
##
##
## Response transcor.d :
##
## Call:
## lm(formula = transcor.d ~ ect1 + comindexUsd.dl1 + transcor.dl1 -
## 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.37624 -0.06527 0.00064 0.06159 0.27385
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 -0.06449 0.01554 -4.151 5.33e-05 ***
## comindexUsd.dl1 0.16032 0.08796 1.823 0.0702 .
## transcor.dl1 0.47967 0.06590 7.279 1.35e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.104 on 163 degrees of freedom
## Multiple R-squared: 0.4117, Adjusted R-squared: 0.4009
## F-statistic: 38.03 on 3 and 163 DF, p-value: < 2.2e-16
O vetor de cointegração estimado é beta=(1.000, 0.217, -1.635) e os parâmetros de ajuste de erro são (alpha1=0.145,alpha2=-0.064). O primeiro parâmetro de ajuste de erro não é estatisticamente significante enquanto o segundo é. Tais parâmetros determinam a intensidade da volta ao equilíbrio de longo prazo. Para a relação de longo prazo ser estável, é preciso que alpha1<=0 e alpha2>=0 e que pelo menos um deles não seja nulo.. Uma vez que tais condições não são satisfeitas, não há uma relação estável de longo prazo. O que pode ser constatado pelo gráfico de impulso-resposta abaixo. Ademais, no modelo com o ICBR como variável resposta, nenhuma das variáveis explicativas possui valor estatisticamente diferente de zero.
VECM1.VAR<-vec2var(vecm1,r=1)
ir<-irf(VECM1.VAR,n.ahead=20,impulse="transcor",response="comindexUsd",ortho=FALSE,runs=500)
plot(ir)
Em seguida, estimamos um segundo modelo VEC com as mesmas variáveis endógenas, porém porém adicionando o preço do petróleo brent, em USD, como variável exógena, uma vez que, inserido na cesta do ICBR, ele pode explicar parte significativa desse índice e também das transações correntes.
Depois cambio (crise de demanda: começa com inflação super baixa, câmbio real começa a sofrer (crise de confiança e generalizadas))
x <- cbind(dados$comindexUsd,dados$transcor)
y<-cbind(dados$OIL)
#Performar teste de cointegração
vecm2<-ca.jo(x,ecdet="const",type="trace",K=2,spec="transitory",dumvar = y)
#Estimar modelo VEC
VECM2.ir<-cajorls(vecm2,r=1)
VECM2.ir
## $rlm
##
## Call:
## lm(formula = substitute(form1), data = data.mat)
##
## Coefficients:
## comindexUsd.d transcor.d
## ect1 0.003215 -0.008253
## OIL 0.039011 -0.103071
## comindexUsd.dl1 0.005789 0.161627
## transcor.dl1 0.085853 0.457017
##
##
## $beta
## ect1
## comindexUsd.l1 1.000000
## transcor.l1 2.325157
## constant -50.873646
summary(VECM2.ir$rlm)
## Response comindexUsd.d :
##
## Call:
## lm(formula = comindexUsd.d ~ ect1 + OIL + comindexUsd.dl1 + transcor.dl1 -
## 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.39750 -0.05055 0.00805 0.05594 0.22091
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 0.003215 0.001594 2.017 0.0453 *
## OIL 0.039011 0.019609 1.989 0.0483 *
## comindexUsd.dl1 0.005789 0.079150 0.073 0.9418
## transcor.dl1 0.085853 0.060005 1.431 0.1544
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09384 on 162 degrees of freedom
## Multiple R-squared: 0.02913, Adjusted R-squared: 0.005163
## F-statistic: 1.215 on 4 and 162 DF, p-value: 0.3063
##
##
## Response transcor.d :
##
## Call:
## lm(formula = transcor.d ~ ect1 + OIL + comindexUsd.dl1 + transcor.dl1 -
## 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.36414 -0.05278 -0.00253 0.06381 0.24995
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 -0.008253 0.001741 -4.741 4.64e-06 ***
## OIL -0.103071 0.021420 -4.812 3.40e-06 ***
## comindexUsd.dl1 0.161627 0.086460 1.869 0.0634 .
## transcor.dl1 0.457017 0.065547 6.972 7.50e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1025 on 162 degrees of freedom
## Multiple R-squared: 0.432, Adjusted R-squared: 0.418
## F-statistic: 30.8 on 4 and 162 DF, p-value: < 2.2e-16
O vetor de cointegração estimado é beta=(1.000, -2.325, -50.874) e os parâmetros de ajuste de erro são (alpha1=0.003,alpha2=-0.008). Ambos os parâmetros de ajuste de erro são estatisticamente significantes. Tais parâmetros determinam a intensidade da volta ao equilíbrio de longo prazo. Entretanto, os sinais desses parâmetros não indicam estabilidade no equilíbrio de longo prazo. Ademais, uma vez que alpha1<0 e alpha2>0, não há evidências de relação estável de longo prazo. Nesse modelo, no entanto, é importante notar que o petróleo é uma variável estatisticamente significante no modelo que explica o ICBR e seu sinal positivo tem significado econômico: um aumento no preço do petróleo impacta positivamente a cesta de commodities do ICBR.
Em seguida, uma vez que o petróleo como variável exógena trouxe melhora significativa no modelo, adicionou-se o CDS também como variável exógena. Economicamente, o CDS representa uma balança de riscos do país e dessa forma pode impactar significativamente o preço das commodites em USD e as transações correntes (quanto maior o risco-país, espera-se que menos contratos sejam efetuados, por exemplo).
x <- cbind(dados$comindexUsd,dados$transcor)
y<-cbind(dados$OIL,dados$cds)
#Performar teste de cointegração
vecm3<-ca.jo(x,ecdet="const",type="trace",K=2,spec="transitory",dumvar = y)
#Estimar modelo VEC
VECM3.ir<-cajorls(vecm3,r=1)
VECM3.ir
## $rlm
##
## Call:
## lm(formula = substitute(form1), data = data.mat)
##
## Coefficients:
## comindexUsd.d transcor.d
## ect1 -0.05336 0.02843
## OIL 0.01146 -0.05196
## cds -0.08468 0.08156
## comindexUsd.dl1 -0.03504 0.15487
## transcor.dl1 0.10671 0.45530
##
##
## $beta
## ect1
## comindexUsd.l1 1.0000000
## transcor.l1 -0.1854473
## constant -9.6818778
summary(VECM3.ir$rlm)
## Response comindexUsd.d :
##
## Call:
## lm(formula = comindexUsd.d ~ ect1 + OIL + cds + comindexUsd.dl1 +
## transcor.dl1 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.34377 -0.05524 0.00401 0.05561 0.22240
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 -0.05336 0.01179 -4.524 1.17e-05 ***
## OIL 0.01146 0.01229 0.932 0.3528
## cds -0.08468 0.01783 -4.749 4.49e-06 ***
## comindexUsd.dl1 -0.03504 0.07520 -0.466 0.6419
## transcor.dl1 0.10671 0.05788 1.844 0.0671 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08899 on 161 degrees of freedom
## Multiple R-squared: 0.1323, Adjusted R-squared: 0.1054
## F-statistic: 4.91 on 5 and 161 DF, p-value: 0.0003292
##
##
## Response transcor.d :
##
## Call:
## lm(formula = transcor.d ~ ect1 + OIL + cds + comindexUsd.dl1 +
## transcor.dl1 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.37446 -0.05676 0.01195 0.06278 0.25095
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 0.02843 0.01372 2.072 0.039850 *
## OIL -0.05196 0.01430 -3.633 0.000376 ***
## cds 0.08156 0.02074 3.932 0.000125 ***
## comindexUsd.dl1 0.15487 0.08747 1.770 0.078540 .
## transcor.dl1 0.45530 0.06733 6.763 2.37e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1035 on 161 degrees of freedom
## Multiple R-squared: 0.4244, Adjusted R-squared: 0.4065
## F-statistic: 23.74 on 5 and 161 DF, p-value: < 2.2e-16
O vetor de cointegração estimado é beta=(1.000, -0.185, -9.682) e os parâmetros de ajuste de erro são (alpha1=-0.0536,alpha2=0.028). Ambos os parâmetros de ajuste de erro são estatisticamente significantes porém não indicam a existência de uma relação estável de longo prazo. Ademais, esse modelo também apresenta maior poder explicativo do que os dois primeiros modelos testados e indica que o CDS é uma variável estatisticamente significante. No entanto, o preço do petróleo perdeu significância estatística, contrariando a intuição econômica de sua relevância no ICBR.
Diante disso, testaremos um quarto modelo com as mesmas variáveis endógenas, porém trocando o CDS pelo câmbio real como variável endógena. O câmbio real impacta diretamente o valor do ICBR em Dólares Americanos e pode explicar parte significativa da variação desse índice e das transações correntes.
x <- cbind(dados$comindexUsd,dados$transcor)
y<-cbind(dados$OIL,dados$cambioreal)
#Performar teste de cointegração
vecm4<-ca.jo(x,ecdet="const",type="trace",K=2,spec="transitory",dumvar = y)
#Estimar modelo VEC
VECM4.ir<-cajorls(vecm4,r=1)
VECM4.ir
## $rlm
##
## Call:
## lm(formula = substitute(form1), data = data.mat)
##
## Coefficients:
## comindexUsd.d transcor.d
## ect1 -0.221699 0.103088
## OIL 0.007954 -0.020765
## cambioreal -0.729633 0.440158
## comindexUsd.dl1 -0.078662 0.154206
## transcor.dl1 0.073607 0.512004
##
##
## $beta
## ect1
## comindexUsd.l1 1.000000
## transcor.l1 -0.149058
## constant -4.314622
summary(VECM4.ir$rlm)
## Response comindexUsd.d :
##
## Call:
## lm(formula = comindexUsd.d ~ ect1 + OIL + cambioreal + comindexUsd.dl1 +
## transcor.dl1 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.293633 -0.050660 0.004679 0.054841 0.159715
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 -0.221699 0.025105 -8.831 1.68e-15 ***
## OIL 0.007954 0.004680 1.699 0.0912 .
## cambioreal -0.729633 0.082642 -8.829 1.71e-15 ***
## comindexUsd.dl1 -0.078662 0.065674 -1.198 0.2328
## transcor.dl1 0.073607 0.048208 1.527 0.1288
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.07778 on 161 degrees of freedom
## Multiple R-squared: 0.3371, Adjusted R-squared: 0.3165
## F-statistic: 16.38 on 5 and 161 DF, p-value: 4.759e-13
##
##
## Response transcor.d :
##
## Call:
## lm(formula = transcor.d ~ ect1 + OIL + cambioreal + comindexUsd.dl1 +
## transcor.dl1 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.32564 -0.06730 0.00807 0.06919 0.25147
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 0.103088 0.033491 3.078 0.00245 **
## OIL -0.020765 0.006244 -3.326 0.00109 **
## cambioreal 0.440158 0.110246 3.993 9.92e-05 ***
## comindexUsd.dl1 0.154206 0.087611 1.760 0.08029 .
## transcor.dl1 0.512004 0.064310 7.961 2.89e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1038 on 161 degrees of freedom
## Multiple R-squared: 0.4216, Adjusted R-squared: 0.4037
## F-statistic: 23.47 on 5 and 161 DF, p-value: < 2.2e-16
O vetor de cointegração estimado é beta=(1.000, -0.149, -4.315) e os parâmetros de ajuste de erro são (alpha1=-0.221,alpha2=0.103). Ambos os parâmetros de ajuste de erro são estatisticamente significantes e finalmente indicam a existência de uma relação estável de longo prazo. Ademais, esse modelo também apresenta maior poder explicativo do que os três primeiros modelos testados e indica que tanto o câmbio real quanto o preço do petróleo são variáveis significativas para explicar tanto o ICBR quanto as transações correntes.
A estabilidade do modelo pode ser observada no gráfico de impulso-resposta abaixo, assim como o impacto positivo das transações correntes sobre o ICBR. Ademais, pelo maior poder explicativo e relevância das variáveis nele inseridas, há indícios de que esse modelo é o que mais se adequa na explicação dos dados.
VECM4.VAR<-vec2var(vecm4,r=1)
ir<-irf(VECM4.VAR,n.ahead=20,impulse="transcor",response="comindexUsd",ortho=FALSE,runs=500)
plot(ir)
De forma satisfatória, ambos os modelos, cada um com sua característica - e não um competindo com o outro - apresentaram respostas aderentes às expectativas, dada a adição de novas séries além das propostas no enunciado. Ao ter a flexibilidade de permitir que se incluíssem variáveis exógenas, um adequado grau de explicação. Ambos também possuem resultados economicamente interpretáveis, seja pelos sinais e significância estatísitica, seja pelos gráficos de impulso-resposta apresentados.
Vale reforçar que tivemos uma pequena diferença entre as variáveis utilizadas nos melhores modelos escolhidos pelos critérios como mais adequados. Percebe-se que as transações correntes trazem um viés de mais longo prazo do que o CDS.
Ademais, os modelos são sensíveis à variações de dados: podem ser permanecer estáveis ou instáveis por pequenos horizontes temporais e isso se comprovou em análise anterior a esse exercíio quando se utilizara valores em nível, e não em logarítmo.
Ainda se leva como aprendizado do presente exercício que relações gráficas e de aparente proximidade de dinâmica não necessariamente se revertem em propriedades estatísticas, tais como a ausência de cointegração entre o Preço do Petróleo e o ICBR (lembrando que o Brent faz parte da composição do ICBR).
Podemos elencar como futuros desenvolvimentos a aplicação de outras técnicas para estimação desses parâmetros, tais como o Filtro de Kalman aplicado ao próprio VAR, ou até mesmo metodologias Bayesianas.