Análise da Série do Boi Gordo

Author

Alef Ryan

1 Introdução

Este relatório tem como objetivo analisar a série temporal do preço do boi gordo, realizando:

  • leitura e tratamento dos dados;
  • deflacionamento da série;
  • decomposição sazonal aditiva e multiplicativa;
  • teste formal de sazonalidade com dummies mensais;
  • extração da tendência e do ciclo pelo filtro de Hodrick-Prescott;
  • comparação entre tendência por média móvel e tendência pelo filtro HP.
  • constratando resultados com o relatório do CEPEA

2 Pacotes

library(tidyverse)
library(deflateBR)
library(readxl)
library(lubridate)
library(mFilter)
library(seasonal)

3 Leitura e tratamento dos dados

dados <- read_excel("C:/Users/Alef/Documents/DerivativosR/dados/indicador_boi_gordo_m2.xls", skip = 3)

dados$Valor <- as.numeric(gsub(",", ".", dados$Valor))
dados$Data  <- my(dados$Data)

glimpse(dados)
Rows: 231
Columns: 2
$ Data  <date> 2007-01-01, 2007-02-01, 2007-03-01, 2007-04-01, 2007-05-01, 200…
$ Valor <dbl> 53.57, 55.14, 55.93, 55.82, 55.55, 57.40, 61.48, 64.35, 61.40, 6…
head(dados)
# A tibble: 6 × 2
  Data       Valor
  <date>     <dbl>
1 2007-01-01  53.6
2 2007-02-01  55.1
3 2007-03-01  55.9
4 2007-04-01  55.8
5 2007-05-01  55.6
6 2007-06-01  57.4

4 Deflacionamento da série

A série nominal é deflacionada utilizando o IPCA, tomando como referência o mês anterior ao último mês disponível na base.

reference <- format(max(dados$Data) %m-% months(1), "%m/%Y")
print(reference)
[1] "02/2026"
dados <- dados |>
  mutate(valor_real = deflate(Valor, Data, reference, "ipca"))

5 Construção da série temporal mensal

serie_ts <- ts(
  dados$valor_real,
  start = c(year(min(dados$Data)), month(min(dados$Data))),
  frequency = 12
)

6 Decomposição sazonal aditiva

Na decomposição aditiva, assume-se que a série é dada por:

$ Y_t= T_t + S_t + E_t$

em que (T_t) representa a tendência, (S_t) a sazonalidade e (E_t) o componente irregular.

decomp_aditiva <- decompose(serie_ts, type = "additive")

dados$tend_aditiva   <- as.numeric(decomp_aditiva$trend)
dados$saz_aditiva    <- as.numeric(decomp_aditiva$seasonal)
dados$resid_aditiva  <- as.numeric(decomp_aditiva$random)
dados$dessaz_aditiva <- as.numeric(serie_ts - decomp_aditiva$seasonal)

6.1 Gráfico do componente sazonal aditivo em 2020

dados |>
  filter(year(Data) == 2020) |>
  ggplot(aes(x = Data, y = saz_aditiva)) +
  geom_line(linewidth = 0.8) +
  labs(
    title = "Componente sazonal - método aditivo",
    x = "Data",
    y = "Sazonalidade"
  ) +
  theme_minimal()

6.2

7 Decomposição sazonal multiplicativa

Na decomposição multiplicativa, assume-se que a série é dada por:

$ Y_t = T_t S_t E_t $

decomp_multip <- decompose(serie_ts, type = "multiplicative")

dados$tend_multip   <- as.numeric(decomp_multip$trend)
dados$saz_multip    <- as.numeric(decomp_multip$seasonal)
dados$resid_multip  <- as.numeric(decomp_multip$random)
dados$dessaz_multip <- as.numeric(serie_ts / decomp_multip$seasonal)

7.1 Gráfico do componente sazonal multiplicativo em 2020

dados |>
  filter(year(Data) == 2020) |>
  ggplot(aes(x = Data, y = saz_multip)) +
  geom_line(linewidth = 0.8) +
  labs(
    title = "Componente sazonal - método multiplicativo",
    x = "Data",
    y = "Sazonalidade"
  ) +
  theme_minimal()

8 Inspeção visual da sazonalidade

plot(serie_ts, main = "Série temporal do preço real do boi gordo", ylab = "Preço real", xlab = "Tempo")

monthplot(serie_ts, col.base = 2, lty.base = 2, main = "Gráfico sazonal mensal")
legend("topleft",
       legend = c("Boi gordo", "Média"),
       lty = c(1, 2),
       col = c(1, 2),
       bty = "n")

9 Teste formal de sazonalidade com dummies mensais

Para verificar formalmente a presença de sazonalidade, estima-se um modelo com dummies mensais e compara-se com um modelo contendo apenas intercepto.

dados$mes <- factor(month(dados$Data))

modelo_sazonal <- lm(valor_real ~ mes, data = dados)
summary(modelo_sazonal)

Call:
lm(formula = valor_real ~ mes, data = dados)

Residuals:
    Min      1Q  Median      3Q     Max 
