Tag

criar tabela no R Archives - Análise Macro

Food Trucks, Renda e R: uma análise de conjuntura.

By | Dados Macroeconômicos, Macroeconometria, Mercado de Trabalho

Na terça-feira recebi um e-mail da jornalista Gabriela David, da revista Bons Negócios, me fazendo algumas perguntas sobre as perspectivas para o setor de alimentação fora de casa. A Gabriela estava interessada em food trucks, aqueles pequenos caminhões que servem comida nas ruas de Nova York e que viraram moda na cidade de São Paulo. Será que é uma febre passageira ou deve virar tendência nas principais cidades do país, questiona Gabriela. Ademais, quais são as perspectivas para esse negócio, diante dos problemas na economia brasileira, pergunta a jornalista. Para ajudar Gabriela, devemos saber, em primeiro lugar, que alimentação fora de casa é um negócio que depende diretamente do comportamento da renda das famílias. Isto porque, ainda que as pessoas usem cartão de crédito para pagar restaurantes, pensões e food trucks, não faz muito sentido pensar que as pessoas se endividam para comer fora de casa, não é mesmo? No máximo, paga-se o cartão no próximo mês, logo é preciso que a renda esteja crescendo ao longo do tempo para que negócios como esse sejam objeto de expansão. Dito isto, vamos aos dados?

Bom, dado que renda das famílias é fundamental para negócios como food trucks, devemos nos perguntar como ela deve se comportar nos próximos meses e anos, não é mesmo? Para isso, precisamos saber do que depende a renda. Uma primeira pista é identificar o comportamento do crescimento da economia. Isto porque, se o PIB cresce ao longo do tempo, é razoável supor que a renda das famílias também tende a crescer. Isto porque, maior crescimento da economia implica em maior absorção de mão de obra ou menor desemprego. Este, por sua vez, faz aumentar o poder de barganha dos indivíduos, o que leva a maior crescimento dos salários e, portanto, da renda das famílias.

Tudo bem intuitivo, não é mesmo? Pois é, vamos melhorar isso, então? Vamos fazer um exercício simples no R que consiste basicamente em ver se o desemprego ajuda a prever o que irá ocorrer com a renda. Isso pode ser feito via o famoso teste de causalidade de granger, que no pode ser acessado via o carregamento do pacote vars. Desse modo, se chegarmos à conclusão que, de fato, o desemprego ajuda a prever a renda das famílias [auferida, principalmente, por meio de salários], podemos ter alguma noção do que ocorrerá no futuro.

Para começar o exercício, precisamos, claro, de dados. Montei meu excel com quatro séries, com observações de março de 2003 a março de 2015: crescimento interanual da renda nominal, crescimento interanual da renda real, desemprego como % da PEA e desemprego dessazonalizado também como % da PEA. As três primeiras foram retiradas da Pesquisa Mensal de Emprego (PME), do SIDRA, o banco de dados on-line do IBGE, enquanto a última é derivada da série original de desemprego com a aplicação do X12-Arima, no Gretl. Podemos, assim, começar dando uma olhada nos gráficos das séries com a função gtsplot, do pacote BMR. Essa função tem sido recorrentemente utilizada aqui, mas como diria Machado de Assis, é preciso incutir conceitos na mente do leitor por meio de repetição, não é mesmo? Abaixo o código e os gráficos.

############### GRÁFICOS DAS SERIES #######################
data.part <- window(data, start=c(2011,1))
dates <- seq(as.Date('2011-01-01'), as.Date('2015-03-01'), by='1 month')
gtsplot(data.part, dates=dates)

graficos

Observe que apenas com esses quatro gráficos já é possível verificar o que está acontecendo na economia brasileira. Veja que o desemprego está aumentando nos últimos meses, enquanto o crescimento da renda [real e nominal] interanual tem caído. Isso já é um bom início de conversa para o que a Gabriela quer, não é mesmo? Mas, vamos em frente.

Antes de chegarmos ao teste de granger, vamos dar uma olhada em algumas correlações. Com a função cor aplicada sobre o seu objeto no R, você pode obter uma tabela com as correlações entre todas as séries, como abaixo, usando o pacote stargazer.

Correlações
rendanominal rendareal desemprego desemprego_sa
rendanominal 1 0,82 -0,63 -0,64
rendareal 0,82 1 -0,56 -0,56
desemprego -0,63 -0,56 1 0,98
desemprego_sa -0,64 -0,56 0,98 1

