Deflacionando séries com o deflateBR

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

30 Sep 2018 por Fernando Meireles


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.


« Predizendo sexo a partir de nomes próprios com o genderBR