Uma dúvida muito comum entre os alunos dos Cursos Aplicados em R da Análise Macro é como obter valores deflacionados ou reais. De forma a ilustrar o processo, vamos pegar os saldos de transações de crédito total, pessoa física e pessoa jurídica a partir do pacote BETS do Sistema de Séries Temporais do Banco Central. Esse foi, a propósito, o exercício 39 do Clube do Código.


total = window(BETS.get(20539), start=c(2007,03))
pj = BETS.get(20540)
pf = BETS.get(20541)

 

Abaixo os gráficos das séries...


times = seq(as.Date('2007-03-01'), as.Date('2018-04-01'), 
by='1 month')
df = data.frame(time=times, total=total,
pj=pj, pf=pf)
ggplot(df, aes(x=time))+
geom_line(aes(y=total/1000, colour='Total'), size=.8)+
geom_line(aes(y=pj/1000, colour='Pessoa Jurídica'), size=.8)+
geom_line(aes(y=pf/1000, colour='Pessoa Física'), size=.8)+
scale_colour_manual('', values=c('Total'='blue',
'Pessoa Jurídica'='darkgreen',
'Pessoa Física'='red'))+
theme(legend.position = 'top')+
xlab('')+ylab('R$ milhões')+
labs(title='Saldo de Operações de Crédito (R$ milhões)',
subtitle='Valores Correntes',
caption='Fonte: elaboração própria com dados do BCB.')+
scale_y_discrete(limits=c(500,1000,1500,2000,2500,3000))+
scale_x_date(breaks = date_breaks("1 years"),
labels = date_format("%Y"))+
annotate("rect", fill = "lightblue", alpha = 0.3, 
xmin = as.Date('2016-01-01'), 
xmax = as.Date('2018-04-01'),
ymin = -Inf, ymax = Inf)

As séries estão, naturalmente, em valores correntes ou nominais. De forma a colocá-las em valores reais, precisamos de um deflator. Com o código abaixo, por suposto, importamos o número-índice do IPCA da base de dados SIDRA do IBGE, com o pacote SidraR.


ipca = get_sidra(api='/t/1737/n1/all/v/2266/p/all/d/v2266%2013')
ipca = ts(ipca$Valor, start=c(1979,12), freq=12)
ipca = window(ipca, start=start(total))

De posse do número-índice do IPCA, podemos aplicar a seguinte fórmula sobre as nossas séries:

(1)   \begin{align*} V_{r} = V_{t} \times \begin{pmatrix} \frac{I_{k}}{I_{t}} \end{pmatrix} \end{align*}

onde o valor real V_{r} será obtido multiplicando o valor nominal em t pela razão entre o índice de preço no período k e no período t. Em assim sendo, podemos trazer os valores das nossas séries aos preços de abril de 2018, com o código a seguir.


credito = ts.intersect(total, pf, pj)
credito.real = credito*(ipca[length(ipca)]/ipca)
colnames(credito.real) = colnames(credito)

Abaixo comparamos os valores reais e nominais do saldo de transações de crédito total.

 

Variações Nominais vs. Variações Reais

Por suposto, podemos construir variações sobre valores reais e nominais. Caso, façamos, por exemplo, uma variação acumulada em 12 meses dos valores nominais, tudo o que teremos será uma variação nominal. Veja, por exemplo, com o código abaixo.


anual = (credito/lag(credito,-12)-1)*100
colnames(anual) = colnames(credito)

E abaixo um gráfico.

Podemos, agora, transformar essas variações nominais em reais de duas formas. Primeiro, podemos simplesmente fazer a mesma operação acima, mas utilizando as séries reais que construímos acima.


anual.real = (credito.real/lag(credito.real,-12)-1)*100
colnames(anual.real) = colnames(credito)

Ou podemos aplicar a fórmula

(2)   \begin{align*} \Delta_{real} = \begin{bmatrix} \begin{pmatrix} \frac{1 + (V_{nom}/100)}{1+ (\pi/100)} \end{pmatrix}-1 \end{bmatrix} \times 100 \end{align*}

onde, \pi é a inflação do período. O código abaixo operacionaliza.


ipca2 = window(BETS.get(13522), start=c(2008,03))
anual = (credito/lag(credito,-12)-1)*100
anual.real2 = (((1+(anual/100))/(1+(ipca2/100)))-1)*100
colnames(anual.real2) = colnames(credito)

Uma vez calculadas as variações das séries, plotamos um gráfico, como abaixo.

Update: por óbvio, para rodar o código é preciso carregar os pacotes BETS, ggplot2, sidrar e scales.

Comments