Comentários iniciais

Neste curso discutiremos sobre análise de séries temporais e, basicamente, estaremos interessados em fazer boas previsões. Mas, o que é uma boa previsão? Qual modelo devemos usar? Como muito bem disse Box, “todos os modelos estão errados, mas alguns são úteis”. Esse pensamento de Box nunca esteve tão atual. Em uma época em que as mudanças estão ocorrendo em uma velocidade imensa, acertar as previsões está cada dia mais difícil. O World Economic Forum publicou recentemente um texto interessante [We’re moving fast. But nobody knows where we’re going], no qual os autores fazem uma pergunta bem provocativa: “The end of forecasting?”. A ideia do artigo é simples e pertinente: em uma era onde as coisas se modificam em uma velocidade incrível, qual seria a utilidade e a veracidade das previsões?


The sooner we realize that long-term forecasting is becoming obsolete, the better we’ll be able to cope with the new reality. Businesses are already responding by hiring **Chief Digital Officers**, promoting entrepreneurial culture, and elevating the innovation imperative to the level of existential priority.[World Economic Forum]


Hal Varian (Varian 2014), economista chefe da Alphabet, escreveu um artigo super interessante, e que eu recomendo fortemente a leitura para meus alunos, sobre como o estudo da econometria deve evoluir na nova era do “Big Data”. Em suma, mais que boas previsões, é preciso modificar a cultura das empresas e capacitar pessoas para que estejam apitas a viver a nova realidade.


Nesse curso, nós vamos ajudá-lo a adquirir uma importante ferramenta de um cientista de dados, que é a capacidade de criar cenários e estar apto a responder à questão: “E se isso acontecer…”. Vamos explorar os modelos univariados e multivariados; calcular elasticidades, fazer previsões dentro e fora da amostra e criar cenários baseados em diferentes conjunturas econômicas.


É claro que este é um curso introdutório, há avanços importantes no mundo de séries de tempo que não veremos nesse curso, mas que temos pesquisado e implementado para a nossa realidade. Por exemplo, a economista Lucrezia Reichlin lidera um time de pesquisadores na empresa Now-casting.com onde o objetivo é fazer previsões diárias do PIB de diversos países. Estes modelos, além nos permitir utilizar séries temporais com múltiplas frequências (e.g. mensais, trimestrais, diárias), permite também a “extração do sentimento” de texto jornalísticos para atualizar as previsões, neste caso, usando machine learning. Na FGV IBRE nós também temos um projeto sobre nowcasting e estamos trabalhando para, em breve, termos um pacote sobre o tema no R. Nós criamos também um dashboard no Rshiny onde acompanhamos as nossas previões, contudo, é importante lembrar que, no momento, estamos mais preocupados em entender a metodologia e menos preocupados e acertar as previsões [Nowcasting].


Por fim, no meu site é possível acompanhar algumas das pesquisas que estamos fazendo e que utilizam modelos de séries de tempo um pouco mais complexos do que os modelos que veremos ao longo desse curso. Além disso, nesse site, disponibilizo uma versão preliminar do livro de Séries Temporais que fiz com o time do NMEC|FGV e que será muito útil para o acompanhamento desse curso.


O curso é dividido, basicamente, da seguinte maneira:

  1. Explorar os softwares R e RStudio

    Vamos discutir nossas motivações para utilizar o software R e fazer uma breve introdução.

  2. Análise de Séries Temporais: primeiros passos

    Nessa seção iremos iniciar nossa discussão sobre séries temporais. A ideia é explorar alguns pacotes do R utilizados para lidar com séries de tempo e ainda, discutir conceitos importantes como, modelos univariados e multivariados, sazonalidade, ciclo e tendência1.

  3. Modelos univariados

    Nesse dia veremos os modelos (S)ARIMA, um tipo de modelo que olha apenas para o passado para prever o futuro. Como aplicação, veremos a modelagem da venda de passagens aéreas (caso clássico), exploraremos o pacote BETS e modelaremos a ST de produção de bens intermediários e por fim, faremos um exercício utilizando uma ST com frequência mensal2.

  4. Modelos Multivariados

    Nesse dia veremos os modelos de Regressão Dinâmica ou ADL(Autoregressive Distributed Lag). Modelaremos a venda de sorvetes e o PIB de FIJI com o intuito de calcular previsões e elasticidades. Por fim, haverá uma breve discussão sobre cointegração e faremos o Pair trading entre as ações do Itaú e do Bradesco3.


