Como deflacionar uma série no R

Algumas pessoas ainda devem se lembrar de quando era possível "fazer o rancho", as compras do mês, com apenas cem reais no bolso, mas já faz bastante tempo que uma simples ida ao supermercado é deveras custosa. O carro popular que podia ser adquirido por menos de R$ 30 mil nos anos 1990 é facilmente vendido por não menos de R$ 50 mil hoje. Ou seja, com uma nota de R$ 100 não se compra a mesma quantidade de bens hoje do que era possível há 20 anos e isso constitui um problema econômico básico, motivo pelo qual devemos deflacionar valores monetários para poder compará-los no tempo.

Sendo assim, se queremos ter uma visão realística quando analisando uma série de preços, devemos transformar os valores nominais para valores deflacionados, ou reais, contabilizando o efeito inflacionário do período. Apesar de ser um procedimento padrão, costumam haver alguns equívocos, de modo que iremos esclarecer alguns pontos e explorar uma abordagem moderna da técnica usando a linguagem R.

Para transformar uma série de preços para valores reais, são necessárias duas coisas: os dados nominais e um índice de preços adequado. A série de dados nominais pode ser qualquer uma que mede algo em valores correntes (R$), como por exemplo a série do salário mínimo, disponibilizada pelo IPEADATA. Já o índice de preços adequado pode vir de diversas fontes, os mais conhecidos no Brasil são o Índice Nacional de Preços ao Consumidor Amplo (IPCA), o Índice Nacional de Preços ao Consumidor (INPC) e o Índice Geral de Preços - Mercado (IGP-M), este divulgado pela FGV e aqueles pelo IBGE. O que esses índices fazem é medir o preço de uma cesta de produtos em um dado período de tempo, geralmente um mês cheio, em relação a um outro período de tempo base.

Com esses dois dados, basta aplicar a fórmula de deflacionamento a seguir:

Onde:

é o valor real, ou deflacionado, no período i na data-base j

 

é o índice de preços fixado na data-base j

 

é o índice de preços no período i

 

é o valor ou preço nominal no período i

 

Com esta fórmula é possível obter o valor deflacionado a partir da multiplicação do valor nominal em um dado período pela razão entre o índice de preços na data-base de referência em relação ao índice no período de análise/interesse. Agora vamos exemplificar com dados para facilitar o entendimento.

Como exemplo, usaremos os dados do salário mínimo do Brasil a partir de 2000 e o INPC para deflacionar a série. Podemos obter esses dados no R com o código a seguir:

# Instalar/carregar pacotes
if(!require("pacman")) install.packages("pacman")
pacman::p_load(
"deflateBR",
"dplyr",
"lubridate",
"httr",
"sidrar",
"purrr",
"ggplot2",
"deflateBR",
"tidyr",
"magrittr"
)

## Coletar dados
# Salário mínimo nominal (código IPEADATA = MTE12_SALMIN12) usando web-scrapping
dados_nominal <- httr::GET(
"http://ipeadata.gov.br/api/odata4/ValoresSerie(SERCODIGO='MTE12_SALMIN12')"
)

# Dados do INPC usando API do Sidra/IBGE
dados_indice <- sidrar::get_sidra(api = "/t/1736/n1/all/v/2289/p/all/d/v2289%2013")

## Tratar dados e filtrar desde o ano 2000
# Salário mínimo nominal
nominal <- httr::content(dados_nominal)[[2]] %>% 
dplyr::bind_rows() %>% 
dplyr::select("date" = `VALDATA`, "nominal" = `VALVALOR`) %>% 
dplyr::mutate(date = lubridate::as_date(date)) %>% 
dplyr::filter(date >= as.Date("2000-01-01"))

# INPC
indice <- dados_indice %>% 
dplyr::select(
"date" = `Mês (Código)`,
"indice" = `Valor`
) %>%
dplyr::mutate(date = lubridate::ym(date))

## Juntar dados
salario_minimo <- dplyr::left_join(nominal, indice, by = "date") %>% 
tidyr::drop_na()

Os dados obtidos podem ser visualizados na tabela abaixo:

Agora vamos supor que queremos saber o salário mínimo real de novembro de 2020 na data-base de abril de 2021. Primeiro calculamos o chamado fator de deflacionamento, que é a fração entre parênteses na fórmula acima, fixando a data-base em abril/2021. O resultado e o cálculo podem ser vistos a seguir:

# Calcular fator de deflacionamento
salario_minimo %<>% 
dplyr::mutate(
fator = (indice[date == "2021-04-01"]/indice)
)

Em seguida, para transformar o valor nominal (R$ 1.045,00) em valor real, basta multiplicá-lo por 1,0384, isto é, R$ 1.045,00 de novembro de 2020 equivale a R$ 1.085,12 em abril de 2021.

Agora que sabemos o procedimento passo a passo do cálculo de deflacionamento, vamos aplicar a fórmula na série do salário mínimo e plotar um gráfico comparativo.

# Calcular salário mínimo real
salario_minimo %<>% 
dplyr::mutate(
real = (indice[date == "2021-04-01"]/indice) * nominal
)