Como esperado, renda e desemprego apresentam uma relação bastante razoável. Como dissemos acima, entretanto, a relação entre eles envolve alguma defasagem. Desse modo, podemos ver a correlação cruzada para nos decidirmos sobre quais variáveis específicas vamos fazer o teste de granger. Mostro abaixo, apenas, os gráficos entre renda nominal e desemprego sem ajustes sazonais. Foi usada a função lag2.plot do pacote astsa.

lag1

Correlação Cruzada entre Desemprego e Renda.

lag2

Correlação Cruzada entre Renda e Desemprego.

Bom, com esses gráficos é possível ver que a correlação [negativa] se torna mais forte quando a renda nominal é confrontada com a primeira e segunda defasagens do desemprego sem ajustes sazonais. Temos, assim, nossos candidatos para o granger. Isto é, vamos verificar se a correlação entre renda nominal e desemprego sem ajustes implica em causalidade, no sentido dado pelo teste. Antes, claro, temos que verificar se essas séries são estacionárias, não é mesmo? Para isso, vamos aplicar o protocolo de Pfaff (2008) e utilizar o pacote urca para o teste ADF Sequencial ilustrado pelo autor.

Um detalhe chato [para alguns] é que na hora de rodar o teste ADF é preciso escolher o número de defasagens, de modo a não incorrer em autocorrelação serial. Em geral, se faz essa escolha através de critérios de informação. Aqui, entretanto, vamos aplicar o teste Ljung-Box aos resíduos do teste ADF para verificar se o lag utilizado incorre em autocorrelação. Isso, claro, seria muito chato se tivéssemos de fazer um por um. O Ricardo Lima, entretanto, me passou uma função e um loop utilizados no curso de mestrado dele, no curso de séries temporais, lá na Universidade de Estocolmo. A ideia da função e do loop é aplicar o teste Ljung-Box sobre os resíduos do teste ADF e gerar uma sequência de gráficos no ambiente do RStudio de forma a verificar sobre qual lag não há autocorrelação [caso tenha interesse na função e no loop, entre em contato]. No nosso caso, os gráficos do desemprego e da renda nominal com os lags adequados são postos abaixo.

Teste Ljung-Box sobre os resíduos do Teste ADF

Teste Ljung-Box sobre os resíduos do Teste ADF: desemprego.

Teste Ljung-Box sobre os resíduos do Teste ADF

Teste Ljung-Box sobre os resíduos do Teste ADF: renda.

Com 12 e 10 lags, respectivamente, para o desemprego e renda, podemos garantir que não há autocorrelação na hora de rodar a equação do teste ADF. Com isto, podemos agora rodar a função ur.df do pacote urca para definir o processo gerador das séries. De modo a comparar a estatística de teste com os valores críticos, vamos rodar o código abaixo, pegando apenas esses dados. A partir disso, montamos uma tabela com a função stargazer do pacote de mesmo nome.

######### Teste Pfaff (2008) para Desemprego ###########
lags.adf <- 12 ### Lag escolhido com o Ljung-Box
data.ct <- ur.df(data[,'desemprego'], type='trend' , lags=lags.adf)@teststat
data.ct.cval <- t(ur.df(data[,'desemprego'], type='trend' ,
 lags=lags.adf)@cval)
ur.ct <- round(rbind(data.ct, data.ct.cval), digits=2)
table.data.ct <- stargazer(ur.ct,
 title='Teste ADF com tendência e drift',
 type='html',
 out='adf1.html', decimal.mark=',',
 digits=2,
 align=T)
Teste ADF com tendência e drift
tau3 phi2 phi3
statistic -3,24 5,87 7,60
1pct -3,99 6,22 8,43
5pct -3,43 4,75 6,49
10pct -3,13 4,07 5,47

A tabela nos indica que a 5% não é possível rejeitar a hipótese nula [que a série tem raiz unitária]. Essa informação é obtida ao compararmos a estatística de teste [-3,24] com o valor crítico da estatística tau3 [-3,43]: se for maior em módulo, rejeita-se. O protocolo que estamos usando, Pfaff (2008), nos indica que devemos consultar a estatística phi3, cuja hipótese nula é que o coeficiente da tendência é igual a zero, dado que  \pi é igual a zero. Ao fazer isso, nós rejeitamos H0, a 5%. O protocolo manda, então, ver se  \pi é igual a zero pela tabela normal. É possível ver os coeficientes com o mesmo comando acima, apenas modificando a parte final por @testreg$coefficients ou rodar a função ur.df sem especificar parâmetros e visualizar todos os dados com a função summary. Abaixo, coloco os coeficientes, com os respectivos p-valores.