Explorando os softwares R e RStudio

Por que escolher o R?

  1. Programadores em R estão entre os maiores salários pagos em 2014

  2. R is Still Hot - and Getting Hotter

  3. R is Ready for Business

  4. R #5 in IEEE 2016 Top Programming Languages

IEEE 2016 Top Programming Languages

IEEE 2016 Top Programming Languages

  1. SWIRL
  2. SWIRL

R package makes it fun and easy to learn R programming and data science.

install.packages("swirl")
library("swirl")
swirl()


R software

O R não é apenas uma linguagem de programação, é também um ambiente integrado de desenvolvimento. É um projeto GNU, que foi desenvolvido em Bell Laboratories (antiga AT & T, agora Lucent Technologies) por John Chambers e seus colegas. (Team (2017))

De acordo com seus criadores, o R é um conjunto integrado de instalações de software para manipulação de dados, cálculo e exibição gráfica, e esse ambiente inclui:

  • Instalação eficaz de tratamento e armazenamento de dados;
  • Conjunto de operadores para cálculos em numéricos, em vetores e matrizes;
  • Grande coleção coerente e integrada de ferramentas intermediárias para análise de dados;
  • Instalações gráficas para análise de dados e exibição na tela ou em console;
  • Linguagem de programação bem desenvolvida, simples e eficaz que inclui condicionais, loops, funções recursivas definidas pelo usuário e instalações de entrada e saída.

Além disso, o R conta com uma ampla comunidade acadêmica que oferece suporte e ajuda aos usuários (CRAN) além de oferecer um extensão às funções usuais do R, com os pacotes.

Isso faz do R um projeto aberto, o que sigfinica ser continuamente melhorado, atualizado e expandido pela comunidade global de desenvolvedor e seus uários incrivelmente apaixonados. (Bowles 2015)

RStudio software

O RStudio é um ambiente de desenvolvimento integrado (IDE) para R. Nele estão inclusos ferramentas que facilitam o uso da linguagem R, como um console e uma janela que suporta a execução do código direto, e instrumentos que auxiliam na análise histórica do script e debugação de possíveis erros.

O RStudio está disponível em open source e edições comerciais e é executado no desktop (Windows, Mac e Linux) ou em um navegador conectado ao RStudio Server ou ao RStudio Server Pro (Debian / Ubuntu, RedHat / CentOS e SUSE Linux).

Instalando os softwares

É muito fácil instalar os softwares R e RStudio. Abaixo nós mostramos os passos para a instalação, mas, caso tenha alguma dúvida, assista a este vídeo no youtube: Instalação dos softwares R e RStudio

Instalando o R

  1. Vá no site cran.r-project.org
  2. Faça download do arquivo
  3. Clique em em executar

Instalando o RStudio

  1. Vá no site rstudio.com
  2. Clique em dowload
  3. Escolha o free
  4. Faça o download do Arquivo
  5. Clique em executar

Primeiros passos

Vamos alguns exemplos de como fazer operações usando o R. Para maiores detalhes, consulte o primeiro capítulo do livro Análise de Séries Temporais em R que está disponível no meu site.

Exemplo 1: Qual é o resultado de \(\sqrt[2]{25}\)?

sqrt(25)
## [1] 5


Exemplo 2: Qual é o resto da divisão de \(\frac{5}{2}\)?

5%%2
## [1] 1


Exemplo 3: Tome \(a=25\) e \(b=45\) analise se “a” é maior:

a=25
b=45

a>b
## [1] FALSE


Exemplo 4: Tome \(a=15\) e \(b=25\) faça \(c=a+b\) e \(d=\left ( \sqrt[3]{c}\right )\):

a=15
b=25
(c=a+b)
## [1] 40
d=c^(1/3)
d
## [1] 3.419952


Exemplo 5: Tome \(nome_1 = Big\) e \(nome_2 = Data\). Faça \(nomecompleto= nome_1 +nome_2\):

Para resolver essa questão é necessário fazer uso da função paste(), essa função é usada para concatenar duas ou mais variáveis character.