-105.98  -43.35  -17.73   28.12  165.93 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 259.2085    14.3736  18.034   <2e-16 ***
mes2          0.6192    20.3274   0.030    0.976    
mes3         -0.1970    20.3274  -0.010    0.992    
mes4         -4.6985    20.5931  -0.228    0.820    
mes5        -11.3721    20.5931  -0.552    0.581    
mes6        -11.6658    20.5931  -0.566    0.572    
mes7        -10.3254    20.5931  -0.501    0.617    
mes8        -10.9621    20.5931  -0.532    0.595    
mes9         -8.0954    20.5931  -0.393    0.695    
mes10        -3.3793    20.5931  -0.164    0.870    
mes11         6.9326    20.5931   0.337    0.737    
mes12         5.4479    20.5931   0.265    0.792    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 64.28 on 219 degrees of freedom
Multiple R-squared:  0.01003,   Adjusted R-squared:  -0.0397 
F-statistic: 0.2017 on 11 and 219 DF,  p-value: 0.9974
modelo_medio <- lm(valor_real ~ 1, data = dados)
summary(modelo_medio)

Call:
lm(formula = valor_real ~ 1, data = dados)

Residuals:
    Min      1Q  Median      3Q     Max 
-102.06  -43.93  -18.30   25.75  161.30 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  255.287      4.148   61.55   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 63.04 on 230 degrees of freedom

9.1 Comparação entre os modelos

anova(modelo_sazonal, modelo_medio)
Analysis of Variance Table

Model 1: valor_real ~ mes
Model 2: valor_real ~ 1
  Res.Df    RSS  Df Sum of Sq      F Pr(>F)
1    219 904914                            
2    230 914081 -11     -9167 0.2017 0.9974

10 Tendência e ciclo pelo filtro de Hodrick-Prescott

O filtro HP decompõe a série em tendência e ciclo. Para dados mensais, utiliza-se com frequência (= 14400).

hp_boi <- hpfilter(dados$valor_real, freq = 14400, type = "lambda")

dados$tendencia_hp <- as.numeric(hp_boi$trend)
dados$ciclo_hp     <- as.numeric(hp_boi$cycle)

10.1 Visualização do filtro HP

plot(hp_boi)

10.2 Gráfico da série real e da tendência HP

ggplot(dados, aes(x = Data)) +
  geom_line(aes(y = valor_real), linewidth = 0.8) +
  geom_line(aes(y = tendencia_hp), linewidth = 1, color = "blue") +
  labs(
    title = "Preço real do boi gordo e tendência de Hodrick-Prescott",
    x = "Data",
    y = "Preço"
  ) +
  theme_minimal()

10.3 Gráfico do ciclo

ggplot(dados, aes(x = Data)) +
  geom_line(aes(y = ciclo_hp), linewidth = 1, color = "red") +
  labs(
    title = "Ciclo do preço real do boi gordo",
    x = "Data",
    y = "Componente cíclico"
  ) +
  theme_minimal()

11 Tendência por média móvel de 12 meses

Além do filtro HP, pode-se extrair a tendência por meio de uma média móvel centrada de 12 meses.

tend_mm12 <- stats::filter(serie_ts, filter = rep(1/12, 12), sides = 2)
dados$tend_mm12 <- as.numeric(tend_mm12)

11.1 Comparação entre média móvel e filtro HP

ggplot(dados, aes(x = Data)) +
  geom_line(aes(y = tend_mm12), linewidth = 0.8, color = "red") +
  geom_line(aes(y = tendencia_hp), linewidth = 1, color = "blue") +
  labs(
    title = "Média móvel de 12 meses e tendência de Hodrick-Prescott",
    x = "Data",
    y = "Preço"
  ) +
  theme_minimal()

11.2 Analise do agromensal do boi gordo

O Agromensal de janeiro de 2026 aponta para um aumento da demanda interna e externa, o relatório não descarta uma expansão da oferta nacional do ativo, ainda que comedido. É esperado que em ano de eleição e copa do mundo impulsionem o consumo, assim comoa isenção do imposto de renda.

A tendência esperada concluída através do agromensal é de alta dos preços do boi gordo.

O agromensal de fevereiro de 2026 apresentou que as vendas de fevereiro bateram recordes. Além disso, chuvas favoreceram a pastagem, que terá um efeito de diminuição da oferta no curto prazo para a engorda do boi.

Especialistas afirmam que o preço deve seguir firme.

11.3 Conciliação de análises

O ciclo aponta um hiato positivo, as tendências estimadas do produto potencial apotam um aumento. A análise estatística indica a falta de significância do componente sazonal na série boi gordo, assim, não esperamos para o meio do ano um possível efeito sazonal de baixa dos preços.

As Análise dos dados nos direciona ao entendimento de convergência com o exposto no agro mensal. Esperamos que haja tendência de alta nos preços para o ano de 2026.

Portanto, é preciso que os transaformadores, ou seja, aqueles que utilizam o ativo como insumo proteja-se da alta dos preços.