Coeficientes do teste ADF
Estimate Std. Error t value Pr(> | t| )
(Intercept) 2,87 0,96 3,00 0,003
z.lag.1 -0,25 0,08 -3,24 0,002
tt -0,01 0,004 -2,80 0,01
z.diff.lag1 0,12 0,10 1,23 0,22
z.diff.lag2 0,09 0,10 0,96 0,34
z.diff.lag3 0,08 0,09 0,83 0,41
z.diff.lag4 0,05 0,09 0,53 0,59
z.diff.lag5 0,02 0,09 0,19 0,85
z.diff.lag6 0,08 0,08 0,98 0,33
z.diff.lag7 0,04 0,08 0,46 0,64
z.diff.lag8 -0,02 0,08 -0,21 0,83
z.diff.lag9 -0,03 0,08 -0,40 0,69
z.diff.lag10 0,01 0,07 0,09 0,93
z.diff.lag11 0,01 0,07 0,12 0,90
z.diff.lag12 0,58 0,07 8,22 0

Estamos interessados no z.lag.1, que é estatisticamente significativo pela tabela normal. Logo, podemos dizer que o desemprego é estacionário ao redor de uma tendência e tratá-lo dessa forma na hora de rodar o teste de granger. Simples, não? Não, eu sei. Mas, aos poucos, você se acostuma e as coisas passam a ser mais naturais.

Fiz o mesmo procedimento para a renda e cheguei à conclusão que ela é estacionária. Assim, com ambas as séries estacionárias, podemos, enfim, rodar o teste de granger. Isso é feito com o código abaixo, a partir do carregamento do pacote vars.

####################### GRANGER CAUSALITY ###########################
granger <- cbind(data[,'rendanominal'],data[,'desemprego'])
colnames(granger) <- c('renda', 'desemprego')
VARselect(granger,lag.max=12, type=c("const"),season=NULL)
grangertest(granger[,'renda']~granger[,'desemprego'],
 order=1, data=granger)
grangertest(granger[,'desemprego']~granger[,'renda'],
 order=1, data=granger)

E abaixo os resultados...

> grangertest(granger[,'renda']~granger[,'desemprego'],
+ order=1, data=granger)
Granger causality test

Model 1: granger[, "renda"] ~ Lags(granger[, "renda"], 1:1) + Lags(granger[, "desemprego"], 1:1)
Model 2: granger[, "renda"] ~ Lags(granger[, "renda"], 1:1)
 Res.Df Df F Pr(>F) 
1 141 
2 142 -1 10.179 0.001751 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> grangertest(granger[,'desemprego']~granger[,'renda'],
+ order=1, data=granger)
Granger causality test

Model 1: granger[, "desemprego"] ~ Lags(granger[, "desemprego"], 1:1) + Lags(granger[, "renda"], 1:1)
Model 2: granger[, "desemprego"] ~ Lags(granger[, "desemprego"], 1:1)
 Res.Df Df F Pr(>F)
1 141 
2 142 -1 0.1978 0.6572

Então, leitor, chegamos onde queríamos. Recapitulando, queríamos verificar se o desemprego ajuda a prever o comportamento da renda nominal. De fato, o teste de granger não nos impede de fazermos essa afirmação. O resultado do teste mostra que o desemprego granger causa a renda, dada a rejeição da hipótese nula. Para o caso contrário, entretanto, não podemos rejeitar a hipótese nula de que a renda não granger causa o desemprego. Desse modo, podemos nos concentrar no argumento de que o comportamento do desemprego é um bom indicador para prevermos a renda.

Se é assim,  o aumento do desemprego em 2015, como escrevi em post recente, deve contaminar a renda nominal. Dada a elevada inflação, a renda real deve, portanto, sofrer pelos dois lados, o que compromete negócios que têm nela um de seus determinantes de expansão. Em outras palavras, como disse para a Gabriela, os empreendedores devem ter cautela. É uma boa oportunidade de negócio, sem dúvida, mas no curto prazo, creio que é um tanto quanto arriscado fazer pesados investimentos, dado que o cenário prospectivo não é dos melhores.

