library(tidyverse)
library(deflateBR)
library(readxl)
library(lubridate)
library(mFilter)
library(seasonal)Análise da Série do Boi Gordo
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
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.