Deflacionamento de Preços

A inflação, um aumento generalizado nos preços, e a deflação, sua queda, são fenômenos econômicos importantes que alteram o valor do dinheiro ao longo do tempo. Existem várias teorias para explicar a inflação. A teoria monetarista aponta o aumento da oferta de moeda pelo Banco Central como a principal causa. Já outras visões, como a do conflito distributivo e da inércia inflacionária, explicam a inflação como resultado da luta entre diferentes grupos econômicos por uma maior fatia da renda. O conflito distributivo ocorre quando a negociação por salários mais altos (por parte dos trabalhadores) ou o aumento de preços (por parte dos capitalistas) gera uma espiral de aumentos. A inércia inflacionária é a persistência desse processo através de mecanismos de reajuste periódico de preços.

Ao analisar dados econômicos, é essencial ajustar os valores para a inflação. Isso evita que erros na interpretação dos dados sejam causados apenas por variações de preços e não por mudanças econômicas “reais”. Este texto explica como fazer esse ajuste, chamado deflacionamento, usando o software R. O uso do R para essa tarefa oferece a vantagem de garantir que os passos podem ser reproduzidos por outros pesquisadores, além de permitir o acesso direto a dados online, o que reduz a chance de erros manuais. Para seguir as instruções, é necessário ter um conhecimento básico do R e dos pacotes utilizados.

Representação Matemática

A inflação mede a variação de preços de uma cesta de bens ao longo do tempo. A fórmula para calcular a taxa de inflação (πt) em um período t, em relação ao período anterior (t−1), é dada por: \[ \pi_t = \frac{C_t - C_{t-1}}{C_{t-1}} = \frac{C_t}{C_{t-1}} - 1 \] Onde C é o custo da cesta de bens. Se πt >0, houve inflação; se πt <0, houve deflação.

O deflacionamento é o processo de remover o efeito da inflação dos valores de uma série econômica, como salários ou dívidas, para entender seu poder de compra real. Isso é feito definindo um período-base de referência e ajustando todos os outros valores com base nesse período. No R, esse processo envolve quatro etapas:

  1. Encontrar a série de inflação (por exemplo, o IPCA).

  2. Calcular a evolução dos preços (índice de preços).

  3. Determinar os termos de deflacionamento.

  4. Aplicar esses termos à série de dados que você quer analisar.

Análise do Salário Mínimo no Brasil

Este documento apresenta a análise do salário mínimo nominal e real no Brasil, utilizando dados do IPEA e do SIDRA/IBGE. O objetivo é visualizar o poder de compra do salário mínimo ao longo do tempo, deflacionando-o pelo IPCA.

Configuração e Carregamento de Pacotes Primeiro, instalamos e carregamos os pacotes necessários para a análise. O pacote pacman é útil para gerenciar a instalação e o carregamento de outros pacotes de forma simples.

Instala e carrega os pacotes necessários

if (!require("pacman")) install.packages("pacman")
## Loading required package: pacman
pacman::p_load(sidrar, ipeadatar, dplyr, showtext, lubridate, ggplot2, deflateBR, wesanderson)

Ativa a renderização de texto para gráficos

showtext_auto()
font_add_google("ubuntu", "ubuntu")

Coleta e Preparação dos Dados

Nesta seção, coletamos os dados do salário mínimo do IPEADATA e do índice de preços (IPCA) do SIDRA/IBGE. Em seguida, combinamos os dois conjuntos de dados em um único data frame e realizamos a limpeza necessária.

# ID da variável salário mínimo vigente: "MTE12_SALMIN12"

salario <- ipeadatar::ipeadata("MTE12_SALMIN12") %>% 
  filter(date >= as.Date("2014-01-01")) %>% 
  select(date, value) %>% 
  as_tibble()

# Dados IPCA - Índice Nacional de Preços ao Consumidor Amplo

indice <- sidrar::get_sidra(api =
"/t/6691/n1/all/v/2266/p/all/d/v2266%2013") %>% 
  select("date" =`Mês (Código)`, "indice" = `Valor`) %>% 
  mutate(date = lubridate::ym(date))
## All others arguments are desconsidered when 'api' is informed
# Juntando dados e removendo valores faltantes

sm <- left_join(salario, indice, by = "date") %>% 
  tidyr::drop_na()

Deflacionamento dos Valores

Índice de Preços O próximo passo é criar uma série de índices de preços para acompanhar a evolução da inflação. Para isso, definimos um período de referência (neste caso, dezembro de 2018) com um valor-base de 100. A partir desse ponto, o índice de cada mês é calculado com base na taxa de inflação do período anterior.

Matematicamente, o custo de uma cesta de bens (Ct) no período t pode ser obtido a partir do custo no período anterior (Ct−1) e da taxa de inflação (πt): \[C_t = C_{t-1}(1 + \pi_t)\] Para encontrar a inflação acumulada a partir do período inicial (t≥1), multiplicamos o valor da cesta-base por todos os fatores de crescimento mensais: \[C_t = \prod_{i=1}^t C_{i-1}(1 + \pi_i)\] Aqui, calculamos o valor real do salário mínimo, usando o IPCA para ajustar os valores pela inflação. A base para o deflacionamento é julho de 2025.