# Visualização de dados
ggplot2::ggplot(salario_minimo, ggplot2::aes(x = date))+
ggplot2::geom_line(
ggplot2::aes(y = nominal, colour = "Salário Mínimo - Nominal"), size = 1.5
) +
ggplot2::geom_line(
ggplot2::aes(y = real, colour = "Salário Mínimo - Real"), size = 1.5
) +
ggplot2::scale_colour_manual(NULL, values = c("#282f6b", "#b22200")) + 
ggplot2::scale_y_continuous(n.breaks = 8) +
ggplot2::labs(
x = NULL,
y = "R$",
title = "Salário Mínimo no Brasil",
subtitle = "Valores em Reais deflacionados pelo INPC a preços de abril/2021.",
caption = "Fonte: analisemacro.com.br com dados de IBGE e IPEA."
) +
ggplot2::theme(
legend.position = "bottom",
plot.title = ggplot2::element_text(face = "bold"),
plot.subtitle = ggplot2::element_text(face = "italic"),
legend.text = ggplot2::element_text(face = "bold")
)

 

Perceba que, apesar de ser simples e fácil, é um pouco trabalhoso obter os dados do índice, tratar, fazer o cálculo, etc., para enfim obter nossa série deflacionada, mesmo que em nosso exemplo tenhamos "quebrado" o procedimento em etapas adicionais para fins de didática. Felizmente, existe um pacote no R chamado deflateBR que facilita essas tarefas em uma única função, criado pelo Fernando Meireles.

Com a função deflate, tudo que precisamos é apontar a série que queremos deflacionar, o vetor de datas correspondentes, uma data-base e um índice de preços que pode ser: IPCA, IGP-M, IGP-DI, IPC ou INPC. Vamos ao exemplo anterior usando essa função. criaremos uma outra coluna em nosso objeto nomeando-a "deflacionado" para diferenciar dos valores anteriores já calculados:

# Deflacionar usando o pacote deflateBR
salario_minimo %<>% 
dplyr::mutate(
deflacionado = deflateBR::deflate(
nominal_values = nominal,
nominal_dates = date %m+% months(1), # evitar que a função pegue valor com 1 lag
real_date = format(tail(date, 1), "%m/%Y"), 
index = "inpc"
)
)

# Verificar se valores são iguais
all.equal(salario_minimo$real, salario_minimo$deflacionado)

# [1] TRUE

Note que o cálculo foi exatamente o mesmo, mas bastou que indicássemos para a função o que e por qual índice necessitamos deflacionar, muito mais simples e prático.

Por fim, vamos confrontar nossos cálculos com os cálculos do IPEA, haja visto que o mesmo disponibiliza em sua plataforma a série do salário mínimo real. Assim certificamos de que fizemos tudo corretamente:

# Salário mínimo real IPEA (código IPEADATA = GAC12_SALMINRE12) usando web-scrapping
dados_real <- httr::GET(
"http://ipeadata.gov.br/api/odata4/ValoresSerie(SERCODIGO='GAC12_SALMINRE12')"
)

# Salário mínimo real IPEA
real <- httr::content(dados_real)[[2]] %>% 
dplyr::bind_rows() %>% 
dplyr::select("date" = `VALDATA`, "ipea" = `VALVALOR`) %>% 
dplyr::mutate(date = lubridate::as_date(date)) %>% 
dplyr::filter(date >= as.Date("2000-01-01"))

# Juntar dados e arredondar casas decimais
salario_minimo <- left_join(salario_minimo, real, by = "date") %>% 
dplyr::mutate(dplyr::across(real:ipea, ~round(.x, 2)))

# Verificar se valores são iguais
all.equal(salario_minimo$real, salario_minimo$ipea)

# [1] TRUE

Assim, demonstramos duas formas de deflacionar valores usando o R, ambas equivalentes entre si.

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Como incorporar choques em cenários de previsão?

Neste exercício mostramos como incorar choques no cenário de variáveis exógenas para fins de previsão. Usando como exemplo a previsão do IPCA, através de um modelo de machine learning, mostramos os cuidados a serem tomados e uma forma simples de definir o cenário com os choques. Ao final, apresentamos uma previsão com um suposto choque e uma previsão sem o choque para comparação.

Como preparar os dados para um modelo preditivo?

Modelos de previsão macroeconômica podem facilmente alcançar um número elevado de variáveis. Mesmo modelos simplificados, como o Modelo de Pequeno Porte (MPP) do Banco Central, usam cerca de 30 variáveis. Isso impõe um grande desafio ao nosso dia a dia: como fazer a gestão destes dados para uso em modelos, desde a coleta até o tratamento?

Transfer Learning para Previsão de Séries Temporais com o Python

A aprendizagem por transferência (ou transfer learning) é a técnica de reutilizar um modelo previamente treinado em um novo problema. Esse conceito representa um grande avanço para a previsão de variáveis, especialmente aquelas organizadas ao longo do tempo, como séries temporais. Neste post, exploramos como usar transfer learning com Python para trabalhar com esse tipo de dado.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.