Um outro aspecto que ela me perguntou foi sobre o impacto regional desse tipo de empreendimento. Minha resposta foi que depende muito de como as prefeituras e os empreendedores encaram o negócio. Observo que há grandes possibilidades de geração de uma rede de trucks, com feiras ou algo do tipo, o que exige infraestrutura (praças, recolhimento de lixo, segurança, etc.), bem como coordenação dos empreendedores. Se assim for feito, sim, acho que pode ter impacto, dado que gera externalidades positivas, com a geração de outros negócios ao redor (parques de diversão, artesanato, festivais de música, etc.).

No mais, leitor, espero que esse exercício tenha dado uma pequena amostra de como os economistas trabalham e como uma análise de conjuntura pode ser feita, com algum rigor, além de apenas chutes e pontapéis... 🙂

Raio-X da inflação no Brasil usando o R: os diferentes índices.

By | Dados Macroeconômicos, Inflação, Macroeconometria

A partir dessa semana, começaremos, o Ricardo Lima e eu, a publicar uma série de posts referentes à inflação no Brasil. Desde os tempos em que criei, em conjunto com um time enorme, o GECE/UFF, percebi que existe uma grande dificuldade de estudantes de graduação e pós-graduação de integrar teoria com a prática dos dados. Desse modo, são dois os objetivos dessa série: (i) mostrar, de forma bem introdutória, como lidar com dados macroeconômicos na prática, usando o software R; (ii) entender o comportamento da taxa de variação dos preços no país, bem como gerar alguns modelos de previsão para a inflação, dados seus determinantes. Ademais, servirá como incentivo para deslanchar: (i) um projeto de previsões sofisticadas de variáveis macroeconômicas utilizando o R que estamos desenvolvendo, em conjunto com o Renato Lerípio; (ii) um curso de análise de conjuntura para graduandos e pós-graduandos em diferentes áreas. Para quem quiser, antes de tudo, conferir o que é inflação, pode dar uma olhada aqui e ouvir um podcast sobre o assunto aqui.

Para tornar as coisas didáticas, começarei bem do início, de modo que mesmo o leitor com poucos conhecimentos de economia, estatística, econometria e/ou manipulação de dados poderá ter a exata noção do que foi feito. Nesse primeiro post, apresentarei os diversos índices de inflação no país, bem como darei as primeiras pistas sobre o que está causando a inflação alta que temos visto. Leitores com conhecimentos mais avançados podem pular as partes mais introdutórias e partir para a análise mais técnica dos problemas. Sempre que possível colocaremos referências sobre os assuntos que abordarmos [quem tiver outras, pode colocar nos comentários]. Sugestões, críticas [construtivas!!!] e comentários diversos são sempre bem vindos. Se a coisa fluir da forma que esperamos, outras variáveis, como câmbio, pib, juros, ..., também poderão ganhar séries no mesmo formato. Para quem ainda não conhece o R, sugerimos ler aqui, aqui e aqui. Ao trabalho, então?

Antes de tudo, algumas noções básicas...

O aluno que sai da faculdade de economia tem grandes dificuldades de lidar com dados [o leitor mais avançado pode pular essa parte e continuar abaixo, quando vir um novo alerta desse mesmo tipo]. Soa forte a frase? Talvez você discorde disso e dê uma infinidade de exemplos contrários, mas minha experiência pessoal mostra que isso é uma espécie de verdade inconveniente. Em geral, os professores estão focados em ensinar a teoria - alguns, a ensinar o aperto de mão secreto - e deixam ao largo o confronto com os dados. Se é assim, a primeira coisa a fazer em uma série que tem a pretensão de fazer um raio-x da inflação no Brasil é mostrar as fontes de dados. Elas são basicamente quatro: Banco Central, FGV, IBGE e IPEADATA. O leitor encontrará uma infinidade de dados nesses lugares, não apenas de inflação, logo fique à vontade para navegar e se interar com os mesmos.

Minha sugestão é que você, depois de ter lido esse texto aqui, pegue o número índice de um único indicador em uma dessas fontes e comece a brincar com ele. Vamos supor que você tenha pego o número índice do IPCA no IPEADATA e queira obter a variação mensal e a variação anual dos preços. Primeiro, salve a planilha com o dado no seu computador e abra o R para importar os dados. Você deverá colocar o seguinte código para importar:

