1 Introdução

Quem trabalha com séries de tempo acaba tendo que enfrentar a rotina de ajustar sazonalmente uma série ou então deflacionar para elaborar alguma análise mais robusta e segura. É comum utilizarmos softwares como Excel ou Eviews para esse tipo de transformação, mas o R também oferece essa ferramenta.

2 Ajuste Sazonal

Vamos inciar com o ajuste sazonal da série de produção industrial brasileira calculada mensalmente pelo IBGE. Vamos aproveitar e baixar a base de dados do IPEA disponível no API, através do package ipeaData.

require(ipeaData)
require(forecast)
require(seasonal)
require(readxl)
require(httr)
require(deflateBR)

g<-ipeadata('PIMPFN12_QIIGN12')
## [1] "Instituto Brasileiro de Geografia e Estatística, Pesquisa Industrial Mensal - Produção Física (IBGE/PIM-PF). 01/2002 a 09/2018. Acesso em: 25/11/2018"
pim<-ts(g$VALVALOR,start=2002,frequency = 12)
plot(pim,xlab='Anos',ylab='',col='red',main="Produção Industrial Brasileira")

Apenas para mostrar como essa série tem uma sazonalidade bem forte, vamos usar o package forecast para evidenciar o comportamento sazonal, ainda que não exatamente na forma como o IBGE trata.

plot(decompose(pim)$seasonal,xlab='anos',ylab='',main='Componente sazonal da Produção Industrial Brasileira')

A série exibe uma sazonalidade negativa de dezembro até abril, quando começa a mostrar força sazonal positiva e atinge o pico em outubro.

Munido dessa série, nos usaremos o package seasonal e as instruções divulgadas pelo IBGE em https://goo.gl/Xy3EXD para elaborar o ajuste sazonal da série de produção industrial brasileira.

seas<-read.table('https://raw.githubusercontent.com/arthurlula/Econometrics/master/pimsa.txt') #são séries com dummies dos feríados de carnaval e corpus christi
carn<-ts(seas$V1,start=2001,frequency=12) 
corpch<-ts(seas$V2,start=2001,frequency=12)
x<-cbind(carn,corpch)

#aqui começa o ajuste sazonal
pim2<-seas(x = pim,
     regression.variables = c("td", "easter[1]"),xreg=x,
     arima.model = "(1 1 0)(0 1 1)",
     regression.aictest = NULL,
     outlier = NULL,
     transform.function = "none",series.span=",2018.9") #essa de fato é a função que elabora o ajuste sazonal

Agora vamos comparar as série que ajustamos pela sazonalidade, chamada de pim.sa, e a série que já é ajustada sazonalmente e que o IBGE divulga mensalmente.

pim3<-data.frame(pim2$data)$final
pim.sa<-ts(pim3,start=2002,frequency = 12)#série que ajustamos

f<-ipeadata('PIMPFN12_QIIGSNAS12') #série ajustada pelo IBGE
## [1] "Instituto Brasileiro de Geografia e Estatística, Pesquisa Industrial Mensal - Produção Física (IBGE/PIM-PF). 01/2002 a 09/2018. Acesso em: 25/11/2018"
pimsa<-ts(f$VALVALOR,start=2002,frequency = 12)

plot(pimsa,xlab='anos',ylab='',main='Comparação entre ajuste sazonal\nIBGE e pacote seasonal')
lines(pim.sa,type='l',col='red')

Perceba que a série mudou bastante em relação aquela primeira, dado a extração de fatores sazonais. O ajuste ficou muito próximo daquele divulgado pelo IBGE.

E o que acontece quando vamos extrair a sazonalidade de uma série que não é dessazonalizada por nenhuma instituição? vamos ver um exemplo.

A Associação Brasileira de Concessionárias de Rodovias (ABCR) divulga mensalmente um índice que representa o fluxo de veículos nas estradas pedagiadas. A varíavel que mensura o fluxo de veículos pesados (caminhões) são amplamente usadas pelo mercado como covariável para a projeção da produção industrial mensal.

A ABCR não faz ajuste sazonal, então vale a pena tentarmos algo próximo disso. Existem formas mais robustas de estudar a série e extrair sua sazonalidade, mas vamos mostrar uma forma ingênua, mas poderosa e que pode ajudar muito em diversas situações.

Primeiramente vamos baixara a série e deixar a função auto.arima achar qual o melhor modelo para ela.

