Neste relatório, conduzimos uma análise de dados com informações fornecidas pelo Banco Central do Brasil (BCB) e pelo Instituto Brasileiro de Geografia e Estatística (IBGE) para examinar o comportamento do consumo e do investimento no contexto econômico brasileiro. Utilizando dados confiáveis e abrangentes, investigamos as tendências de variação no consumo das famílias e nos investimentos ao longo do tempo. Além disso, exploramos como essas duas variáveis respondem a mudanças na renda e nas vendas, respectivamente. Esta análise visa fornecer insights valiosos sobre as dinâmicas econômicas no Brasil e destacar as diferenças nas respostas de consumo e investimento a essas mudanças, auxiliando na compreensão da estabilidade do consumo em comparação com a volatilidade nos investimentos.

Importando Bibliotecas: Neste bloco de código, estamos importando as bibliotecas necessárias para a análise de dados. Isso inclui as bibliotecas rbcb, tidyverse e ggthemes, que serão usadas para manipular e visualizar os dados.

# Importando as bibliotecas
library(rbcb)
library(tidyverse)
library(ggthemes)

Carregando Dados de Consumo das Famílias: Aqui, definimos a data de início e fazemos uma solicitação para obter os dados trimestrais do consumo das famílias Dados (dessazonalizados) do Sistema Gerenciador de Séries Temporais do Banco Central do Brasil (SGS - BCB). Os dados são armazenados na variável private_c.

start_d <- "1995-01-01"
# Request PIB trimestral - Dados dessazonalizados - Consumo das famílias
private_c <- get_series(22110, 
                        start_date = start_d)

print(private_c)
## # A tibble: 110 x 2
##    date       `22110`
##    <date>       <dbl>
##  1 1996-01-01    98.0
##  2 1996-04-01   101. 
##  3 1996-07-01   104. 
##  4 1996-10-01   109. 
##  5 1997-01-01   107. 
##  6 1997-04-01   107. 
##  7 1997-07-01   106. 
##  8 1997-10-01   106. 
##  9 1998-01-01   106. 
## 10 1998-04-01   106. 
## # i 100 more rows

Manipulando Dados de Consumo das Famílias: Neste bloco, renomeamos a coluna para torná-la mais descritiva, calculamos a variação percentual em relação ao período anterior e substituímos valores NA por zeros. Também calculamos a média da variação e criamos uma coluna com o desvio das variações em relação à média.

# Mudança de nome da coluna, adicionando a coluna com variação %, alterando o valor NA
private_c <- private_c %>%
  rename(private_consumption = '22110') %>% 
  mutate(per_change_cons = (private_consumption / lag(private_consumption) -1) *100) %>% 
  replace_na(list(per_change_cons = 0))

# Calculo da Média da variação
mean_consumption <- mean(private_c$per_change_cons, na.rm = TRUE)

# Criando coluna com o desvio das variações em relação a média
private_c <- private_c %>% 
  mutate(deviation_cons_mean = per_change_cons - mean_consumption)

Carregando Dados de Investimento: Similar ao bloco 2, aqui fazemos uma solicitação para obter os dados trimestrais de investimento (dessazonalizados) do SGS - BCB. Os dados são armazenados na variável investiment.

# Request PIB trimestral - Dados dessazonalizados - FBCF
investiment <- get_series(22113,
                          start_date = start_d)

print(investiment)
## # A tibble: 110 x 2
##    date       `22113`
##    <date>       <dbl>
##  1 1996-01-01    96.8
##  2 1996-04-01    98.7
##  3 1996-07-01   102. 
##  4 1996-10-01   107. 
##  5 1997-01-01   108. 
##  6 1997-04-01   109. 
##  7 1997-07-01   111. 
##  8 1997-10-01   111. 
##  9 1998-01-01   111. 
## 10 1998-04-01   112. 
## # i 100 more rows

Manipulando Dados de Investimento: Neste bloco, renomeamos a coluna, calculamos a variação percentual, substituímos valores NA e criamos uma coluna com o desvio das variações em relação à média.

# Mudança de nome da variável, adicionando a coluna com a variação %, altenando o valor NA
investiment <- investiment %>% 
  rename(investiment = '22113') %>% 
  mutate(per_change_inv = (investiment / lag(investiment) -1) *100) %>% 
  replace_na(list(per_change_inv = 0))

# Calculo da média das variações
mean_investiment <- mean(investiment$per_change_inv)

# Criando coluna com desvio das variações em relação a nédia
investiment <- investiment %>% 
  mutate(deviation_inv_mean = per_change_inv - mean_investiment)

