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.
Os dados sobre os períodos de ajustes nas bolsas foram retirados daqui.
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.