url1<-'http://www.abcr.org.br/Download.ashx?arquivo=IndiceABCR.xls'
GET(url1, write_disk(tf <- tempfile(fileext = ".xls")))
## Response [http://www.abcr.org.br/Download.ashx?arquivo=IndiceABCR.xls]
##   Date: 2018-11-25 21:23
##   Status: 200
##   Content-Type: application/octet-stream
##   Size: 724 kB
## <ON DISK>  C:\Users\arthu\AppData\Local\Temp\RtmpqwuAFV\file14f45cc52578.xls
df <- read_excel(tf, 3L)
abcr<-ts(as.numeric(df$X__2[-c(1:38)]),start=2002,frequency=12) # a série já foi baixada
plot(abcr,xlab='anos',ylab='',main='Fluxo de veículos pesados em estradas pedagiadas')

auto.arima(abcr)
## Series: abcr 
## ARIMA(1,1,2)(0,1,1)[12] 
## 
## Coefficients:
##          ar1      ma1     ma2     sma1
##       0.2143  -1.0657  0.3892  -0.8282
## s.e.  0.3794   0.3567  0.2344   0.0919
## 
## sigma^2 estimated as 27.25:  log likelihood=-585.81
## AIC=1181.62   AICc=1181.95   BIC=1197.83

Agora que sabemos que temos um modelo ARIMA(1,1,2)(0,1,1) proposto, podemos seguir com o ajuste sazonal.

abcr.sa<-seas(x = abcr,
           regression.variables = c("td", "easter[1]"),
           arima.model = "(1 1 2)(0 1 1)",
           regression.aictest = NULL,
           outlier = NULL,
           transform.function = "auto",series.span=",2018.10")

Por fim, cabe comparar como ficou a série e como ela era.

plot(abcr.sa,xlab='anos',ylab='',
     main="Fluxo de veículos pesados em estradas pedagiadas\nCom ajuste sazonal")
legend('topleft', 95, legend=c("Original", "Com ajuste sazonal"),
       col=c("black", "red"), lty=1, cex=0.8,box.lty=1)

É importante ressaltar que se você precisa de um ajuste muito bom mês a mês (tipo quem precisa acertar a variação mensal de alguma série, como é o caso de quem faz projeção), esse método ingênuo não é o melhor, sendo ideal estudar com mais calma cada série.

3 Deflacionando uma série

Manipular séries com valores monetários exige um certo conhecimento do impacto da inflação ao longo do tempo. Por exemplo, se você quer saber o quanto uma economia cresceu (PIB) num dado período de tempo, é super importante extrair a influência do crescimento dos preços nesse período estudado, do contrário você estará computando a inflação junto e inflando o desempenho daquela economia.

Em outras palavras, o que importa é o crescimento real e não o nominal.

Vamos supor que estamos avaliando a vendas mensais de automóveis no Brasil, divulgados pela ANFAVEA, desde 2000. O problema é que as vendas estão em valores monetários (R$). Desta forma, é necessário tirar a influência da inflação (sobretudo num país que enfrentou hiperinflação) dessa série.

Como é muito grande (começa em 1957), precisamos cortá-la para trabalhar apenas de 2000 para frente.

anf<-ipeadata('ANFAVE12_LICVEN12') #baixando a série
## [1] "Associação Nacional dos Fabricantes de Veículos Automotores, Anuário Estatístico da Indústria Automobilística Brasileira ou Carta Mensal (Anfavea). 01/1957 a 10/2018. Acesso em: 25/11/2018"
anfavea<-ts(anf$VALVALOR,start=1957,frequency = 12)
anfavea<-anfavea[-c(1:516)]# retirando valores anteriores a 2000
times <- seq(as.Date('2000-01-01'), as.Date('2018-10-01'), 
            by='1 month') # criando o vetor do tempo, para elaborar a deflação
plot(anfavea,type='l',xlab='',ylab='',main='Volume de vendas de automóveis (Em R$)')

Pois bem, agora para iniciar a deflação, vamos usar o pacote deflateBR para deflacionar a série pelo IGP-M (arbitrariamente) e deixando tudo a preços de janeiro de 2018, além de comparar com a série original.

anfaveareal<-deflate(anfavea,times,"01/2018", index = "igpm")
anfaveareal1<-ts(anfaveareal,start=2000,frequency=12)
anfavea1<-ts(anfavea,start=2000,frequency=12)
plot(anfaveareal1,xlab='anos',ylab='',main='Volume de vendas de automóveis (Em R$)\nPreços correntes e de janeiro de 2018',
     ylim=c(90000,503419.6))
legend('topright', 95, legend=c("Real", "Nominal"),
       col=c("black", "red"), lty=1, cex=0.6,box.lty=1)
lines(anfavea1,type='l',col='red')

4 Conclusão

Tentamos mostrar aqui funcionalidades de como ajustar sazonalmente uma série tempo ou então como tirar a influência da inflação. Espero que tenham aproveitando alguma coisa e que acessem meu outro artigo. Baixando cotações diárias de Ações da Bovespa no R com o pacote BatchGetSymbols

Arthur Lula Mota.

```