## Importação da planilha com o IPCA
data <- ts(read.csv(file='ipca.csv',header=T,sep=";",dec=","),
 start=c(1979,12), freq=12)

Feito isto, você pode dar uma olhada no gráfico da série [com o plot], coisa que fiz no post sobre introdução à inflação, e pode também obter a variação mensal e anual com os seguintes comandos:

ipcamensal <- (data/lag(data,-1)-1)*100
ipcaanual <- (data/lag(data,-12)-1)*100

Dê uma olhada nos gráficos dessas duas séries que você acabou de criar acima utilizando o código abaixo. Repare que limitei os gráficos para o período entre 1999 e 2015, mas você pode escolher outros períodos.

par()
op <- par()
lay <- layout(matrix(c(1,2), ncol=2, nrow=1, byrow=F))
layout.show(lay)
plot(ipcamensal,main='IPCA Mensal',xlab='',ylab='% a.m.')
grid(lty=2, lwd=1, col='darkgrey')
plot(ipcaanual,main='IPCA Anual',xlab='',ylab='% a.m.')
grid(lty=2, lwd=1, col='darkgrey')

ipca

O IPCA mensal reflete a variação de preços entre um e outro mês, como exposto na fórmula em que geramos a série. Já o IPCA anual é a variação acumulada em 12 meses. Observe que no período recente, a inflação acumulada em 12 meses tem tido uma tendência altista. Além dos gráficos, você pode obter algumas estatísticas descritivas com a função stat.desc do pacote pastecs, como mínimo, máximo, média, mediana, ou, mais simplesmente, com a função summary.

Agora que você já tem alguma familiaridade com os dados [o leitor mais avançado pode continuar daqui], podemos importar um conjunto mais amplo de índices, como os IGPs da FGV [com seus determinantes: IPA, IPC e INCC] e o próprio IPCA. Com esse conjunto maior de dados, podemos começar a entender o comportamento dos preços nos últimos tempos no país. Algumas brincadeiras interessantes também podem ser feitas, como a criação de núcleos próprios, que excluem, por exemplo, a tão falada inflação de serviços. Vamos, então?

Uma overdose de inflação...

Na minha planilha eu coloquei os três IGPs (10, M e DI), seus determinantes (IPA, IPC e INCC), o IPCA e o IPCA-15 - fica a seu critério quais vai querer colocar. Para, em primeiro lugar, dar uma olhada nos números mais atuais da inflação no país eu montei o script no de modo a obter a variação mensal e anual de todos os índices, conforme os comandos que coloquei acima. Depois agrupei as variações mensais e anuais de forma a criar uma espécie de "tabela resumo" com as últimas três observações de cada índice de inflação. Isso foi feito com os seguintes códigos:

## As últimas três observações
last.mensal <- c('Mensal Fev/15', 'Mensal Mar/15', 'Mensal Abr/15')
last.anual <- c('Anual Fev/15', 'Anual Mar/15', 'Anual Abr/15')
data <- ts(read.csv(file='agregado.csv',header=T,sep=";",dec=","),
 start=c(1994,07), freq=12)
######### Variações Mensais a partir dos números índices ###########
## Obter as variações mensais
vmensal <- (data/lag(data,-1)-1)*100
colnames(vmensal) <- paste0(colnames(data),'mensal')
## Colocar as últimas observações das séries mensais no mesmo objeto
mensal <- t(tail(vmensal, n = 3))
colnames(mensal) <- last.mensal
######### Variações Anuais a partir dos números índices ###########
## Obter as variações anuais
vanual <- (data/lag(data,-12)-1)*100
colnames(vanual) <- paste0(colnames(data),'anual')
## Colocar as últimas observações das séries anuais no mesmo objeto
anual <- t(tail(vanual,3))
colnames(anual) <- last.anual
############### CRIAR TABELA COM ÚLTIMAS OBSERVAÇÕES ##################
agregado <- round(cbind(mensal, anual), digits=2)
rownames(agregado) <- colnames(data)
################### GERAR CÓDIGO HTML ################################
table <- stargazer(agregado,
 title='Índices de Inflaçao no Brasil (%)',
 type='html',
 out='agregado.html', decimal.mark=',', digits=2,
 align=T)

E a tabela...