# Calcular o fator de deflacionamento, com o período base em julho  de 2025
sm <- sm %>% 
  mutate(fator = (indice[date == "2025-07-01"] / indice))

# Calcular o valor real para os meses
sm <- sm %>% 
  mutate(real = fator * value)

Visualização dos Dados

Esta parte do código gera um gráfico que compara o salário mínimo nominal e o real ao longo do tempo.

ggplot(sm, aes(x = date)) + 
  geom_line(aes(y = value, colour = "Nominal"), size = 1) + 
  geom_line(aes(y = real, colour = "Real"), size = 1) + 
  scale_colour_manual(NULL, values = c("#3182BD", "#B3E2CD")) +
  scale_y_continuous(n.breaks = 8) +
  labs( x = NULL, y = "R$", title = "Salário Mínimo no Brasil", 
        subtitle = "Valores em Reais deflacionados pelo IPCA a preços de julho/2025.", caption = "IBGE e IPEA." ) +
  theme_minimal() + 
  theme( legend.text = element_text(family = "ubuntu", color = "#000000", size = 8), 
         axis.text.y = element_text(family = "ubuntu", color = "#000000", size = 8, hjust = 1.25), 
         plot.title = element_text(family = "Ubuntu", face = "bold", size = 25), 
         plot.subtitle = element_text(family = "Ubuntu", face = "italic", size = 15), 
         axis.title = element_text(size = 8), plot.margin = margin(t = 20, r = 8, b = 7, l = 15), 
         legend.position = "right", 
         panel.grid = element_blank()) 

Deflacionando com o Pacote deflateBR

O pacote deflateBR oferece uma forma mais simplificada de realizar o deflacionamento. O código abaixo demonstra como obter o mesmo resultado usando essa ferramenta.

# Utiliza o pacote deflateBR

deflate = deflate(nominal_values = sm$value,
                  nominal_dates = as.Date(sm$date %m+% months(1)),
                  real_date = format("07/2025"),
                  index = "ipca")
## 
## Downloading necessary data from IPEA's API
## ...
# Visualizando os resultados
head(deflate)
## [1] 1317.719 1307.521 1405.674 1388.733 1370.639 1360.976

Teste e Visualização Adicional

A seguir, um teste para deflacionar os valores com uma base diferente, julho de 2015, e um gráfico com uma paleta de cores alternativa.

# Deflacionamento com base em julho de 2015
smt <- left_join(salario, indice, by = "date") %>% 
  tidyr::drop_na()

smt <- smt %>% 
  mutate(fator = (indice[date == "2015-07-01"] / indice)) %>% 
  mutate(real = fator * value)

# Gráfico com base diferente

ggplot(smt, aes(x = date)) + 
  geom_line(aes(y = value, colour = "Nominal"), size = 1) + 
  geom_line(aes(y = real, colour = "Real"), size =1) + 
  scale_colour_manual(NULL, values = c("#660333", "#990099")) + 
  scale_y_continuous(n.breaks = 8) + 
  labs( x = NULL, y = "R$", title = "Salário Mínimo no Brasil", 
                                           subtitle = "Valores em Reais deflacionados pelo IPCA a preços de junho/2014.", 
        caption = "IBGE e IPΕΑ." ) + 
  theme_minimal() + 
  theme( legend.text = element_text(family = "ubuntu", color = "#000000", size = 8), 
         axis.text.y = element_text(family = "ubuntu", color = "#000000", size = 8, hjust = 1.25), 
         plot.title = element_text(family = "Ubuntu", face = "bold", size = 25), 
         plot.subtitle = element_text(family = "Ubuntu", face = "italic", size = 15), axis.title = element_text(size = 8), 
         plot.margin = margin(t = 20, r = 8, b = 7, l = 15), legend.position = "right", 
         panel.grid = element_blank()
) 

Exemplo

Demonstramos uma outra paleta de cores para o gráfico, usando o pacote wesanderson.

ggplot(sm, aes(x = date)) + 
  geom_line(aes(y = value, colour = "Nominal"), size = 1) + 
  geom_line(aes(y = real, colour = "Real"), size = 1) + 
  scale_color_manual(NULL, values = wes_palette(n = 2, name = "GrandBudapest2")) + 
  scale_y_continuous(n.breaks = 8) + 
  labs( x = NULL,y = "R$", title = "Salário Mínimo no Brasil", 
        subtitle = "Valores em Reais deflacionados pelo IPCA a preços de julho/2025.", 
        caption = "IBGE e IPEA." ) + theme_minimal() + 
  theme( legend.text = element_text(family = "Ubuntu", color = "#000000", size = 8), 
         axis.text.y = element_text(family = "Ubuntu", color = "#000000", size = 8, hjust = 1.25), 
         plot.title = element_text(family = "Ubuntu", face = "bold", size = 25), 
         plot.subtitle = element_text(family = "Ubuntu", face = "italic", size = 15), 
         axis.title = element_text(size = 8), plot.margin = margin(t = 20, r = 8, b = 7, l = 15), 
         legend.position = "right", 
         panel.grid = element_blank())