nome1="big"
nome2='data'
nomecompleto=paste(nome1,nome2)
nomecompleto
## [1] "big data"
## Caso não seja útil o espaço entre as palavras, basta usar a função paste0().


Exemplo 6: Transforme 06/02/2017 em data:

data="06/02/2017"
formatodata = as.Date(x = data,format="%d/%m/%Y")
formatodata
## [1] "2017-02-06"


Exemplo 7: Concatene as listas com os nomes dos alunos:

nomes1<-c("Anna","Pedro","Carlos","Bruno","Vanessa","Paula","Italo")
nomes2<-c("Jorge","Davi","Mariana","Carolina","Alice")

(nomes_completo <- c(nomes1,nomes2))
##  [1] "Anna"     "Pedro"    "Carlos"   "Bruno"    "Vanessa"  "Paula"   
##  [7] "Italo"    "Jorge"    "Davi"     "Mariana"  "Carolina" "Alice"


Exemplo 8: Veja a tabela criada abaixo. a) Acesse o preço do Produto D na tabela produtos; b) Acesse os preço do Produto D e Produto E na tabela produtos; c) Acesse a coluna produtos; d) Crie uma coluna quantidade, na tabela preços, que receba os valores \(quantidade<-c(50,100,120,150,200)\):

Produto<-c("Produto A"," Produto B","Produto C", "Produto D","Produto E")
Preco<-c(5,15,4,6,8)
tabela_preco_produto<-data.frame(Produto,Preco)
tabela_preco_produto
##      Produto Preco
## 1  Produto A     5
## 2  Produto B    15
## 3  Produto C     4
## 4  Produto D     6
## 5  Produto E     8
## Acesse o preço do *Produto D* na tabela produtos: 
tabela_preco_produto[4,2]
## [1] 6
## Acesse os preço do *Produto D* e *Produto E* na tabela produtos:
tabela_preco_produto[4:5,2]
## [1] 6 8
## Acesse a coluna produtos
tabela_preco_produto[,"Produto"]
## [1] Produto A   Produto B Produto C  Produto D  Produto E 
## Levels:  Produto B Produto A Produto C Produto D Produto E
## Crie uma coluna quantidade, na tabela preços, que receba os valores:

tabela_preco_produto$quantidade<-c(50,100,120,150,200)
tabela_preco_produto
##      Produto Preco quantidade
## 1  Produto A     5         50
## 2  Produto B    15        100
## 3  Produto C     4        120
## 4  Produto D     6        150
## 5  Produto E     8        200


Exemplo 9: Seja a matriz A. Qual é o valor na primeira linha e segunda coluna da matriz A?

A<-matrix(c(0,7,0,1,4,5,0,7,0),ncol=3,nrow = 3,byrow = TRUE)
A
##      [,1] [,2] [,3]
## [1,]    0    7    0
## [2,]    1    4    5
## [3,]    0    7    0
A[1,2]
## [1] 7


Exemplo 10: Crie uma lista com os parâmetros:

  • Nome do Curso: Curso de Formação Executiva em Big Data e Data Science
  • Turma: 3
  • Aula: Introdução ao R
minha_lista<-list("Curso de Formação Executiva em Big Data e Data Science",3, "Introdução ao R")
minha_lista
## [[1]]
## [1] "Curso de Formação Executiva em Big Data e Data Science"
## 
## [[2]]
## [1] 3
## 
## [[3]]
## [1] "Introdução ao R"


Exemplo 11: Tome \(a=31\) e \(b=30\), analise qual dos dois objetos é o maior.

a=31
b=30
if(a<b){
   cat("a é maior que b")
 }else{
   cat("b é maior que a")
 }
## b é maior que a


Exemplo 12: Tome o vetor \(v=[16,18,59,35,27,37,38]\), faça uma estrutura que imprima os valores do vetor.

v=c(16,18,59,35,27,37,38)
for (i in 1:length(v)){
  print(v[i])
  }
## [1] 16
## [1] 18
## [1] 59
## [1] 35
## [1] 27
## [1] 37
## [1] 38


Exemplo 13: Construa uma função que retornará a média de dois números.

media<-function(a,b){
   m<-(a+b)/2
   return(m)
 }

media(3,5)
## [1] 4


Análise de Séries Temporais


