options(scipen=999)options(max.print =1000000)par(mfrow=c(1,1))setwd("C:/Users/henri/OneDrive/Área de Trabalho/GARCH")library(tseries)library(BatchGetSymbols)library(readxl)library(tidyverse)library(ggthemes)library(deflateBR)library(knitr)library(mFilter)library(forecast)library(rbcb)
Código
preco <-read_excel("BoiMes.xlsx")# Indice de Commodities Agropecuário do BCBIndice_AgroPec <-get_series(27575,start_date ="2014-01-01",end_date ="2024-08-01")
Futuro
Código
ultimo_valorf <-tail(preco, 1)preco |>ggplot(aes(x = Data, y = Valor_fut)) +geom_line(size =1, color ="#132157") +# Linha do gráficogeom_point(data = ultimo_valorf, aes(x = Data, y = Valor_fut), size =3, color ="red") +# Ponto no último valorgeom_text(data = ultimo_valorf, aes(x = Data, y = Valor_fut, label =round(Valor_fut, 2)), vjust =-1, hjust =0.6, color ="red", size =3.5) +# Texto do último valorlabs(title ="Boi Gordo Preço Futuro Mensal",subtitle ="2014/01/01 2024/08/01",x ="",y ="Preço",caption ="Fonte: Investing.com") +# Rótulos e legendastheme_economist() +# Tema minimalistatheme(plot.title =element_text(hjust =0.5), # Centralizar títuloplot.subtitle =element_text(hjust =0.5))
Código
retornos <- preco |>mutate(log_preco =log(Valor_fut),diff_log_preco =c(NA, diff(log_preco))) |>select(Data, diff_log_preco) |>na.omit()#--------------------------------------#ultimo_valorr <-tail(retornos, 1) retornos |>ggplot(aes(x = Data, y = diff_log_preco)) +geom_line(size =1, color ="#132157") +# Linha do gráficogeom_point(data = ultimo_valorr, aes(x = Data, y = diff_log_preco), size =3, color ="red") +# Ponto no último valorgeom_text(data = ultimo_valorr, aes(x = Data, y = diff_log_preco, label =round(diff_log_preco, 2)), vjust =-1, hjust =0.6, color ="red", size =3.5) +# Texto do último valorlabs(title ="Boi Gordo Retorno do Preço Futuro Mensal",subtitle ="2014/01/01 2024/08/01",x ="",y ="Preço",caption ="Fonte: Investing.com") +# Rótulos e legendastheme_economist() +# Tema minimalistatheme(plot.title =element_text(hjust =0.5), # Centralizar títuloplot.subtitle =element_text(hjust =0.5))
Spot
Código
ultimo_valor <-tail(preco, 1)preco |>ggplot(aes(x = Data, y = Valor)) +geom_line(size =1, color ="#132157") +# Linha do gráficogeom_point(data = ultimo_valor, aes(x = Data, y = Valor), size =3, color ="red") +# Ponto no último valorgeom_text(data = ultimo_valor, aes(x = Data, y = Valor, label =round(Valor, 2)), vjust =-1, hjust =0.6, color ="red", size =3.5) +# Texto do último valorlabs(title ="Boi Gordo Preço Spot Mensal",subtitle ="2014/01/01 2024/08/01",x ="",y ="Preço",caption ="Fonte: Cepea") +# Rótulos e legendastheme_economist() +# Tema minimalistatheme(plot.title =element_text(hjust =0.5), # Centralizar títuloplot.subtitle =element_text(hjust =0.5))
Código
retornosf <- preco |>mutate(log_preco =log(Valor),diff_log_preco =c(NA, diff(log_preco))) |>select(Data, diff_log_preco) |>na.omit()#--------------------------------------#ultimo_valorf <-tail(retornosf, 1) retornosf |>ggplot(aes(x = Data, y = diff_log_preco)) +geom_line(size =1, color ="#132157") +# Linha do gráficogeom_point(data = ultimo_valorf, aes(x = Data, y = diff_log_preco), size =3, color ="red") +# Ponto no último valorgeom_text(data = ultimo_valorf, aes(x = Data, y = diff_log_preco, label =round(diff_log_preco, 2)), vjust =-1, hjust =0.6, color ="red", size =3.5) +# Texto do último valorlabs(title ="Boi Gordo Retorno do Preço Spot Mensal",subtitle ="2014/01/01 2024/08/01",x ="",y ="Preço",caption ="Fonte: Cepea") +# Rótulos e legendastheme_economist() +# Tema minimalistatheme(plot.title =element_text(hjust =0.5), # Centralizar títuloplot.subtitle =element_text(hjust =0.5))
Preços Deflacionado
Código
times =seq(as.Date("2014/1/1"), by ="month", length.out =length(preco$Data))Boif <-ts(preco$Valor_fut, frequency =12, start =c(2014,01,01)) |>deflate(nominal_dates = times, real_date ="07/2024", index ="igpm")Bois <-ts(preco$Valor, frequency =12, start =c(2014,01,01)) |>deflate(nominal_dates = times, real_date ="07/2024", index ="igpm")ts.plot(Boif, Bois, col =c("blue", "red"), lty =1:2, gpars =list(xlab ="Ano", ylab ="Índice", main ="Spot x Futuro"))legend("topright", legend =c("Boi Fut", "Boi Spot"), col =c("blue", "red"), lty =1:2)
Ciclo
Código
Boi_Hp <-hpfilter(Boif, freq =14400)plot(Boi_Hp$cycle, main ="Ciclo Boi Fut", col ="blue4");abline(h =0, col ="grey")
Código
Bois_Hp <-hpfilter(Bois, freq =14400)plot(Bois_Hp$cycle, main ="Ciclo Boi Spot", col ="red4");abline(h =0, col ="grey")
Código
ts.plot(Boi_Hp$cycle, Bois_Hp$cycle, col =c("blue4", "red4"), lty =1:2, gpars =list(xlab ="Ano", ylab ="Índice", main ="Spot x Futuro"))legend("topright", legend =c("Boi Fut", "Boi Spot"), col =c("blue4", "red4"), lty =1:2);abline(h =0, col ="grey")
Índice Agropecuário
Código
ultimo_valor <-tail(Indice_AgroPec, 1)Indice_AgroPec |>ggplot(aes(x = date, y =`27575`)) +geom_line(size =1, color ="#132157") +# Linha do gráficogeom_point(data = ultimo_valor, aes(x = date, y =`27575`), size =3, color ="red") +# Ponto no último valorgeom_text(data = ultimo_valor, aes(x = date, y =`27575`, label =round(`27575`, 2)), vjust =-0.5, hjust =0.6, color ="red", size =3.5) +# Texto do último valorlabs(title ="Índice de Commodities - Brasil - Agropecuária",subtitle ="2014/01/01 2024/08/01",x ="",y ="Pontos",caption ="Fonte: BCB") +# Rótulos e legendastheme_economist() +# Tema minimalistatheme(plot.title =element_text(hjust =0.5), # Centralizar títuloplot.subtitle =element_text(hjust =0.5))
Código
df <-data.frame(Data = preco$Data, Boif, Bois)
Tabela de Estatísticas
Média e Desvio
Código
retornos <- df |>mutate(rboif =c(NA, diff(log(Boif))),rbois =c(NA, diff(log(Bois)))) |>select(Data, rbois, rboif) |>na.omit()# Calcular indicadores de desempenhoestatisticas <-function(retorno) { media <-mean(retorno) desvio <-sd(retorno)list(media = media, desvio = desvio)}# Calcular indicadores para todas as empresasEstatisticas <-lapply(retornos, estatisticas)df2 <-data.frame(Boi_Spot = Estatisticas$rbois,Boi_Fut = Estatisticas$rboif)kable(df2)
Title:
GARCH Modelling
Call:
garchFit(formula = ~arma(2, 1) + garch(2, 1), data = retornos$rbois,
include.mean = F, trace = F)
Mean and Variance Equation:
data ~ arma(2, 1) + garch(2, 1)
<environment: 0x00000195f2bfe2e8>
[data = retornos$rbois]
Conditional Distribution:
norm
Coefficient(s):
ar1 ar2 ma1 omega alpha1 alpha2
-0.15371412 -0.12317226 0.17467483 0.00046728 0.41683260 0.73741687
beta1
0.00000001
Std. Errors:
based on Hessian
Error Analysis:
Estimate Std. Error t value Pr(>|t|)
ar1 -0.15371412 0.20434082 -0.752 0.4519
ar2 -0.12317226 NaN NaN NaN
ma1 0.17467483 0.21198876 0.824 0.4100
omega 0.00046728 NaN NaN NaN
alpha1 0.41683260 0.25796804 1.616 0.1061
alpha2 0.73741687 0.38795916 1.901 0.0573 .
beta1 0.00000001 NaN NaN NaN
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Log Likelihood:
235.6627 normalized: 1.855611
Description:
Sat Aug 10 12:53:58 2024 by user: henri
Standardised Residuals Tests:
Statistic p-Value
Jarque-Bera Test R Chi^2 135.1792067 0.0000000000
Shapiro-Wilk Test R W 0.9401118 0.0000263034
Ljung-Box Test R Q(10) 14.8138911 0.1389958079
Ljung-Box Test R Q(15) 19.5074086 0.1916540735
Ljung-Box Test R Q(20) 21.5790772 0.3637806752
Ljung-Box Test R^2 Q(10) 1.9563733 0.9966637077
Ljung-Box Test R^2 Q(15) 5.9528857 0.9805283165
Ljung-Box Test R^2 Q(20) 6.8565256 0.9971297336
LM Arch Test R TR^2 1.9389920 0.9994937829
Information Criterion Statistics:
AIC BIC SIC HQIC
-3.600987 -3.444221 -3.606650 -3.537295
Código
round(Garch21@fit$matcoef, 6)
Estimate Std. Error t value Pr(>|t|)
ar1 -0.153714 0.204341 -0.752244 0.451904
ar2 -0.123172 NaN NaN NaN
ma1 0.174675 0.211989 0.823982 0.409950
omega 0.000467 NaN NaN NaN
alpha1 0.416833 0.257968 1.615830 0.106131
alpha2 0.737417 0.387959 1.900759 0.057334
beta1 0.000000 NaN NaN NaN
O parâmetro Beta do Modelo GARCH representa a persistência da volatilidade ao longo do tempo, ou seja, o tempo que a série leva para retornar ao seu estado de equilíbrio após um choque. Além disso, pode ser utilizado como um indicador da eficiência do mercado. Quanto maior o Beta, maior o tempo de recuperação pós choque.
Por outro lado, o parâmetro Alfa reflete a reação imediata da volatilidade a um choque, indicando quão acentuada será essa volatilidade logo após o evento. Quanto maior o alfa, mais pontiagudo será.
Quando a soma dos parâmetros Alfa e Beta se aproxima de 1, isso sugere que o tempo necessário para a dissipação do efeito do choque será maior.