Definindo Datas de Recessão: Neste bloco de código, criamos uma lista de datas que representam o início e o fim de períodos de recessão econômica no Brasil a partir do ano de 1996. Essas datas foram fornecidas pelo Comitê de Datação de Ciclos Econômicos (CODACE), que tem como finalidade estabelecer cronologias de referência para os ciclos econômicos brasileiros.

Essas informações são fundamentais para compreender e analisar a dinâmica econômica do país. Você pode saber mais sobre o CODACE e seu trabalho no site do FGV/Ibre através do seguinte link: CODACE - FGV/Ibre.

O código abaixo cria um novo conjunto de dados chamado recessao_data, que define os limites das áreas sombreadas em um gráfico para destacar visualmente os períodos de recessão econômica:

# Datas de recessão no Brasil a partir de 1996
recessao_dates <- as.Date(c(
  "1998-01-01", "1999-03-31",
  "2001-04-01", "2001-12-31",
  "2003-01-01", "2003-06-30",
  "2008-10-01", "2009-03-31",
  "2014-04-01", "2016-12-31",
  "2020-01-01", "2020-06-30" # Início da recessão da COVID-19
))

# Criando um novo conjunto de dados com os limites das áreas sombreadas
recessao_data <- data.frame(
  xmin = recessao_dates[seq(1, length(recessao_dates), by = 2)],
  xmax = recessao_dates[seq(2, length(recessao_dates), by = 2)],
  ymin = -Inf,
  ymax = Inf
)

Definindo um Tema Personalizado: Neste trecho de código em R, estamos definindo um tema personalizado para gráficos usando a biblioteca ggplot2. Esse tema personalizado ajusta a aparência do gráfico de acordo com nossas preferências de estilo.

# Define um tema personalizado
theme_custom <- function(base_size = 12) {
  theme_minimal(base_size = base_size) +
    theme(
      panel.background = element_rect(fill = "white"),  # Cor de fundo personalizada
      panel.grid.major = element_line(color = "lightgrey"),  # Cor das linhas de grade
      axis.title = element_text(family = "sans", size = 15),
      axis.text = element_text(family = "sans", size = 12),
      plot.title = element_text(hjust = 0.5, size = 25, family = "sans"),
      plot.subtitle = element_text(hjust = 0.5, size = 15, family = "sans"),
      plot.caption = element_text(size = 9),
      axis.text.x = element_text(size = 9.5), # Tamanho dos ticks no eixo x
      axis.text.y = element_text(size = 12 ) # Tamanho dos ticks no eixo y
    )
}

Criando Gráfico de Linhas: Neste último bloco, usamos a biblioteca ggplot2 para criar um gráfico de linhas que compara as variações do consumo das famílias (em azul) e do investimento (em vermelho) ao longo do tempo. Também adicionamos rótulos, títulos e uma legenda à figura. Além disso, incluímos informações de fonte, indicando que os dados foram obtidos do SGS - BCB e a data de acesso.

ggplot() +
  geom_line(data = private_c, aes(x = date, y = deviation_cons_mean), 
            color = "blue", linewidth = 1.2, ) +
  geom_line(data = investiment, aes(x = date, y = deviation_inv_mean), 
            color = "red", linewidth = 1.2) +
  scale_x_date(date_labels = "%Y", date_break = "1 years") +
  scale_y_continuous(breaks = seq(-20, 20, by = 5)) +
  labs(x = "Anos", y = "Variação percentual",
       title = "Taxas de variação do consumo e do investimento no Brasil desde 1996",
       subtitle = "As variações relativas no investimento são bem maiores que as variações relativas no consumo.",
       caption = "Fonte: Consumo das famílias SCN-2010, FBCF SCN-2010. Fonte: IBGE. Dados obtidos do SGS - Sistema Gerenciador de Séries Temporais do Banco Central do Brasil (BCB). Acesso em 17/09/2023.") +
  geom_text(data = data.frame(x = as.Date("2001-01-01"), y = 10.5, label = "Desvio do crescimento percentual do consumo em relação à sua média"), 
            aes(x = x, y = y, label = label), color = "blue", size = 5.5, hjust = 0) +
  geom_text(data = data.frame(x = as.Date("2000-01-01"), y = -13.5, label = "Desvio do crescimento percentual do investimento em relação à sua média"), 
            aes(x = x, y = y, label = label), color = "red", size = 5.5, hjust = 0) +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  theme_custom() +  # Aplicar um tema minimalista
  geom_rect(data = recessao_data, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
            fill = "grey", alpha = 0.3)   # Reduz a intensidade do sombreamento