Vamos introduzir a ideia de análise de séries temporais e abordar alguns conceitos importantes sobre o tema, como: sazonalidade, estacionariedade, heterocedásticidade e ciclo.


Exemplos de séries de tempo


1. Séries Temporais em diferentes frequências

## Preço diário do ouro
library(ggfortify)
library(fpp2)
autoplot(gold)

## Produção trimetral de fio de lã na Austrália [em toneladas]
autoplot(woolyrnq)

## Produção mensal de gás na Austrália 
autoplot(gas)

## Produção de eletricidade [30 em 30 minutos]
autoplot(taylor)


2. Ondas de rádio


3. Eletrocardiograma


4. curvas de Carga


5. Sazonalidade ou Ciclo

  • Exemplo de um evento cíclico

O ciclo de vida da população de lebres e de seu principal predador, o lince-canadense, foi revelado nos registros do número de peles vendidas por caçadores para a Hudson Bay Company.

## Número de armadilhas para capturar Lince no Canadá
library(ggfortify)
data(lynx); trapped <- lynx
autoplot(trapped)


A ST apresenta tendência?

trapped.time <- time(trapped)
trapped.lm <- lm(trapped ~ trapped.time)
summary(trapped.lm)
## 
## Call:
## lm(formula = trapped ~ trapped.time)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -1594  -1211   -755   1032   5366 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)  -4630.034   8493.112  -0.545    0.587
## trapped.time     3.285      4.523   0.726    0.469
## 
## Residual standard error: 1589 on 112 degrees of freedom
## Multiple R-squared:  0.004689,   Adjusted R-squared:  -0.004198 
## F-statistic: 0.5276 on 1 and 112 DF,  p-value: 0.4691

De acordo com o modelo, houve um aumento de 3,39 armadilhas por ano, contudo esse parâmetro não foi significante, indicando que não há tendência.


Outra informação que gostaríamos de saber é o tamanho do ciclo. Como observamos graficamente, parece que o ciclo de vida desses animais é de aproximadamente 5 anos.

ma10 <- filter(x=trapped, filter=rep(x=1/10,times=10), sides=2)
ma5 <- filter(x=trapped, filter=rep(x=1/5,times=5), sides=2)
plot(trapped,col="grey", ylab = "Lynx Trapped", xlab = "Year")
lines(ma10,col="red",lwd=2)
lines(ma5,col="purple",lwd=2)
legend("topright", c(" 5-Year Moving Average", "10-Year Moving Average"), bty = "n", col = c("purple","red"), pch = 15)
abline(trapped.lm, col="black",lwd=2, lty="dashed")


* Exemplo de um evento sazonal

library(BETS)
#   PMS - Receita nominal de serviços - Total - Brasil
pms <- BETS.get(code = 21637)
library(fpp2)
autoplot(pms)

monthplot(pms)

ggseasonplot(pms, polar = T)


Alguns conceitos importantes


1. Caracterização, Modelagem e Previsão de uma série temporal

  • Uma série temporal (ST) é um conjunto de observações, geralmente equiespaçadas, obtidas a partir da medição/observação de uma variável ao longo do tempo;
  • A frequência de observação/medição de uma ST pode variar dependendo do fenômeno observado: minuto, diária, semanal, mensal, anual etc;
  • A partir da análise de ST, é possível obter subsídios para a escolha de um modelo adequado para modelar a série, escolhido dentro de uma classe de modelos pré-existentes;
  • Uma vez construído, um modelo de ST pode ser utilizado para efetuar previsões probabilísticas sobre o futuro da série e/ou analisar a sensibilidade de algumas variáveis à variável objetivo;
  • A capacidade de realizar previsões é fundamental no processo de tomada de decisões em diversos contextos e em diversos lugares como orgãos públicos e empresas.


2. Função de autocorrelação

  • É uma medida de “memória” do processo;
  • A FAC é o procedimento padrão para investigar a dependência linear implicada por um modelo de ST;
  • A FAC ou correlograma de um determinado PE é obtida através do cálculo da seguinte expressão:
    \[\rho(k)= \frac{\gamma_k}{\gamma_0}\]

Exemplo de uma FAC gerada por um processo AR(1)

require(tseries)
require(BETS)

# Simulando um processo AR(1) com parâmetro 0.5
set.seed(10)
sim.AR<-arima.sim(model=list(ar=0.6),n=100)
library(fpp2)
autoplot(sim.AR)

