Deflacionando séries com o deflateBR

Um novo pacote para R, com dados extraídos diretamente da API do Ipea

Deflacionar séries é pré-requisito em qualquer análise sobre o valor do dinheiro ao longo do tempo. E embora não seja algo complexo, isso envolve várias etapas que consomem tempo, todas sujeitas a erro humano: obter dados históricos de algum índice de preços; compatibilizar as datas da série nominal que se quer corrigir com a série do índice de preços; calcular o ajuste; refazer o processo caso seja necessário usar outro índice de preços. Em suma, deflacionar séries acaba sempre tomando mais tempo do que deveria.

Para realizar essa tarefa de uma forma mais rápida e replicável, usando cinco dos índices de preços mais populares no Brasil, criei um pacote para R: o deflateBR. A partir de uma série de reais nominais, ele obtém as séries de índices de preços atualizadas diretamente da API do IPEA e, em segundos, retorna os valores corrigidos – usando a metodologia adotada pelo Banco Central. Segue um breve descrição do pacote.

Como funciona o deflateBR?

O deflateBR automatiza três processos para deflacionar uma série. Primeiro, ele extrai dados de um dos seguintes índices de preços da API do IPEA: IPCA e INPC, desenvolvidos pelo IBGE; e IGP-M, IGP-DI e IPC, desenvolvidos pela FGV. Segundo, ele compatibiliza as datas mensais desses índices com as datas dos valores nominais da série. Feito isso, enfim, ele deflaciona e retorna os valores corrigidos.

A função principal do pacote, deflate, requer apenas três argumentos: um vetor numérico de valores nominais; um vetor com as datas nominais; e uma data de referência no formato MM/AAAA. Um exemplo usando o IPCA:

# Carrega o pacote
library(deflateBR)

# Deflaciona 100 reais de janeiro de 2000
deflate(nominal_values = 100, nominal_dates = as.Date("2000-01-01"), real_date = "01/2018")
## 
## Downloading necessary data from IPEA's API
## ...

## [1] 310.3893

Por padrão, a função deflate esse índice. Podemos alterar isso com outro argumento chamado index.

deflate(100, as.Date("2000-01-01"), "01/2018", index = "igpm")
## 
## Downloading necessary data from IPEA's API
## ...

## [1] 372.1672

Passando o valor igpm para o argumento, a função usa o IGP-M como indexador. Os demais indexadores possíveis são: ipc para o IPC; igpdi para o IGP-DI; inpc para o INPC. Para sabermos 100 reais de janeiro de 1995 valeriam hoje segundo esse último, bastaria usar:

deflate(100, as.Date("1995-01-01"), "01/2018", "inpc")
## 
## Downloading necessary data from IPEA's API
## ...

## [1] 491.0543

Deflacionando séries maiores

Mais útil do que corrigir um único valor é corrigir séries inteiras, com várias quantias em reais nominais associadas a algum período específico. Para mostrar como a função deflate faz isso, podemos criar os seguinte data.frame:

dados <- data.frame(reais = seq(1, 5),
                    datas = seq.Date(from = as.Date("2001-01-01"), by = "month", length.out = 5),
                    stringsAsFactors = FALSE
                     )

Feito isso, temos agora dados fictícios, com valores de 1 a 5 observados desde janeiro até maio de 2001. Suponha que queremos deflacionar esses valores para janeiro de 2017 usando o IPC da FGV. Como fazer isso? Apenas mudando o jeito de passar as informações necessárias para a função deflate:

deflate(dados$reais, dados$datas, "01/2017", "ipc")
## 
## Downloading necessary data from IPEA's API
## ...

## [1]  2.759569  5.484001  8.193400 10.863809 13.464326

Combinando o deflateBR com o tidyverse

Para quem usa o conjunto de pacotes contidos no tidyverse, a função deflate pode ser usada dentro de mutate() ou similares. Adaptando o exemplo anterior:

library(tidyverse)

dados %>%
  mutate(reais_deflacionados = deflate(reais, datas, "01/2017", "ipc"))
