Comentário de Conjuntura

Explicando a inflação de alimentos

By 10 de novembro de 2020 No Comments

No mês de dezembro, iremos lançar uma nova versão do Clube do Código. O projeto de compartilhamento de códigos da Análise Macro vai avançar para uma versão 2.0, que incluirá a existência de uma comunidade no Telegram/Whatsapp, de modo a reunir os membros do Novo Clube, compartilhando com eles todos os códigos dos nossos posts feitos aqui no Blog, exercícios de análise de dados de maior fôlego, bem como tirar dúvidas sobre todos os nossos projetos e Cursos Aplicados de R.

Para ilustrar o que vamos compartilhar lá nesse novo ambiente, vou publicar aqui nos próximos dias alguns dos nossos exercícios completos de análise de dados. Esses exercícios fazem parte do repositório atual do Clube, que irá migrar para o novo projeto. Além de todos os exercícios existentes, vamos adicionar novos exercícios e códigos toda semana, mantendo os membros atualizados sobre o que há de mais avançado em análise de dados, econometria, machine learning, forecasting e R.

Para começar, nesse Comentário de Conjuntura vou replicar um modelo descritivo para a inflação de alimentos. A inflação de alimentos tem sido uma grande incógnita nos últimos anos, influenciando de forma decisiva o erro de previsão da inflação cheia. Isso nos motivou a replicar um modelo do Banco Central do Brasil, exposto em boxe do Relatório de Inflação de junho de 2016, intitulado Evolução recente da inflação de alimentos. O modelo proposto pelo BCB consiste na seguinte equação

(1)   \begin{align*}\pi_t^{AD} = \sum_{i=0}^1 \phi_i \; \Delta \epsilon_{t-i} + \sum_{i=0}^1 \beta_i \;\Delta IC_{t-i}^{agro}+ \delta \; oni_{t-1} + \gamma \; h_t + \sum_{i=1}^4 \alpha_i \; T_i + \varepsilon_t  \end{align*}

onde \pi_t^{AD} é inflação de alimentação no domicílio, \Delta\epsilon_{t} é a variação da taxa de câmbio nominal, \Delta IC_{t-i}^{agro} é a variação do segmento de commodities agropecuárias do Índice de Commodities - Brasil (medido em dólares), oni_{t-1} é a primeira defasagem da dummy se o mundo está ou não sob efeito do El Niño, h_t é o hiato do produto e T_i são dummies sazonais.

Para estimar 1, nosso maior desafio será de coleta e tratamento das variáveis envolvidas. Isso é feito na sequência.

# Coleta e tratamento de dados

Para replicar o modelo proposto em 1, vamos precisar de cinco séries, a saber: a inflação de alimentação no domicílio, o Oceanic Niño Index (ONI), o Produto Interno Bruto, a taxa de câmbio nominal e o Índice de Commodities no seu corte agropecuário. Uma vez obtidas essas séries, elas precisarão ser trimestralizadas e tratadas, de modo a obter as variáveis que serão utilizadas para estimar 1. De modo a replicar os resultados do BCB, vamos obter as séries a partir do primeiro trimestre de 2000.

Antes, porém, o script começa carregando alguns pacotes.


library(BETS)
library(ggplot2)
library(forecast)
library(sidrar)
library(gridExtra)
library(rsoi)
library(xts)
library(mFilter)
library(dynlm)
library(stargazer)

Com efeito, o código abaixo coleta, trata e organiza as séries em uma matriz.