BETS.corrgram(sim.AR,type = "correlation",lag.max = 36)

3. Processo Ruído Branco

  • RB – é um PE estacionário onde as observações são descorrelatadas, isto é, o processo não possui “memória” linear;
  • Geralmente representado por \(\varepsilon_t\) . É importante na construção de modelos para processos com dependência;

Exemplo de uma FAC gerada por um processo ruído branco

require(tseries)

# Simulando um processo Ruído Branco
set.seed(11)
sim.wn<-arima.sim(model=list(),n=100)
library(fpp2)
autoplot(sim.wn)

require(BETS)
BETS.corrgram(sim.wn,type = "correlation",lag.max = 36)


4. Intervalo de confiança

Para observarmos o intervalo de confiança vamos utilizar dois modelos bem simples: Naive e SNaive.

library(fpp2)
library(forecast)
# Daily closing stock prices of Google Inc
fcgoog <- naive(goog, h =  20)
autoplot(fcgoog)

summary(fcgoog)
## 
## Forecast method: Naive method
## 
## Model Information:
## Call: naive(y = goog, h = 20) 
## 
## Residual sd: 8.9145 
## 
## Error measures:
##                     ME     RMSE      MAE        MPE      MAPE MASE
## Training set 0.4436236 8.921089 6.008889 0.06493981 0.9815741    1
##                    ACF1
## Training set 0.04680557
## 
## Forecasts:
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1001         838.96 827.5272 850.3928 821.4750 856.4450
## 1002         838.96 822.7915 855.1285 814.2325 863.6875
## 1003         838.96 819.1577 858.7623 808.6751 869.2449
## 1004         838.96 816.0943 861.8257 803.9900 873.9300
## 1005         838.96 813.3954 864.5246 799.8623 878.0577
## 1006         838.96 810.9554 866.9646 796.1306 881.7894
## 1007         838.96 808.7116 869.2084 792.6990 885.2210
## 1008         838.96 806.6231 871.2969 789.5049 888.4151
## 1009         838.96 804.6615 873.2585 786.5050 891.4150
## 1010         838.96 802.8062 875.1138 783.6675 894.2525
## 1011         838.96 801.0416 876.8784 780.9688 896.9512
## 1012         838.96 799.3555 878.5645 778.3901 899.5299
## 1013         838.96 797.7383 880.1817 775.9169 902.0031
## 1014         838.96 796.1822 881.7378 773.5371 904.3829
## 1015         838.96 794.6808 883.2392 771.2408 906.6792
## 1016         838.96 793.2287 884.6913 769.0200 908.9000
## 1017         838.96 791.8212 886.0988 766.8674 911.0526
## 1018         838.96 790.4546 887.4654 764.7774 913.1426
## 1019         838.96 789.1254 888.7946 762.7446 915.1754
## 1020         838.96 787.8308 890.0892 760.7646 917.1554
# Quarterly Australian Beer production
fcbeer <- snaive(ausbeer,h = 16)
autoplot(fcbeer)

summary(fcbeer)
## 
## Forecast method: Seasonal naive method
## 
## Model Information:
## Call: snaive(y = ausbeer, h = 16) 
## 
## Residual sd: 19.1207 
## 
## Error measures:
##                    ME     RMSE      MAE      MPE    MAPE MASE       ACF1
## Training set 3.098131 19.32591 15.50935 0.838741 3.69567    1 0.01093868
## 
## Forecasts:
##         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 2010 Q3            419 394.2329 443.7671 381.1219 456.8781
## 2010 Q4            488 463.2329 512.7671 450.1219 525.8781
## 2011 Q1            414 389.2329 438.7671 376.1219 451.8781
## 2011 Q2            374 349.2329 398.7671 336.1219 411.8781
## 2011 Q3            419 383.9740 454.0260 365.4323 472.5677
## 2011 Q4            488 452.9740 523.0260 434.4323 541.5677
## 2012 Q1            414 378.9740 449.0260 360.4323 467.5677
## 2012 Q2            374 338.9740 409.0260 320.4323 427.5677
## 2012 Q3            419 376.1020 461.8980 353.3932 484.6068
## 2012 Q4            488 445.1020 530.8980 422.3932 553.6068
## 2013 Q1            414 371.1020 456.8980 348.3932 479.6068
## 2013 Q2            374 331.1020 416.8980 308.3932 439.6068
## 2013 Q3            419 369.4657 468.5343 343.2438 494.7562
## 2013 Q4            488 438.4657 537.5343 412.2438 563.7562
## 2014 Q1            414 364.4657 463.5343 338.2438 489.7562
## 2014 Q2            374 324.4657 423.5343 298.2438 449.7562