## 
## Downloading necessary data from IPEA's API
## ...

##   reais      datas reais_deflacionados
## 1     1 2001-01-01            2.759569
## 2     2 2001-02-01            5.484001
## 3     3 2001-03-01            8.193400
## 4     4 2001-04-01           10.863809
## 5     5 2001-05-01           13.464326

Outras funções

Para facilitar o uso de cada um dos cinco índices de preços, também incluí no pacote deflateBR cinco funções auxiliares. Em vez de usar a função deflate com o argumento index = "ipca" para deflacionar pelo IPCA, é possível fazer isso:

ipca(dados$reais, dados$datas, "01/2017")
## 
## Downloading necessary data from IPEA's API
## ...

## [1]  2.847600  5.662908  8.455458 11.231286 13.958171

Ou, para usar o IGP-DI, o seguinte:

igpdi(dados$reais, dados$datas, "01/2017")
## 
## Downloading necessary data from IPEA's API
## ...

## [1]  3.385977  6.738949 10.074312 13.325380 16.471004

Por fim, o pacote deflateBR também contém uma função simples, chamada inflation, para identificar a variação percentual na inflação entre dois períodos. Se quisermos saber qual foi a taxa de inflação em 2017 segundo o IPCA, por exemplo, basta rodar:

inflation("01/2017", "12/2017", "ipca")
## 
## Downloading necessary data from IPEA's API
## ...

## [1] 2.947421

Como o resultado está em percentual, podemos dizer que a taxa de inflação em 2017, medida pelo IPCA, foi de 2.95%, conforme também reportado oficialmente pelo IBGE.

Exemplo de aplicação 1: o valor do salário mínimo

Deflacionar séries é útil para ver como o poder de compra de salários ou outros variam ao longo do tempo. O salário mínimo, por exemplo, cresceu ou não acima da inflação? É possível responder a essa pergunta ajustando os salários nominais em cada período específico com um índice de preços, como o IPCA. Fazendo isso com o pacote deflateBR, podemos ver que o mínimo realmente cresceu acima da inflação desde 1995.

Exemplo de aplicação 2: o valor de bolsas de pós-graduação

Um bom exemplo de categoria que não teve aumento de renda acima da inflação de 1995 a 2018 foram pós-graduandos que recebem bolsas de estudos da Capes. Fixadas há anos nos mesmos patamares – R$ 2200 para Doutorado, R$ 1500 para Mestrado –, a inflação não reposta se reflete em perda de poder de compra da categoria.[1] Como dá pra ver, o valor dos benefícios, hoje, praticamente voltaram aos patamares do início do primeiro governo Lula.

Validade

Como já dito, o deflateBR usa a fórmula convencional para corrigir valores nominais pela inflação: multiplicá-lo pela razão entre o índice de preços no período de referência e no período observado, assim como a calculadora disponibilizada pelo Banco Central. Os resultados do pacote e desse serviço, por essa razão, são iguais.[2]

Como instalar

Para instalar a versão disponível no CRAN do pacote, basta executar o seguinte códido:

install.packages("deflateBR")

Final

Como procurei mostrar, o pacote deflateBR faz rapidamente, e de forma replicável, correções de valores nominais pela inflação. De qualquer forma, por ser ainda a primeira versão dele, certamente existem várias coisas por implementar ou melhorar. Para quem quiser sugerir melhorias como essas ou outras, o código do pacote está disponível no GitHub. Críticas e sugestões, como sempre, são bem-vindos.

  1. Os dados sobre os períodos de ajustes nas bolsas foram retirados daqui.

  2. Em todos os testes que realizei, os resultados sempre foram praticamente idênticos – com algumas diferenças na terceira e, raramente, na segunda casa decimal, provavelmente por conta de algum arredondamento realizado pela ferramenta online do BC.

Avatar
Fernando Meireles
Postdoc in Political Science

Postdoctoral Fellow in Political Science at IESP-UERJ. Studying comparative politics and political methodology.