## Obter a série do Oceanic Niño Index (ONI)
oni = download_oni()
oni = xts(oni$ONI, order.by = oni$Date)
oni = window(oni[-1,], start='2000-01-01')
oni = ts(apply.quarterly(oni, FUN=mean),
start=c(2000,01), freq=4)
oni = ifelse(oni>0.5,1,0)
## Obter o Índice de Commodities Agro
icagro = BETSget(20050, from='1999-10-01', data.frame = TRUE)
icagro = xts(icagro$value, order.by = icagro$date)
icagro = ts(apply.quarterly(icagro, FUN=mean), start=c(1999,04),
freq=4)
dicagro = diff(icagro)
## Obter o PIB e o hiato
pib = BETSget(22109, from='2000-01-01', data.frame = TRUE)
hiato = ts(hpfilter(pib$value, freq=1600, type='lambda')$cycle,
start=c(2000,01), freq=4)
## Obter a taxa de câmbio
cambio = BETSget(3697, from='1999-10-01', data.frame = TRUE)
cambio = xts(cambio$value, order.by=cambio$date)
cambio = ts(apply.quarterly(cambio, FUN=mean), start=c(1999,4),
freq=4)
dcambio = diff(cambio)
## Obter a inflação de alimentação no domicílio
alim01 = get_sidra(api='/t/655/n1/all/v/all/p/all/c315/7171/d/v63%202')
alim02 = get_sidra(api='/t/2938/n1/all/v/63/p/all/c315/7171/d/v63%202')
alim03 = get_sidra(api='/t/1419/n1/all/v/63/p/all/c315/7171/d/v63%202')
alimentos = ts(c(alim01$Valor, alim02$Valor, alim03$Valor),
start=c(1999,08), freq=12)
fator = 1+alimentos/100
acumulado = (fator*lag(fator,-1)*lag(fator,-2)-1)*100
alimdom = acumulado
alimentos = xts(alimdom, order.by = as.Date(time(alimdom)))
alimentos = window(alimentos, start='2000-01-01')
alimentos = ts(apply.quarterly(alimentos, FUN=mean),
start=c(2000,01), freq=4)
## Obter as dummies sazonais
dummies = ts(seasonaldummy(alimentos), start=c(2000,01), freq=4)
## Juntar todos os dados em uma matriz
data = ts.intersect(alimentos, dcambio, dicagro,
oni, hiato, dummies)

Abaixo, um gráfico das séries já devidamente tratadas.

# Modelo

Com os dados devidamente tratados, podemos estimar o modelo proposto pelo BCB em 1 para o período replicado no boxe - i.e., até o quarto trimestre de 2016. O código abaixo implementa.


modelo = dynlm(alimentos~dcambio+lag(dcambio,-1)+dicagro+
lag(dicagro,-1)+lag(oni,-1)+hiato+
dummies.Q1+dummies.Q2+dummies.Q3,
data=data, end=c(2016,01))

A tabela 1 traz os resultados do modelo. A variável defasada da variação do câmbio, as variações do índice de commodities, a variável dummy associada ao ONI e o hiato do produto se mostram estatisticamente significativas para explicar a inflação de alimentação no domicílio. Em particular, o coeficiente da variável dummy é de 1.2, o que implica dizer que o fim do El Niño em um determinado trimestre reduz a inflação de alimentos em 1.2 pontos percentuais no trimestre seguinte.

Explicando a inflação de alimentos
Dependent variable:
alimentos
dcambio -2.342
(1.736)
lag(dcambio, -1) 3.940**
(1.787)
dicagro 0.061*
(0.035)
lag(dicagro, -1) 0.090**
(0.036)
lag(oni, -1) 1.173*
(0.591)
hiato 0.193**
(0.094)
dummies.Q1 0.083
(0.666)
dummies.Q2 -0.305
(0.697)
dummies.Q3 -0.537
(0.674)
Constant 1.395***
(0.503)
Observations 64
R2 0.537
Adjusted R2 0.460
Residual Std. Error 1.831 (df = 54)
F Statistic 6.972*** (df = 9; 54)
Note: *p<0.1; **p<0.05; ***p<0.01

______________________

Cadastre-se em nossa Lista VIP para receber conteúdos exclusivos!

Fazer Inscrição
{"cart_token":"","hash":"","cart_data":""}