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.
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:
Encontrar a série de inflação (por exemplo, o IPCA).
Calcular a evolução dos preços (índice de preços).
Determinar os termos de deflacionamento.
Aplicar esses termos à série de dados que você quer analisar.
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.
if (!require("pacman")) install.packages("pacman")
## Loading required package: pacman
pacman::p_load(sidrar, ipeadatar, dplyr, showtext, lubridate, ggplot2, deflateBR, wesanderson)
showtext_auto()
font_add_google("ubuntu", "ubuntu")
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()
Í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)
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())
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
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()
)
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())