Índices de Inflaçao no Brasil (%)
Mensal Fev/15 Mensal Mar/15 Mensal Abr/15 Anual Fev/15 Anual Mar/15 Anual Abr/15
igp10 0,43 0,83 1,27 3,86 3,38 3,46
ipa10 0,03 0,75 1,45 2,13 1,23 1,27
ipc10 1,39 1,29 1,01 7,56 8,19 8,33
incc10 0,80 0,24 0,69 6,77 6,69 7,01
igpm 0,27 0,98 1,17 3,86 3,16 3,55
ipam -0,09 0,92 1,41 2,02 0,75 1,36
ipcm 1,14 1,42 0,75 7,74 8,39 8,31
inccm 0,50 0,36 0,65 6,80 6,95 6,94
igpdi 0,53 1,21 3,74 3,46
ipadi 0,41 1,24 1,67 1
ipcdi 0,97 1,41 7,99 8,59
inccdi 0,50 0,36 6,80 6,95
ipaagro 1,12 2,10 6,17 2,68
ipaind 0,13 0,90 0,01 0,34
ipca15 1,33 1,24 1,07 7,36 7,90 8,22
ipca 1,22 1,32 7,70 8,13

Pronto! Aí está uma tabelinha com as últimas observações de vários índices de inflação no país. Ela contém a variação mensal e a anual dos últimos dados disponíveis desses índices. Observe o leitor que o último dado disponível do IPCA-15 é de abril, que mostra uma inflação acumulada em 12 meses de 8,22%. Alternativamente, você pode colocar mais meses utilizando a função tail com um n maior. Mostrados os dados, vamos agora ver alguns gráficos selecionados das séries que geramos. Mostro uma sequência de código e gráfico abaixo.