5. Valores ajustados e resíduos

O valor ajustado é a previsão de uma observação usando todas as observações passadas, isto é:

  1. são previsões 1-passo-a-frente
  2. não é a previsão verdadeira, uma vez que os parâmetros são estimados a cada novo dado
fc <- naive(oil)
autoplot(oil, series = "Dados reais") + xlab("Year") + autolayer(fitted(fc), series = "valores ajustados") + ggtitle("Produção de petróleo na Saudi Arabia")


O resíduo é a diferença entre o valor ajustado/previsto e o valor real [são erros 1-passo-a-frente]

autoplot(residuals(fc))


Os resíduos devem se parecer com um ruído branco:

  1. Características essenciais
    • eles devem ser não correlacionados;
    • devem ter média zero.
  2. Propriedades úteis (para previsão e intervalo de confiança dos parâmetros)
    • devem ter variância constante;
    • normalmente distribuidos.


Uma maneira fácil de testar essas propriedades é usando a função “checkresiduals()”.

checkresiduals(fc)

## 
##  Ljung-Box test
## 
## data:  Residuals from Naive method
## Q* = 12.59, df = 10, p-value = 0.2475
## 
## Model df: 0.   Total lags used: 10


6. Treinamento e Teste de previsão


observações:

  1. O conjunto de testes não deve ser usado para fazer as previsões;
  2. As previsões devem ser construídas usando o conjunto de treinamento;
  3. Um bom modelo para os dados de treinamento, não necessariamente, é um bom modelo para conjunto de teste.
training <- window(oil, end = 2003)
test <- window(oil, start = 2004)
fc <- naive(training, h = 10)
autoplot(fc) + autolayer(test, series = "conjunto de teste") + autolayer(fitted(fc), series = "valores ajustados")


!! Cuidado
Erro de previsão é a diferença entre o valor observado e o valor previsto no conjunto de teste. Resíduos são os erros do conjunto de treinamento, normalmente 1-passo-a-frente (o erro de previsão pode ser múltiplos passos-a-frente)


7. Acurácia dos modelos de previsão

require(forecast)
accuracy(fc,test)
##                    ME     RMSE      MAE      MPE      MAPE      MASE
## Training set  9.87358 52.56156 39.42504 2.506565 12.570647 1.0000000
## Test set     21.60250 35.09832 29.97666 3.963914  5.777875 0.7603458
##                   ACF1 Theil's U
## Training set 0.1801528        NA
## Test set     0.4029519  1.184862

8. Out-of-sample rolling evaluation

com os mesmos parâmetros estimados para os dados passados, move-se a origem de previsão no período out-of-sample, fazendo-se previsões para cada origem;


9. Exercício

Crie um modelo NAIVE e SNAIVE para a ST de produção de cerveja na Austrália. Interprete os resultados.

library(fpp2)
library(forecast)
cerveja <- window(ausbeer,start = c(1990,1))
ts.plot(cerveja)

# conjunto de teste e treinamento
training <- window(cerveja, end = c(2007,4))
test <- window(cerveja, start = c(2008,1))

cerva_naive <- naive(training, h = 10) #meu horizonte de previsão é do mesmo tamanho que meu conjunto de teste
checkresiduals(cerva_naive)

## 
##  Ljung-Box test
## 
## data:  Residuals from Naive method
## Q* = 150.25, df = 8, p-value < 2.2e-16
## 
## Model df: 0.   Total lags used: 8
autoplot(cerva_naive) + autolayer(test, series = "conjunto de teste") + autolayer(fitted(cerva_naive), series = "valores ajustados")

accuracy(cerva_naive,test)
##                       ME     RMSE      MAE        MPE     MAPE     MASE
## Training set  -0.1690141 70.80185 58.16901  -1.174978 12.70973 3.874136
## Test set     -51.4000000 62.69290 57.40000 -12.954916 14.18442 3.822919
##                     ACF1 Theil's U
## Training set -0.27090808        NA
## Test set     -0.06905715  1.254009
cerva_snaive <- snaive(training, h = 10) #meu horizonte de previsão é do mesmo tamanho que meu conjunto de teste
autoplot(cerva_snaive) + autolayer(test, series = "conjunto de teste") + autolayer(fitted(cerva_snaive), series = "valores ajustados")

checkresiduals(cerva_snaive)

## 
##  Ljung-Box test
## 
## data:  Residuals from Seasonal naive method
## Q* = 20.559, df = 8, p-value = 0.008417
## 
## Model df: 0.   Total lags used: 8
accuracy(cerva_snaive,test)
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set -4.073529 17.55621 15.01471 -0.946629 3.429068 1.0000000
## Test set      5.200000 14.31084 13.40000  1.147554 3.168503 0.8924584
##                    ACF1 Theil's U
## Training set -0.1690361        NA
## Test set      0.1318407  0.298728

Materiais de Apoio

  1. Introduction to R for Data Science: este é um curso introdutório e irá ajuda-lo a entender conceitos básicos de programação em R;

  2. Vídeos sobre o R (FGV/IBRE | NMEC): vídeos em português produzidos pelo nosso time da FGV que facilitarão o entendimento de conceitos básicos de programação em R;

  3. Khan Academy: ideal para aprender conceitos básicos de matemática e estatística;

  4. BETS (Brazilian Economic Time Series package) – este é o pacote R que estamos desenvolvendo, fiquem à vontade para instala-lo. Iremos utiliza-lo no nosso curso;

# Instalação do pacote pelo CRAN 
install.package("BETS")
                      
# Para obter sempre a versão em desenvolvimento e acompanhar o precessod de criação:
install.packages("devtools")
require(devtools)
install_github("pedrocostaferreira/BETS")
require(BETS)
  1. Forecasting using R: este é um excelente curso do Rob Hyndman que poderá lhe ajudar a compreender um pouco mais o mundo de séries temporais.

Prof. Dr. Pedro Costa Ferreira


Doutor em Engenharia Elétrica - (Decision Support Methods) e Mestre em Economia. Co-autor dos livros “Planejamento da Operação de Sistemas Hidrotérmicos no Brasil” e “Análise de Séries Temporais em R: curso introdutório”. É o primeiro e único pesquisador da América Latina a ser recomendado pela empresa RStudio Inc.


Atuou em projetos de Pesquisa e Desenvolvimento (P&D) no setor elétrico nas empresas Light S.A. (e.g. estudo de contingências judiciais), Cemig S.A, Duke Energy S.A, entre outras. Atuou como consultor em Big Data e Data Science nas empresas, Coca-Cola Brasil, Light SA, Duratex, ONS, entre outras. Ministrou cursos de estatística e séries temporais na PUC-Rio e IBMEC e em empresas como o Operador Nacional do Setor Elétrico (ONS), Petrobras e CPFL S.A.


Atualmente é professor de Econometria de Séries Temporais e Estatística, cientista chefe do Núcleo de Métodos Estatísticos e Computacionais (FGV|IBRE), coordenador do curso Big Data e Data Science (FGV|IDE) e sócio-diretor da empresa Model Thinking Br (MTBr). É também revisor de importantes journals, como Energy Policy e Journal of Applied Statistics. Principais estudos são em modelos Econométricos, Incerteza Econômica, Preços, R software e Business Analytics [e.g detecção de fraudes; HR analytics].


contatos:
email: pedro.guilherme@fgv.br
website: pedrocostaferreira.github.io
GitHub: github.com/pedrocostaferreira
Linkedin: linkedin.com/pedro-costa-ferreira

Referências

Bowles, M. 2015. “Ensemble Packages in R. See: Http://Blog. Revolutionanalytics. Com/2014/04/Ensemble-Packages-in-R. Html.” Accessed.

Team, R Core. 2017. “R: A Language and Environment for Statistical Computing. Vienna: R Foundation for Statistical Computing. Available Online at: H Ttp.” Www. R-Project. Org.

Varian, Hal R. 2014. “Big Data: New Tricks for Econometrics.” The Journal of Economic Perspectives 28 (2). American Economic Association: 3–27.