################# IGP-10 e IGP-M [e subíndices] ##################
par()
op <- par()
lay <- layout(matrix(c(1,1,2,2), ncol=2, byrow=F))
layout.show(lay)
plot(igp10mensal, main='' ,
 sub='',
 col="red", lty=1, lwd=3, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
par(new=T)
plot(ipa10mensal, main='' ,
 sub='',
 col="blue", lty=2, lwd=1, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
par(new=T)
plot(ipc10mensal, main='' ,
 sub='',
 col="black", lty=1, lwd=1, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
par(new=T)
plot(incc10mensal, main='' ,
 sub='',
 col="burlywood", lty=1, lwd=1, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
legend('topright', col=c('red','blue','black',
 'burlywood'), lty=c(1,2,1,1), lwd=c(3,1,1,1),
 legend=c('IGP-10', 'IPA-10','IPC-10','INCC-10'))
grid(lty=2, lwd=1, col='darkgrey')
mtext('IGP-10 e subíndices (% a.m.)',side=3,line=1, col='black',
 font=1)
plot(igpmmensal, main='' ,
 sub='',
 col="red", lty=1, lwd=3, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
par(new=T)
plot(ipammensal, main='' ,
 sub='',
 col="blue", lty=2, lwd=1, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
par(new=T)
plot(ipcmmensal, main='' ,
 sub='',
 col="black", lty=1, lwd=1, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
par(new=T)
plot(inccmmensal, main='' ,
 sub='',
 col="burlywood", lty=1, lwd=1, xlab='',ylab='',bty='l',
 ylim=c(-2,7), xlim=c(2001,2015))
legend('topright', col=c('red','blue','black',
 'burlywood'), lty=c(1,2,1,1), lwd=c(3,1,1,1),
 legend=c('IGP-M', 'IPA-M','IPC-M','INCC-M'))
grid(lty=2, lwd=1, col='darkgrey')
mtext('IGP-M e subíndices (% a.m.)',side=3,line=1, col='black',
 font=1)
par(op)
igp

Esse gráfico coloca as variações mensais do IGP-10 e do IGP-M, bem como seus determinantes (IPA, IPC e INCC) em evidência. Observe que o comportamento dos mesmos é bastante parecido. Isso pode ser mais nitidamente visto com o gráfico seguinte, que acumula os dois e o IGP-DI em 12 meses.

## Análise Gráfica dos IGPs
par()
opar <- par()
plot(igp10anual, xlab='', ylab='% a.a.',xlim=c(2009,2015),
 ylim=c(-7,15), lty=1, lwd=2, col='black')
par(new=T)
plot(igpmanual, xlab='', ylab='% a.a.',xlim=c(2009,2015),
 ylim=c(-7,15), lty=2, lwd=2, col='red')
par(new=T)
plot(igpdianual, xlab='', ylab='% a.a.',xlim=c(2009,2015),
 ylim=c(-7,15), lty=2, lwd=2, col='blue')
legend('bottomright', col=c('black', 'red','black'),
 lty=c(1,2,2), lwd=c(2,2,2),
 legend=c('IGP-10', 'IGP-M', 'IGP-DI'))
grid(lty=2, lwd=1, col='darkgrey')
mtext('Índices Gerais de Preço (% a.a.)',side=3,line=1, col='black',
 font=2)
mtext('Fonte: [analisemacro.com.br], dados da FGV.',
 side=1,line=3)
par(opar)

igps12m

Os três IGPs mostram uma queda seguida de estabilidade no período recente. Para ver qual dos três componentes do IGP está causando esse comportamento, podemos plotar um gráfico com os mesmos. É o que faço abaixo [o código é similar ao colocado acima] com a série M dos subíndices. É possível observar no gráfico que enquanto o IPC e o INCC se mantém razoavelmente constantes, o IPA mostra o comportamento captado pelo índice cheio (IGP). Em outros termos, os índices gerais mostram o comportamento predominantemente observado no atacado.

igpsub

Essa é, a propósito, uma das grandes diferenças entre os IGPs e o IPCA. O IPA, índice de preços no atacado, é responsável por 60% dos IGPs. Enquanto isso, o IPCA reflete os preços que o consumidor com renda de 1 a 40 salários-mínimos enfrenta no dia a dia. Pensando nisso, podemos montar um gráfico com um dos IGPs e com o IPCA, para ver a diferença entre ambos no período recente e dar uma luz de como devemos entender a inflação. O código e o gráfico seguem abaixo.

## IPCA vs. IGP-M
par()
opar <- par()
par(mar=c(5,4,4,5)+.1)
plot(igpmanual,type='l',col='red', lty=2, lwd=2,
 xlab='', ylab='IGP-M', ylim=c(-3,15),
 xlim=c(2009,2015), main='')
par(new=T)
plot(ipcaanual, type='l', col='black',
 xaxt='n',yaxt='n', lty=1, lwd=2,
 xlab='', ylab='', xlim=c(2009,2015), ylim=c(3,9))
axis(4)
mtext('IPCA',side=4,line=3)
legend('bottomright', col=c('red','black'), lty=c(2,1), lwd=2,
 legend=c('IGP-M', 'IPCA'))
grid(lty=2, lwd=1, col='darkgrey')
mtext('Inflaçao Atacado vs. Varejo (% a.a.)',side=3,line=1, col='black',
 font=2)
mtext('Fonte: [analisemacro.com.br], dados do IBGE e da FGV.',
 side=1,line=3)
par(opar)

ipcaigp

Pois é, leitor. Ao longo do tempo, o IGP tende a ter o mesmo comportamento do IPCA e, em certo grau, um antecipa o outro, dado o componente de "inflação no atacado" contido no primeiro [isso é algo interessante que você poderia testar, não?]. Podemos, inclusive, ver essa correlação cruzada de forma gráfica no com a função lag2.plot do pacote astsa (dica do Claudio Shikida), como colocado abaixo. No período recente, entretanto, enquanto o IGP-M mostra um comportamento de no mínimo estabilidade, o IPCA deu um "salto" nos últimos meses. Ademais, mesmo antes desse "salto" no IPCA, a "boca de jacaré" entre IPCA e IGP-M já era pronunciada. Em outros termos, enquanto os IGPs registram a desaceleração na economia, o IPCA não só resistiu em um patamar mais elevado, como se acelerou nos últimos meses.

Para compreender os motivos pelos quais o IPCA mostra um comportamento dissonante em relação aos índices gerais, devemos olhar mais detidamente para ele. É o que faremos no próximo post dessa série! Espero que tenham gostado desse primeiro exemplo de exploração de dados, usando a inflação e o R. 🙂

# Correlação cruzada entre IGP-M e IPCA, ambos acumulados em 12 meses
lag2.plot(na.omit(igpmanual),na.omit(ipcaanual),12,corr=TRUE)
lag2.plot(na.omit(ipcaanual),na.omit(igpmanual),12,corr=TRUE)
igpmdefasado ipcadefasado

_______________________________________

Gostou do post? Quer aprender a fazer o mesmo? Dê uma olhada no nosso curso de Introdução ao R com aplicações em Análise de Conjuntura. Faça no Rio de Janeiro ou leve para sua empresa ou universidade!

Curso04

________________________________________


							
						

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente