Desmistificando a Econometria de Séries Temporais

Kaius de Paula Corrêa

2023-01-23

 

1 Sobre mim

Me chamo Kaius, sou um economista formado na UFV e agraciado com a medalha de prata Presidente Bernandes. Tive o privilégio de atuar como monitor da disciplina de ECO450 (Econometria I), ECO455 (Econometria II) e ECO457 (Econometria III), auxiliando os alunos de forma complementar as aulas.

Atuo como Cientista de Dados, uma área que sou completamente apaixonado, que mistura elementos de computação, estatística e conhecimento de área para resolução de inúmeros problemas. Espero fazer jus a minha paixão pelo mundo de dados e lhe introduzir de forma descontraída os principais métodos e ferramentas utilizadas para produção científica ou para utilização de empresas em meio a resolver problemas.

Ao longo deste documento, irei priorizar a utilização de elementos visuais, por meio de um pacote do R chamado ggplot2. Acredito que a matemática seja uma parte importante do processo de aprendizado, mas não podemos depender somente dela e devemos recorrer a lógica como base, por isso meu foco aqui será de instigar você a entender e se entusiasmar com o que pode ser feito com os métodos econométricos sem entrar em muitas expressões mais cabeludas.

2 Introdução

A econometria das séries temporais é uma área da econometria que se preocupa em utilizar modelos mais adequados sob presença do elemento tempo como variável explicativa de um fenômeno. Acima de tudo, lembrando da econometria I, esse efeito é o responsável pela introdução da autocorrelação serial em nossas estimativas.

A definição de google para esse problema é bem direto ao ponto: correlação existente entre uma observação i qualquer e a observação imediatamente anterior (i-1). Além disso, a autocorrelação (correlação serial) de ordem q é a correlação existente entre uma observação i qualquer e a observação anterior (i-q).

Na prática, podemos dizer que uma variável possui autocorrelação serial, quando, por exemplo, o PIB do ano passado explica o PIB desse ano. Isso faz sentido, visto que podemos dar uma previsão com base no que já aconteceu.

Por esse efeito, a econometria de séries temporais tem todo o foco em gerar previsões robustas sobre efeitos temporais, e é exatamente isso que busco explicar nesse documento, que não exclui a leitura de um material mais específico.

3 Conhecendo os dados.

Abaixo é a tabela relacionada a série de tempo. É a mesma ideia de abrir a série de tempos no excel, e no R a ideia é exatamente a mesma.

Observe que a série de tempo está apresentando as observações mês a mês.

library(forecast) # me dá mais funções para análise e estimação de séries temporais
library(astsa) # me dá mais funções para análise e estimação de séries temporais
library(aTSA) # teste para cointegração
library(dplyr) # me fornece funções para manipulação de dados
library(data.table) #formato de tabela melhor que o padrão do R
library(readxl) # leitura de dados do excel
library(kableExtra) # Só uso pra melhorar a imagem da tabela, nem considere isso
library(plotly) # igual o de cima só que pros gráficos
library(ggplot2) # melhor biblioteca de visualização de dados que tem por aí
library(vars) # modelagem VAR

dataset <- read_excel("PIB.xls")
dataset %>%
  kbl() %>%
  kable_material() %>%
  scroll_box(width = "800px", height = "350px")
Data PIB
1990-01-01 174698.3
1990-02-01 195161.9
1990-03-01 268903.2
1990-04-01 211052.0
1990-05-01 219974.2
1990-06-01 195822.5
1990-07-01 195128.7
1990-08-01 190782.3
1990-09-01 183468.6
1990-10-01 202031.9
1990-11-01 208569.9
1990-12-01 184664.1
1991-01-01 178441.2
1991-02-01 175443.5
1991-03-01 168590.9
1991-04-01 196841.5
1991-05-01 209151.1
1991-06-01 213064.0
1991-07-01 209675.4
1991-08-01 208926.1
1991-09-01 187224.5
1991-10-01 204366.7
1991-11-01 201426.0
1991-12-01 184176.1
1992-01-01 183638.0
1992-02-01 185993.9
1992-03-01 185350.3
1992-04-01 182378.5
1992-05-01 189865.3
1992-06-01 195462.0
1992-07-01 196981.7
1992-08-01 196366.6
1992-09-01 196261.6
1992-10-01 199191.2
1992-11-01 199492.9
1992-12-01 180601.9
1993-01-01 181718.7
1993-02-01 181781.6
1993-03-01 202999.9
1993-04-01 198595.8
1993-05-01 201615.4
1993-06-01 196966.4
1993-07-01 204903.1
1993-08-01 208411.0
1993-09-01 212291.2
1993-10-01 206761.4
1993-11-01 204688.8
1993-12-01 186310.9
1994-01-01 170812.2
1994-02-01 153255.1
1994-03-01 157942.7
1994-04-01 165888.8
1994-05-01 181951.4
1994-06-01 234223.0
1994-07-01 276449.0
1994-08-01 292405.2
1994-09-01 286222.6
1994-10-01 287548.8
1994-11-01 285495.9
1994-12-01 270221.1
1995-01-01 283593.0
1995-02-01 297416.2
1995-03-01 350398.8
1995-04-01 328964.8
1995-05-01 313058.1
1995-06-01 308031.1
1995-07-01 313975.8
1995-08-01 322332.3
1995-09-01 316736.5
1995-10-01 326753.2
1995-11-01 343874.5
1995-12-01 333031.8
1996-01-01 317047.9
1996-02-01 305395.4
1996-03-01 306785.5
1996-04-01 307989.4
1996-05-01 330323.3
1996-06-01 334154.1
1996-07-01 349618.7
1996-08-01 347794.9
1996-09-01 332844.3
1996-10-01 357046.3
1996-11-01 370608.3
1996-12-01 373142.3
1997-01-01 351528.2
1997-02-01 320413.7
1997-03-01 315466.4
1997-04-01 327302.0
1997-05-01 345831.0
1997-06-01 358158.7
1997-07-01 361573.9
1997-08-01 361826.6
1997-09-01 360664.7
1997-10-01 383257.5
1997-11-01 373764.6
1997-12-01 353483.7
1998-01-01 343410.6
1998-02-01 326803.9
1998-03-01 345974.1
1998-04-01 347514.1
1998-05-01 363872.7
1998-06-01 365571.4
1998-07-01 372624.8
1998-08-01 371550.0
1998-09-01 364870.1
1998-10-01 376122.5
1998-11-01 371484.2
1998-12-01 355602.2
1999-01-01 343538.3
1999-02-01 339854.4
1999-03-01 369850.4
1999-04-01 363856.0
1999-05-01 369105.9
1999-06-01 377138.2
1999-07-01 371948.5
1999-08-01 374612.2
1999-09-01 365091.1
1999-10-01 382197.2
1999-11-01 393859.0
1999-12-01 388362.9
2000-01-01 362642.1
2000-02-01 358856.0
2000-03-01 360866.6
2000-04-01 355411.1
2000-05-01 383541.8
2000-06-01 395291.2
2000-07-01 392353.9
2000-08-01 396016.6
2000-09-01 376982.5
2000-10-01 401028.4
2000-11-01 401926.0
2000-12-01 392830.2
2001-01-01 378555.7
2001-02-01 373680.5
2001-03-01 396297.1
2001-04-01 391681.0
2001-05-01 403024.6
2001-06-01 376879.6
2001-07-01 393747.9
2001-08-01 399986.6
2001-09-01 382427.8
2001-10-01 405474.1
2001-11-01 408778.9
2001-12-01 389627.4
2002-01-01 385716.9
2002-02-01 380808.2
2002-03-01 401797.1
2002-04-01 406332.1
2002-05-01 415711.9
2002-06-01 411967.6
2002-07-01 419565.0
2002-08-01 419810.7
2002-09-01 406936.6
2002-10-01 423751.5
2002-11-01 421996.6
2002-12-01 395622.1
2003-01-01 379076.6
2003-02-01 386177.2
2003-03-01 403249.9
2003-04-01 407871.8
2003-05-01 401809.0
2003-06-01 397069.9
2003-07-01 418893.1
2003-08-01 413276.0
2003-09-01 421695.4
2003-10-01 438384.7
2003-11-01 432897.1
2003-12-01 430584.8
2004-01-01 401955.9
2004-02-01 395103.5
2004-03-01 433391.6
2004-04-01 430370.5
2004-05-01 434698.3
2004-06-01 447003.9
2004-07-01 459626.6
2004-08-01 451445.7
2004-09-01 437814.5
2004-10-01 450775.7
2004-11-01 464057.2
2004-12-01 464754.0
2005-01-01 423416.1
2005-02-01 413585.6
2005-03-01 448274.6
2005-04-01 449587.8
2005-05-01 449339.9
2005-06-01 457384.0
2005-07-01 464479.2
2005-08-01 471260.0
2005-09-01 454396.7
2005-10-01 470472.5
2005-11-01 482233.9
2005-12-01 489035.5
2006-01-01 454938.8
2006-02-01 435744.4
2006-03-01 462928.2
2006-04-01 449594.2
2006-05-01 481067.4
2006-06-01 484028.7
2006-07-01 502640.1
2006-08-01 508884.4
2006-09-01 486319.2
2006-10-01 516634.7
2006-11-01 527697.6
2006-12-01 529190.1
2007-01-01 502525.4
2007-02-01 480522.5
2007-03-01 514213.9
2007-04-01 507056.6
2007-05-01 532457.5
2007-06-01 536821.9
2007-07-01 546218.4
2007-08-01 547231.6
2007-09-01 518008.7
2007-10-01 560092.5
2007-11-01 556972.1
2007-12-01 554623.7
2008-01-01 539919.4
2008-02-01 526969.0
2008-03-01 545547.9
2008-04-01 556844.7
2008-05-01 566261.6
2008-06-01 586646.3
2008-07-01 611329.3
2008-08-01 590258.9
2008-09-01 579510.3
2008-10-01 610355.8
2008-11-01 587102.4
2008-12-01 571281.5
2009-01-01 537249.7
2009-02-01 522587.3
2009-03-01 559569.9
2009-04-01 551362.7
2009-05-01 567616.5
2009-06-01 581478.5
2009-07-01 600855.9
2009-08-01 597157.6
2009-09-01 593340.6
2009-10-01 630429.8
2009-11-01 634539.1
2009-12-01 648536.0
2010-01-01 593215.7
2010-02-01 582757.9
2010-03-01 632195.5
2010-04-01 619829.4
2010-05-01 636436.4
2010-06-01 646544.9
2010-07-01 669400.3
2010-08-01 671324.7
2010-09-01 661392.5
2010-10-01 683363.4
2010-11-01 701506.8
2010-12-01 694645.8
2011-01-01 645375.7
2011-02-01 643602.4
2011-03-01 663209.5
2011-04-01 661339.3
2011-05-01 691797.1
2011-06-01 699581.1
2011-07-01 701856.1
2011-08-01 705501.7
2011-09-01 674094.1
2011-10-01 702004.4
2011-11-01 718870.3
2011-12-01 718815.1
2012-01-01 670677.0
2012-02-01 668402.5
2012-03-01 712377.4
2012-04-01 688631.0
2012-05-01 720390.1
2012-06-01 715746.2
2012-07-01 741180.7
2012-08-01 746975.3
2012-09-01 696007.7
2012-10-01 743137.3
2012-11-01 740005.8
2012-12-01 732876.0
2013-01-01 711982.4
2013-02-01 681710.9
2013-03-01 727191.2
2013-04-01 743248.5
2013-05-01 741247.9
2013-06-01 746586.1
2013-07-01 771847.4
2013-08-01 760182.8
2013-09-01 733150.0
2013-10-01 774633.0
2013-11-01 768241.3
2013-12-01 775507.5
2014-01-01 742056.4
2014-02-01 727127.9
2014-03-01 740296.2
2014-04-01 746662.5
2014-05-01 750729.1
2014-06-01 725721.1
2014-07-01 761889.7
2014-08-01 751000.9
2014-09-01 746468.5
2014-10-01 769184.6
2014-11-01 758337.4
2014-12-01 766682.7
2015-01-01 716529.0
2015-02-01 688456.9
2015-03-01 743149.4
2015-04-01 715541.6
2015-05-01 705184.3
2015-06-01 705185.9
2015-07-01 724789.3
2015-08-01 708002.6
2015-09-01 708218.0
2015-10-01 734091.2
2015-11-01 719913.1
2015-12-01 723198.2
2016-01-01 672073.1
2016-02-01 668626.4
2016-03-01 700354.6
2016-04-01 683511.0
2016-05-01 686641.2
2016-06-01 714558.7
2016-07-01 706490.1
2016-08-01 707057.5
2016-09-01 673140.2
2016-10-01 691664.9
2016-11-01 711514.8
2016-12-01 740857.8
2017-01-01 687067.6
2017-02-01 668890.8
2017-03-01 706794.5
2017-04-01 680494.8
2017-05-01 710853.1
2017-06-01 721049.9
2017-07-01 720369.6
2017-08-01 716687.3
2017-09-01 680262.9
2017-10-01 704081.0
2017-11-01 723145.3
2017-12-01 749380.6
2018-01-01 704921.1
2018-02-01 669626.2
2018-03-01 708049.4
2018-04-01 704902.6
2018-05-01 683679.2
2018-06-01 720058.1
2018-07-01 722115.2
2018-08-01 720344.0
2018-09-01 685045.0
2018-10-01 727494.6
2018-11-01 730102.7
2018-12-01 739709.0
2019-01-01 706763.8
2019-02-01 689904.4
2019-03-01 698882.0
2019-04-01 712972.4
2019-05-01 726522.7
2019-06-01 718205.0
2019-07-01 751610.0
2019-08-01 738295.7
2019-09-01 735714.7
2019-10-01 765904.8
2019-11-01 751888.5
2019-12-01 760367.0
2020-01-01 725058.8
2020-02-01 714600.7
2020-03-01 723115.5
2020-04-01 653864.1
2020-05-01 661612.0
2020-06-01 694692.1
2020-07-01 737299.0
2020-08-01 728749.0
2020-09-01 735042.6
2020-10-01 758357.7
2020-11-01 754535.5
2020-12-01 770907.3
2021-01-01 731680.6
2021-02-01 750086.1
2021-03-01 811273.1
2021-04-01 782022.8
2021-05-01 775193.2
2021-06-01 772853.1
2021-07-01 796847.4
2021-08-01 785520.1
2021-09-01 764799.1
2021-10-01 761170.8
2021-11-01 772984.2
2021-12-01 786974.9
2022-01-01 752223.6
2022-02-01 753542.9

Essa série pode ser representada graficamente simplesmente se usarmos a coluna Data no eixo x e PIB no eixo y.

# Tive que converter pra um formato específico de tempo para estimar, não é importante se você não quer usar o R...
dataset$data_em_segundos <- as.numeric(dataset$Data) 

ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  theme_classic()

4 Tendência e sazonalidade.

A definição ténica que o google vai dar é:

Tendência e sazonalidade são os componentes não observáveis de uma série temporal que representam, respectivamente, o movimento de longo prazo e o padrão regular (queda/subida) de um determinado período da série de tempo.

A definição que eu posso te dar é: tendência vai ser o comportamento do que você quer explicar ao longo de todo o tempo. Sazonalidade são as variações ao longo dessa tendência, que se repetem constantemente em dados periodos.

Como estimar a tendência? Vamos lembrar do estimador de MQO! Podemos estimar a tendência de X sobre Y, dado que X é o tempo. Não é muito distante de qualquer outro modelo linear estimado na econometria I, só que aqui não temos a preocupação acima da significância do beta estimado (porque esse valor não é confiável).

Não lembra aquela formula enjoada de disperção do MQO? Nem eu lembro esse trem. Usa a formula matricial! (Ou faz que nem qualquer pessoa normal e usa um programa pra estimar isso). De toda forma, usando a ferramenta que você achar melhor, o objetivo aqui é estimar o que?

Vamos lembrar:

  • Uma função linear tem a fórmula a + bX
  • Uma função exponencial tem a fórmula a + bX + cX^2
  • Uma função cúbica tem a fórmula a + bX + cX^2 + dX^3

Podemos estimar esses valores que não são X, e pronto!. A linear tem essa cara:

modelo_linear <- lm(PIB ~ data_em_segundos, dataset)
ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_line(aes(y = predict(modelo_linear))) + 
  theme_classic()

A exponencial tem essa:

modelo_exp <- lm(PIB ~ data_em_segundos + I(data_em_segundos ^ 2) , dataset)
ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_line(aes(y = predict(modelo_exp))) + 
  theme_classic()

A cúbica tem essa:

modelo_cubico <- lm(PIB ~ data_em_segundos + I(data_em_segundos ^ 2) + I(data_em_segundos ^ 3), dataset)
ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_line(aes(y = predict(modelo_cubico))) + 
  theme_classic()

Agora você pode estar se perguntando: e o quico?

A gente pode fazer uma previsão usando a tendência. É uma previsão robusta? Não necessariamente. (para a teoria econômica pelo menos.)

Nesse caso, o MQO é o melhor estimador linear não viesado? Lembrando de econometria I, sob presença de autocorrelação serial (defini lá na introdução), o MQO perde sua eficiencia (apresenta cada vez maiores variâncias), por isso, não é interessante para a análise temporal.

E a sazonalidade? Bom, sazonalidade pode ser uma dummy.

Vamos lembrar o que é uma dummy com um exemplo: Sou um graduando em economia e gostaria de estimar disparidades salariais no mercado de trabalho para indivíduos de sexos opostos. Tenho uma base de dados com as seguintes informações: Sexo, anos_de_estudo, renda.

Sexo assume um valor de 1 quando o indivíduo é do sexo masculino e 0 quando é do sexo feminino.

Uma forma bem simples de estimar desigualdade poderia ser feita da seguinte forma:

\[ y_{renda} = \beta_0 + \beta_1 escolaridade + \beta_2 Sexo \]

A dummy quando assume o valor de 1 pode adicionar ou reduzir do valor da renda quando comparado com o caso em que ela assume o valor 0.

Perfeito! Lembramos qual é a ideia de uma estimação com dummies. Vamos voltar ao modelo de séries temporais.

A sazonalidade pode ser estimada pra tentar trazer mais poder explicativo ao modelo geral. Poderíamos criar 4 dummies trimestrais:

D1 <- assume o valor de 1 quando o mês estiver entre janeiro e março. 0 caso contrário.

D2 <- assume o valor de 1 quando o mês estiver entre abril e junho. 0 caso contrário.

D3 <- assume o valor de 1 quando o mês estiver entre julho e setembro. 0 caso contrário.

D4 <- assume o valor de 1 quando o mês estiver entre outubro e dezembro. 0 caso contrário.

Minha estimação de tendência linear com sazonalidade teria essa cara:

\[ y_{PIB} = \beta_0 + \beta_1 data + \beta_2 D_1 + \beta_3 D_2 + \beta_4 D_3 \]

Observe que D4 está fora da equação por ser a base.

Gerei exatamente essas dummies na tabela apresentada no início do documento, dá uma olhada abaixo:

dataset <- read_excel("PIB.xls")
dataset <- dataset %>%
  mutate(D1 = ifelse(months(Data) %in% c("janeiro", "fevereiro", "março"), 1, 0),
         D2 = ifelse(months(Data) %in% c("abril", "maio", "junho"), 1, 0),
         D3 = ifelse(months(Data) %in% c("julho", "agosto", "setembro"), 1, 0),
         D4 = ifelse(months(Data) %in% c("outubro", "novembro", "dezembro"), 1, 0))


dataset %>%
  kbl() %>%
  kable_material() %>%
  scroll_box(width = "800px", height = "350px")
Data PIB D1 D2 D3 D4
1990-01-01 174698.3 1 0 0 0
1990-02-01 195161.9 1 0 0 0
1990-03-01 268903.2 1 0 0 0
1990-04-01 211052.0 0 1 0 0
1990-05-01 219974.2 0 1 0 0
1990-06-01 195822.5 0 1 0 0
1990-07-01 195128.7 0 0 1 0
1990-08-01 190782.3 0 0 1 0
1990-09-01 183468.6 0 0 1 0
1990-10-01 202031.9 0 0 0 1
1990-11-01 208569.9 0 0 0 1
1990-12-01 184664.1 0 0 0 1
1991-01-01 178441.2 1 0 0 0
1991-02-01 175443.5 1 0 0 0
1991-03-01 168590.9 1 0 0 0
1991-04-01 196841.5 0 1 0 0
1991-05-01 209151.1 0 1 0 0
1991-06-01 213064.0 0 1 0 0
1991-07-01 209675.4 0 0 1 0
1991-08-01 208926.1 0 0 1 0
1991-09-01 187224.5 0 0 1 0
1991-10-01 204366.7 0 0 0 1
1991-11-01 201426.0 0 0 0 1
1991-12-01 184176.1 0 0 0 1
1992-01-01 183638.0 1 0 0 0
1992-02-01 185993.9 1 0 0 0
1992-03-01 185350.3 1 0 0 0
1992-04-01 182378.5 0 1 0 0
1992-05-01 189865.3 0 1 0 0
1992-06-01 195462.0 0 1 0 0
1992-07-01 196981.7 0 0 1 0
1992-08-01 196366.6 0 0 1 0
1992-09-01 196261.6 0 0 1 0
1992-10-01 199191.2 0 0 0 1
1992-11-01 199492.9 0 0 0 1
1992-12-01 180601.9 0 0 0 1
1993-01-01 181718.7 1 0 0 0
1993-02-01 181781.6 1 0 0 0
1993-03-01 202999.9 1 0 0 0
1993-04-01 198595.8 0 1 0 0
1993-05-01 201615.4 0 1 0 0
1993-06-01 196966.4 0 1 0 0
1993-07-01 204903.1 0 0 1 0
1993-08-01 208411.0 0 0 1 0
1993-09-01 212291.2 0 0 1 0
1993-10-01 206761.4 0 0 0 1
1993-11-01 204688.8 0 0 0 1
1993-12-01 186310.9 0 0 0 1
1994-01-01 170812.2 1 0 0 0
1994-02-01 153255.1 1 0 0 0
1994-03-01 157942.7 1 0 0 0
1994-04-01 165888.8 0 1 0 0
1994-05-01 181951.4 0 1 0 0
1994-06-01 234223.0 0 1 0 0
1994-07-01 276449.0 0 0 1 0
1994-08-01 292405.2 0 0 1 0
1994-09-01 286222.6 0 0 1 0
1994-10-01 287548.8 0 0 0 1
1994-11-01 285495.9 0 0 0 1
1994-12-01 270221.1 0 0 0 1
1995-01-01 283593.0 1 0 0 0
1995-02-01 297416.2 1 0 0 0
1995-03-01 350398.8 1 0 0 0
1995-04-01 328964.8 0 1 0 0
1995-05-01 313058.1 0 1 0 0
1995-06-01 308031.1 0 1 0 0
1995-07-01 313975.8 0 0 1 0
1995-08-01 322332.3 0 0 1 0
1995-09-01 316736.5 0 0 1 0
1995-10-01 326753.2 0 0 0 1
1995-11-01 343874.5 0 0 0 1
1995-12-01 333031.8 0 0 0 1
1996-01-01 317047.9 1 0 0 0
1996-02-01 305395.4 1 0 0 0
1996-03-01 306785.5 1 0 0 0
1996-04-01 307989.4 0 1 0 0
1996-05-01 330323.3 0 1 0 0
1996-06-01 334154.1 0 1 0 0
1996-07-01 349618.7 0 0 1 0
1996-08-01 347794.9 0 0 1 0
1996-09-01 332844.3 0 0 1 0
1996-10-01 357046.3 0 0 0 1
1996-11-01 370608.3 0 0 0 1
1996-12-01 373142.3 0 0 0 1
1997-01-01 351528.2 1 0 0 0
1997-02-01 320413.7 1 0 0 0
1997-03-01 315466.4 1 0 0 0
1997-04-01 327302.0 0 1 0 0
1997-05-01 345831.0 0 1 0 0
1997-06-01 358158.7 0 1 0 0
1997-07-01 361573.9 0 0 1 0
1997-08-01 361826.6 0 0 1 0
1997-09-01 360664.7 0 0 1 0
1997-10-01 383257.5 0 0 0 1
1997-11-01 373764.6 0 0 0 1
1997-12-01 353483.7 0 0 0 1
1998-01-01 343410.6 1 0 0 0
1998-02-01 326803.9 1 0 0 0
1998-03-01 345974.1 1 0 0 0
1998-04-01 347514.1 0 1 0 0
1998-05-01 363872.7 0 1 0 0
1998-06-01 365571.4 0 1 0 0
1998-07-01 372624.8 0 0 1 0
1998-08-01 371550.0 0 0 1 0
1998-09-01 364870.1 0 0 1 0
1998-10-01 376122.5 0 0 0 1
1998-11-01 371484.2 0 0 0 1
1998-12-01 355602.2 0 0 0 1
1999-01-01 343538.3 1 0 0 0
1999-02-01 339854.4 1 0 0 0
1999-03-01 369850.4 1 0 0 0
1999-04-01 363856.0 0 1 0 0
1999-05-01 369105.9 0 1 0 0
1999-06-01 377138.2 0 1 0 0
1999-07-01 371948.5 0 0 1 0
1999-08-01 374612.2 0 0 1 0
1999-09-01 365091.1 0 0 1 0
1999-10-01 382197.2 0 0 0 1
1999-11-01 393859.0 0 0 0 1
1999-12-01 388362.9 0 0 0 1
2000-01-01 362642.1 1 0 0 0
2000-02-01 358856.0 1 0 0 0
2000-03-01 360866.6 1 0 0 0
2000-04-01 355411.1 0 1 0 0
2000-05-01 383541.8 0 1 0 0
2000-06-01 395291.2 0 1 0 0
2000-07-01 392353.9 0 0 1 0
2000-08-01 396016.6 0 0 1 0
2000-09-01 376982.5 0 0 1 0
2000-10-01 401028.4 0 0 0 1
2000-11-01 401926.0 0 0 0 1
2000-12-01 392830.2 0 0 0 1
2001-01-01 378555.7 1 0 0 0
2001-02-01 373680.5 1 0 0 0
2001-03-01 396297.1 1 0 0 0
2001-04-01 391681.0 0 1 0 0
2001-05-01 403024.6 0 1 0 0
2001-06-01 376879.6 0 1 0 0
2001-07-01 393747.9 0 0 1 0
2001-08-01 399986.6 0 0 1 0
2001-09-01 382427.8 0 0 1 0
2001-10-01 405474.1 0 0 0 1
2001-11-01 408778.9 0 0 0 1
2001-12-01 389627.4 0 0 0 1
2002-01-01 385716.9 1 0 0 0
2002-02-01 380808.2 1 0 0 0
2002-03-01 401797.1 1 0 0 0
2002-04-01 406332.1 0 1 0 0
2002-05-01 415711.9 0 1 0 0
2002-06-01 411967.6 0 1 0 0
2002-07-01 419565.0 0 0 1 0
2002-08-01 419810.7 0 0 1 0
2002-09-01 406936.6 0 0 1 0
2002-10-01 423751.5 0 0 0 1
2002-11-01 421996.6 0 0 0 1
2002-12-01 395622.1 0 0 0 1
2003-01-01 379076.6 1 0 0 0
2003-02-01 386177.2 1 0 0 0
2003-03-01 403249.9 1 0 0 0
2003-04-01 407871.8 0 1 0 0
2003-05-01 401809.0 0 1 0 0
2003-06-01 397069.9 0 1 0 0
2003-07-01 418893.1 0 0 1 0
2003-08-01 413276.0 0 0 1 0
2003-09-01 421695.4 0 0 1 0
2003-10-01 438384.7 0 0 0 1
2003-11-01 432897.1 0 0 0 1
2003-12-01 430584.8 0 0 0 1
2004-01-01 401955.9 1 0 0 0
2004-02-01 395103.5 1 0 0 0
2004-03-01 433391.6 1 0 0 0
2004-04-01 430370.5 0 1 0 0
2004-05-01 434698.3 0 1 0 0
2004-06-01 447003.9 0 1 0 0
2004-07-01 459626.6 0 0 1 0
2004-08-01 451445.7 0 0 1 0
2004-09-01 437814.5 0 0 1 0
2004-10-01 450775.7 0 0 0 1
2004-11-01 464057.2 0 0 0 1
2004-12-01 464754.0 0 0 0 1
2005-01-01 423416.1 1 0 0 0
2005-02-01 413585.6 1 0 0 0
2005-03-01 448274.6 1 0 0 0
2005-04-01 449587.8 0 1 0 0
2005-05-01 449339.9 0 1 0 0
2005-06-01 457384.0 0 1 0 0
2005-07-01 464479.2 0 0 1 0
2005-08-01 471260.0 0 0 1 0
2005-09-01 454396.7 0 0 1 0
2005-10-01 470472.5 0 0 0 1
2005-11-01 482233.9 0 0 0 1
2005-12-01 489035.5 0 0 0 1
2006-01-01 454938.8 1 0 0 0
2006-02-01 435744.4 1 0 0 0
2006-03-01 462928.2 1 0 0 0
2006-04-01 449594.2 0 1 0 0
2006-05-01 481067.4 0 1 0 0
2006-06-01 484028.7 0 1 0 0
2006-07-01 502640.1 0 0 1 0
2006-08-01 508884.4 0 0 1 0
2006-09-01 486319.2 0 0 1 0
2006-10-01 516634.7 0 0 0 1
2006-11-01 527697.6 0 0 0 1
2006-12-01 529190.1 0 0 0 1
2007-01-01 502525.4 1 0 0 0
2007-02-01 480522.5 1 0 0 0
2007-03-01 514213.9 1 0 0 0
2007-04-01 507056.6 0 1 0 0
2007-05-01 532457.5 0 1 0 0
2007-06-01 536821.9 0 1 0 0
2007-07-01 546218.4 0 0 1 0
2007-08-01 547231.6 0 0 1 0
2007-09-01 518008.7 0 0 1 0
2007-10-01 560092.5 0 0 0 1
2007-11-01 556972.1 0 0 0 1
2007-12-01 554623.7 0 0 0 1
2008-01-01 539919.4 1 0 0 0
2008-02-01 526969.0 1 0 0 0
2008-03-01 545547.9 1 0 0 0
2008-04-01 556844.7 0 1 0 0
2008-05-01 566261.6 0 1 0 0
2008-06-01 586646.3 0 1 0 0
2008-07-01 611329.3 0 0 1 0
2008-08-01 590258.9 0 0 1 0
2008-09-01 579510.3 0 0 1 0
2008-10-01 610355.8 0 0 0 1
2008-11-01 587102.4 0 0 0 1
2008-12-01 571281.5 0 0 0 1
2009-01-01 537249.7 1 0 0 0
2009-02-01 522587.3 1 0 0 0
2009-03-01 559569.9 1 0 0 0
2009-04-01 551362.7 0 1 0 0
2009-05-01 567616.5 0 1 0 0
2009-06-01 581478.5 0 1 0 0
2009-07-01 600855.9 0 0 1 0
2009-08-01 597157.6 0 0 1 0
2009-09-01 593340.6 0 0 1 0
2009-10-01 630429.8 0 0 0 1
2009-11-01 634539.1 0 0 0 1
2009-12-01 648536.0 0 0 0 1
2010-01-01 593215.7 1 0 0 0
2010-02-01 582757.9 1 0 0 0
2010-03-01 632195.5 1 0 0 0
2010-04-01 619829.4 0 1 0 0
2010-05-01 636436.4 0 1 0 0
2010-06-01 646544.9 0 1 0 0
2010-07-01 669400.3 0 0 1 0
2010-08-01 671324.7 0 0 1 0
2010-09-01 661392.5 0 0 1 0
2010-10-01 683363.4 0 0 0 1
2010-11-01 701506.8 0 0 0 1
2010-12-01 694645.8 0 0 0 1
2011-01-01 645375.7 1 0 0 0
2011-02-01 643602.4 1 0 0 0
2011-03-01 663209.5 1 0 0 0
2011-04-01 661339.3 0 1 0 0
2011-05-01 691797.1 0 1 0 0
2011-06-01 699581.1 0 1 0 0
2011-07-01 701856.1 0 0 1 0
2011-08-01 705501.7 0 0 1 0
2011-09-01 674094.1 0 0 1 0
2011-10-01 702004.4 0 0 0 1
2011-11-01 718870.3 0 0 0 1
2011-12-01 718815.1 0 0 0 1
2012-01-01 670677.0 1 0 0 0
2012-02-01 668402.5 1 0 0 0
2012-03-01 712377.4 1 0 0 0
2012-04-01 688631.0 0 1 0 0
2012-05-01 720390.1 0 1 0 0
2012-06-01 715746.2 0 1 0 0
2012-07-01 741180.7 0 0 1 0
2012-08-01 746975.3 0 0 1 0
2012-09-01 696007.7 0 0 1 0
2012-10-01 743137.3 0 0 0 1
2012-11-01 740005.8 0 0 0 1
2012-12-01 732876.0 0 0 0 1
2013-01-01 711982.4 1 0 0 0
2013-02-01 681710.9 1 0 0 0
2013-03-01 727191.2 1 0 0 0
2013-04-01 743248.5 0 1 0 0
2013-05-01 741247.9 0 1 0 0
2013-06-01 746586.1 0 1 0 0
2013-07-01 771847.4 0 0 1 0
2013-08-01 760182.8 0 0 1 0
2013-09-01 733150.0 0 0 1 0
2013-10-01 774633.0 0 0 0 1
2013-11-01 768241.3 0 0 0 1
2013-12-01 775507.5 0 0 0 1
2014-01-01 742056.4 1 0 0 0
2014-02-01 727127.9 1 0 0 0
2014-03-01 740296.2 1 0 0 0
2014-04-01 746662.5 0 1 0 0
2014-05-01 750729.1 0 1 0 0
2014-06-01 725721.1 0 1 0 0
2014-07-01 761889.7 0 0 1 0
2014-08-01 751000.9 0 0 1 0
2014-09-01 746468.5 0 0 1 0
2014-10-01 769184.6 0 0 0 1
2014-11-01 758337.4 0 0 0 1
2014-12-01 766682.7 0 0 0 1
2015-01-01 716529.0 1 0 0 0
2015-02-01 688456.9 1 0 0 0
2015-03-01 743149.4 1 0 0 0
2015-04-01 715541.6 0 1 0 0
2015-05-01 705184.3 0 1 0 0
2015-06-01 705185.9 0 1 0 0
2015-07-01 724789.3 0 0 1 0
2015-08-01 708002.6 0 0 1 0
2015-09-01 708218.0 0 0 1 0
2015-10-01 734091.2 0 0 0 1
2015-11-01 719913.1 0 0 0 1
2015-12-01 723198.2 0 0 0 1
2016-01-01 672073.1 1 0 0 0
2016-02-01 668626.4 1 0 0 0
2016-03-01 700354.6 1 0 0 0
2016-04-01 683511.0 0 1 0 0
2016-05-01 686641.2 0 1 0 0
2016-06-01 714558.7 0 1 0 0
2016-07-01 706490.1 0 0 1 0
2016-08-01 707057.5 0 0 1 0
2016-09-01 673140.2 0 0 1 0
2016-10-01 691664.9 0 0 0 1
2016-11-01 711514.8 0 0 0 1
2016-12-01 740857.8 0 0 0 1
2017-01-01 687067.6 1 0 0 0
2017-02-01 668890.8 1 0 0 0
2017-03-01 706794.5 1 0 0 0
2017-04-01 680494.8 0 1 0 0
2017-05-01 710853.1 0 1 0 0
2017-06-01 721049.9 0 1 0 0
2017-07-01 720369.6 0 0 1 0
2017-08-01 716687.3 0 0 1 0
2017-09-01 680262.9 0 0 1 0
2017-10-01 704081.0 0 0 0 1
2017-11-01 723145.3 0 0 0 1
2017-12-01 749380.6 0 0 0 1
2018-01-01 704921.1 1 0 0 0
2018-02-01 669626.2 1 0 0 0
2018-03-01 708049.4 1 0 0 0
2018-04-01 704902.6 0 1 0 0
2018-05-01 683679.2 0 1 0 0
2018-06-01 720058.1 0 1 0 0
2018-07-01 722115.2 0 0 1 0
2018-08-01 720344.0 0 0 1 0
2018-09-01 685045.0 0 0 1 0
2018-10-01 727494.6 0 0 0 1
2018-11-01 730102.7 0 0 0 1
2018-12-01 739709.0 0 0 0 1
2019-01-01 706763.8 1 0 0 0
2019-02-01 689904.4 1 0 0 0
2019-03-01 698882.0 1 0 0 0
2019-04-01 712972.4 0 1 0 0
2019-05-01 726522.7 0 1 0 0
2019-06-01 718205.0 0 1 0 0
2019-07-01 751610.0 0 0 1 0
2019-08-01 738295.7 0 0 1 0
2019-09-01 735714.7 0 0 1 0
2019-10-01 765904.8 0 0 0 1
2019-11-01 751888.5 0 0 0 1
2019-12-01 760367.0 0 0 0 1
2020-01-01 725058.8 1 0 0 0
2020-02-01 714600.7 1 0 0 0
2020-03-01 723115.5 1 0 0 0
2020-04-01 653864.1 0 1 0 0
2020-05-01 661612.0 0 1 0 0
2020-06-01 694692.1 0 1 0 0
2020-07-01 737299.0 0 0 1 0
2020-08-01 728749.0 0 0 1 0
2020-09-01 735042.6 0 0 1 0
2020-10-01 758357.7 0 0 0 1
2020-11-01 754535.5 0 0 0 1
2020-12-01 770907.3 0 0 0 1
2021-01-01 731680.6 1 0 0 0
2021-02-01 750086.1 1 0 0 0
2021-03-01 811273.1 1 0 0 0
2021-04-01 782022.8 0 1 0 0
2021-05-01 775193.2 0 1 0 0
2021-06-01 772853.1 0 1 0 0
2021-07-01 796847.4 0 0 1 0
2021-08-01 785520.1 0 0 1 0
2021-09-01 764799.1 0 0 1 0
2021-10-01 761170.8 0 0 0 1
2021-11-01 772984.2 0 0 0 1
2021-12-01 786974.9 0 0 0 1
2022-01-01 752223.6 1 0 0 0
2022-02-01 753542.9 1 0 0 0

Dá uma olhada na minha nova estimação do pib com essas dummies:

modelo_dummies <- lm(PIB ~ Data + D1 + D2 + D3, dataset)
ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_line(aes(y = predict(modelo_dummies))) + 
  theme_classic()

5 Estacionaridade: O que é? Porque usamos séries estacionárias?

Existem dois conceitos sobre a estacionariedade, sendo divididos em estacionariedade fraca e forte.

Estacionariedade forte: a média e a variância são as mesmas independente de translações no tempo. \[ \bar{\mu} = f(tempo) \] \[ \bar{\sigma}^2 = f(tempo) \] Estacionariedade fraca: a média, a variância e a autocorrelação da série como um todo, são constantes.

Ao invés de colocar uma equação aqui, vou mostrar o comportamento de uma média não constante com a série apresentada no documento.

Lembrando daquele primeiro gráfico que apresentei, vou definir 3 diferentes intervalos:

  1. de 1990 a 1999
  2. de 2000 a 2009
  3. de 2010 para frente.

Em cada intervalo, calculo a média do pib. A média (a linha preta) é a mesma em todo o intervalo analisado?

media_primeiro <- dataset %>%
  filter(Data < as.POSIXct("2000-01-01", tz="UTC")) %>%
  summarise(mean(PIB)) %>%
  pull()

media_segundo <- dataset %>%
  filter(Data >= as.POSIXct("2000-01-01", tz="UTC") &
           Data < as.POSIXct("2010-01-01", tz="UTC")) %>%
  summarise(mean(PIB)) %>%
  pull()

media_terceiro <- dataset %>%
  filter(Data >= as.POSIXct("2010-01-01", tz="UTC")) %>%
  summarise(mean(PIB)) %>%
  pull()

ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_vline(xintercept = as.POSIXct("2000-01-01", tz="UTC"), color = "red") +
  geom_vline(xintercept = as.POSIXct("2010-01-01", tz="UTC"), color = "red") +
  geom_segment(aes(
    x=as.POSIXct("1990-01-01", tz="UTC"),
    xend=as.POSIXct("2000-01-01", tz="UTC"),
    y=media_primeiro,
    yend=media_primeiro)) +
  geom_segment(aes(
    x=as.POSIXct("2000-01-01", tz="UTC"),
    xend=as.POSIXct("2010-01-01", tz="UTC"),
    y=media_segundo,
    yend=media_segundo)) +
  geom_segment(aes(
    x=as.POSIXct("2010-01-01", tz="UTC"),
    xend=as.POSIXct("2022-02-01", tz="UTC"),
    y=media_terceiro,
    yend=media_terceiro)) +
  theme_classic()

Como vimos anteriormente, essa série de tempo tem uma tendência positiva. Então a média dela aumenta conforme o passar do tempo, e isso é uma característica de série não estacionária.

E qual o problema disso? Bom, existem alguns motivos do por que não é algo interessante trabalhar com séries não estacionárias. Alguns desses podem estar relacionados ao comportamento dessa série em presença de choques (série mal comportada), outras podem criticar que pela média (e variância) não ser constante, a distribuição de valores dessa variável também muda. No fim, é interessante trabalhar com série estacionária por um motivo crucial: a estimação fica mais precisa e os resultados são confiáveis.

6 Estacionarizando uma série temporal.

A diferenciação de uma série é um método de tornar uma série não estacionária em estacionária. Para isso, fazemos simplesmente a diferenciação de um valor com sua observação passada. Exemplo: o valor do PIB em Janeiro de 2020 é subtraido do valor do PIB em dezembro de 2019 (exatamente um mês antes), assim, o novo valor resultante dessa subtração é o valor diferenciado. Dá uma olhada na coluna nova:

dataset$data_em_segundos <- NULL #nada demais aqui
dataset <- dataset %>%
  mutate(primeira_diferenca = PIB - lag(PIB))


dataset %>%
  kbl() %>%
  kable_material() %>%
  scroll_box(width = "800px", height = "350px")
Data PIB D1 D2 D3 D4 primeira_diferenca
1990-01-01 174698.3 1 0 0 0 NA
1990-02-01 195161.9 1 0 0 0 20463.674592
1990-03-01 268903.2 1 0 0 0 73741.294872
1990-04-01 211052.0 0 1 0 0 -57851.204627
1990-05-01 219974.2 0 1 0 0 8922.177578
1990-06-01 195822.5 0 1 0 0 -24151.721808
1990-07-01 195128.7 0 0 1 0 -693.787686
1990-08-01 190782.3 0 0 1 0 -4346.370295
1990-09-01 183468.6 0 0 1 0 -7313.721860
1990-10-01 202031.9 0 0 0 1 18563.331246
1990-11-01 208569.9 0 0 0 1 6537.996607
1990-12-01 184664.1 0 0 0 1 -23905.816037
1991-01-01 178441.2 1 0 0 0 -6222.879791
1991-02-01 175443.5 1 0 0 0 -2997.769408
1991-03-01 168590.9 1 0 0 0 -6852.601899
1991-04-01 196841.5 0 1 0 0 28250.674779
1991-05-01 209151.1 0 1 0 0 12309.553378
1991-06-01 213064.0 0 1 0 0 3912.913833
1991-07-01 209675.4 0 0 1 0 -3388.599690
1991-08-01 208926.1 0 0 1 0 -749.273257
1991-09-01 187224.5 0 0 1 0 -21701.679003
1991-10-01 204366.7 0 0 0 1 17142.249923
1991-11-01 201426.0 0 0 0 1 -2940.736570
1991-12-01 184176.1 0 0 0 1 -17249.831280
1992-01-01 183638.0 1 0 0 0 -538.105880
1992-02-01 185993.9 1 0 0 0 2355.857639
1992-03-01 185350.3 1 0 0 0 -643.560250
1992-04-01 182378.5 0 1 0 0 -2971.810641
1992-05-01 189865.3 0 1 0 0 7486.801033
1992-06-01 195462.0 0 1 0 0 5596.686594
1992-07-01 196981.7 0 0 1 0 1519.646959
1992-08-01 196366.6 0 0 1 0 -615.016938
1992-09-01 196261.6 0 0 1 0 -105.080866
1992-10-01 199191.2 0 0 0 1 2929.639967
1992-11-01 199492.9 0 0 0 1 301.658272
1992-12-01 180601.9 0 0 0 1 -18890.979491
1993-01-01 181718.7 1 0 0 0 1116.775446
1993-02-01 181781.6 1 0 0 0 62.936506
1993-03-01 202999.9 1 0 0 0 21218.280575
1993-04-01 198595.8 0 1 0 0 -4404.089945
1993-05-01 201615.4 0 1 0 0 3019.603650
1993-06-01 196966.4 0 1 0 0 -4648.987302
1993-07-01 204903.1 0 0 1 0 7936.707647
1993-08-01 208411.0 0 0 1 0 3507.864675
1993-09-01 212291.2 0 0 1 0 3880.251188
1993-10-01 206761.4 0 0 0 1 -5529.823335
1993-11-01 204688.8 0 0 0 1 -2072.651171
1993-12-01 186310.9 0 0 0 1 -18377.840063
1994-01-01 170812.2 1 0 0 0 -15498.723726
1994-02-01 153255.1 1 0 0 0 -17557.108993
1994-03-01 157942.7 1 0 0 0 4687.620478
1994-04-01 165888.8 0 1 0 0 7946.077558
1994-05-01 181951.4 0 1 0 0 16062.635753
1994-06-01 234223.0 0 1 0 0 52271.538762
1994-07-01 276449.0 0 0 1 0 42226.056294
1994-08-01 292405.2 0 0 1 0 15956.160097
1994-09-01 286222.6 0 0 1 0 -6182.546218
1994-10-01 287548.8 0 0 0 1 1326.172438
1994-11-01 285495.9 0 0 0 1 -2052.931660
1994-12-01 270221.1 0 0 0 1 -15274.749152
1995-01-01 283593.0 1 0 0 0 13371.892583
1995-02-01 297416.2 1 0 0 0 13823.145175
1995-03-01 350398.8 1 0 0 0 52982.657754
1995-04-01 328964.8 0 1 0 0 -21433.971850
1995-05-01 313058.1 0 1 0 0 -15906.704119
1995-06-01 308031.1 0 1 0 0 -5027.056317
1995-07-01 313975.8 0 0 1 0 5944.712853
1995-08-01 322332.3 0 0 1 0 8356.517773
1995-09-01 316736.5 0 0 1 0 -5595.787026
1995-10-01 326753.2 0 0 0 1 10016.645216
1995-11-01 343874.5 0 0 0 1 17121.310223
1995-12-01 333031.8 0 0 0 1 -10842.650342
1996-01-01 317047.9 1 0 0 0 -15983.906177
1996-02-01 305395.4 1 0 0 0 -11652.513176
1996-03-01 306785.5 1 0 0 0 1390.102419
1996-04-01 307989.4 0 1 0 0 1203.891283
1996-05-01 330323.3 0 1 0 0 22333.856174
1996-06-01 334154.1 0 1 0 0 3830.882821
1996-07-01 349618.7 0 0 1 0 15464.583839
1996-08-01 347794.9 0 0 1 0 -1823.786647
1996-09-01 332844.3 0 0 1 0 -14950.641351
1996-10-01 357046.3 0 0 0 1 24201.971861
1996-11-01 370608.3 0 0 0 1 13562.012080
1996-12-01 373142.3 0 0 0 1 2534.025798
1997-01-01 351528.2 1 0 0 0 -21614.081419
1997-02-01 320413.7 1 0 0 0 -31114.530542
1997-03-01 315466.4 1 0 0 0 -4947.303810
1997-04-01 327302.0 0 1 0 0 11835.641082
1997-05-01 345831.0 0 1 0 0 18528.976747
1997-06-01 358158.7 0 1 0 0 12327.685897
1997-07-01 361573.9 0 0 1 0 3415.211534
1997-08-01 361826.6 0 0 1 0 252.676068
1997-09-01 360664.7 0 0 1 0 -1161.848977
1997-10-01 383257.5 0 0 0 1 22592.738286
1997-11-01 373764.6 0 0 0 1 -9492.884156
1997-12-01 353483.7 0 0 0 1 -20280.844974
1998-01-01 343410.6 1 0 0 0 -10073.146248
1998-02-01 326803.9 1 0 0 0 -16606.729229
1998-03-01 345974.1 1 0 0 0 19170.271214
1998-04-01 347514.1 0 1 0 0 1539.985207
1998-05-01 363872.7 0 1 0 0 16358.545891
1998-06-01 365571.4 0 1 0 0 1698.779791
1998-07-01 372624.8 0 0 1 0 7053.325774
1998-08-01 371550.0 0 0 1 0 -1074.765433
1998-09-01 364870.1 0 0 1 0 -6679.912969
1998-10-01 376122.5 0 0 0 1 11252.410577
1998-11-01 371484.2 0 0 0 1 -4638.341743
1998-12-01 355602.2 0 0 0 1 -15881.960325
1999-01-01 343538.3 1 0 0 0 -12063.862492
1999-02-01 339854.4 1 0 0 0 -3683.937420
1999-03-01 369850.4 1 0 0 0 29995.995130
1999-04-01 363856.0 0 1 0 0 -5994.443105
1999-05-01 369105.9 0 1 0 0 5249.993632
1999-06-01 377138.2 0 1 0 0 8032.296921
1999-07-01 371948.5 0 0 1 0 -5189.729588
1999-08-01 374612.2 0 0 1 0 2663.723838
1999-09-01 365091.1 0 0 1 0 -9521.184038
1999-10-01 382197.2 0 0 0 1 17106.107279
1999-11-01 393859.0 0 0 0 1 11661.828070
1999-12-01 388362.9 0 0 0 1 -5496.080186
2000-01-01 362642.1 1 0 0 0 -25720.780767
2000-02-01 358856.0 1 0 0 0 -3786.129037
2000-03-01 360866.6 1 0 0 0 2010.616036
2000-04-01 355411.1 0 1 0 0 -5455.513718
2000-05-01 383541.8 0 1 0 0 28130.734087
2000-06-01 395291.2 0 1 0 0 11749.358104
2000-07-01 392353.9 0 0 1 0 -2937.323658
2000-08-01 396016.6 0 0 1 0 3662.766954
2000-09-01 376982.5 0 0 1 0 -19034.127502
2000-10-01 401028.4 0 0 0 1 24045.917108
2000-11-01 401926.0 0 0 0 1 897.536159
2000-12-01 392830.2 0 0 0 1 -9095.748664
2001-01-01 378555.7 1 0 0 0 -14274.517490
2001-02-01 373680.5 1 0 0 0 -4875.201028
2001-03-01 396297.1 1 0 0 0 22616.579101
2001-04-01 391681.0 0 1 0 0 -4616.077177
2001-05-01 403024.6 0 1 0 0 11343.558808
2001-06-01 376879.6 0 1 0 0 -26144.992997
2001-07-01 393747.9 0 0 1 0 16868.321452
2001-08-01 399986.6 0 0 1 0 6238.738316
2001-09-01 382427.8 0 0 1 0 -17558.874063
2001-10-01 405474.1 0 0 0 1 23046.391900
2001-11-01 408778.9 0 0 0 1 3304.787136
2001-12-01 389627.4 0 0 0 1 -19151.493926
2002-01-01 385716.9 1 0 0 0 -3910.498167
2002-02-01 380808.2 1 0 0 0 -4908.747494
2002-03-01 401797.1 1 0 0 0 20988.954055
2002-04-01 406332.1 0 1 0 0 4534.974843
2002-05-01 415711.9 0 1 0 0 9379.757197
2002-06-01 411967.6 0 1 0 0 -3744.299089
2002-07-01 419565.0 0 0 1 0 7597.459352
2002-08-01 419810.7 0 0 1 0 245.636868
2002-09-01 406936.6 0 0 1 0 -12874.108137
2002-10-01 423751.5 0 0 0 1 16814.933443
2002-11-01 421996.6 0 0 0 1 -1754.935179
2002-12-01 395622.1 0 0 0 1 -26374.510241
2003-01-01 379076.6 1 0 0 0 -16545.439252
2003-02-01 386177.2 1 0 0 0 7100.591676
2003-03-01 403249.9 1 0 0 0 17072.698194
2003-04-01 407871.8 0 1 0 0 4621.866187
2003-05-01 401809.0 0 1 0 0 -6062.738853
2003-06-01 397069.9 0 1 0 0 -4739.171339
2003-07-01 418893.1 0 0 1 0 21823.227786
2003-08-01 413276.0 0 0 1 0 -5617.044819
2003-09-01 421695.4 0 0 1 0 8419.320448
2003-10-01 438384.7 0 0 0 1 16689.362376
2003-11-01 432897.1 0 0 0 1 -5487.579185
2003-12-01 430584.8 0 0 0 1 -2312.355561
2004-01-01 401955.9 1 0 0 0 -28628.911998
2004-02-01 395103.5 1 0 0 0 -6852.418961
2004-03-01 433391.6 1 0 0 0 38288.147452
2004-04-01 430370.5 0 1 0 0 -3021.082225
2004-05-01 434698.3 0 1 0 0 4327.767240
2004-06-01 447003.9 0 1 0 0 12305.640079
2004-07-01 459626.6 0 0 1 0 12622.626250
2004-08-01 451445.7 0 0 1 0 -8180.829496
2004-09-01 437814.5 0 0 1 0 -13631.186502
2004-10-01 450775.7 0 0 0 1 12961.200506
2004-11-01 464057.2 0 0 0 1 13281.437852
2004-12-01 464754.0 0 0 0 1 696.770337
2005-01-01 423416.1 1 0 0 0 -41337.866379
2005-02-01 413585.6 1 0 0 0 -9830.506799
2005-03-01 448274.6 1 0 0 0 34688.980306
2005-04-01 449587.8 0 1 0 0 1313.280327
2005-05-01 449339.9 0 1 0 0 -247.951948
2005-06-01 457384.0 0 1 0 0 8044.093412
2005-07-01 464479.2 0 0 1 0 7095.233882
2005-08-01 471260.0 0 0 1 0 6780.750604
2005-09-01 454396.7 0 0 1 0 -16863.236821
2005-10-01 470472.5 0 0 0 1 16075.750034
2005-11-01 482233.9 0 0 0 1 11761.417679
2005-12-01 489035.5 0 0 0 1 6801.586206
2006-01-01 454938.8 1 0 0 0 -34096.728136
2006-02-01 435744.4 1 0 0 0 -19194.306683
2006-03-01 462928.2 1 0 0 0 27183.712996
2006-04-01 449594.2 0 1 0 0 -13333.946062
2006-05-01 481067.4 0 1 0 0 31473.229738
2006-06-01 484028.7 0 1 0 0 2961.299898
2006-07-01 502640.1 0 0 1 0 18611.400446
2006-08-01 508884.4 0 0 1 0 6244.219555
2006-09-01 486319.2 0 0 1 0 -22565.163242
2006-10-01 516634.7 0 0 0 1 30315.454873
2006-11-01 527697.6 0 0 0 1 11062.951241
2006-12-01 529190.1 0 0 0 1 1492.501516
2007-01-01 502525.4 1 0 0 0 -26664.662077
2007-02-01 480522.5 1 0 0 0 -22002.958547
2007-03-01 514213.9 1 0 0 0 33691.431913
2007-04-01 507056.6 0 1 0 0 -7157.271718
2007-05-01 532457.5 0 1 0 0 25400.866272
2007-06-01 536821.9 0 1 0 0 4364.421979
2007-07-01 546218.4 0 0 1 0 9396.487430
2007-08-01 547231.6 0 0 1 0 1013.136180
2007-09-01 518008.7 0 0 1 0 -29222.908204
2007-10-01 560092.5 0 0 0 1 42083.893002
2007-11-01 556972.1 0 0 0 1 -3120.419778
2007-12-01 554623.7 0 0 0 1 -2348.454603
2008-01-01 539919.4 1 0 0 0 -14704.275145
2008-02-01 526969.0 1 0 0 0 -12950.424666
2008-03-01 545547.9 1 0 0 0 18578.917852
2008-04-01 556844.7 0 1 0 0 11296.819495
2008-05-01 566261.6 0 1 0 0 9416.906158
2008-06-01 586646.3 0 1 0 0 20384.694482
2008-07-01 611329.3 0 0 1 0 24682.966344
2008-08-01 590258.9 0 0 1 0 -21070.371827
2008-09-01 579510.3 0 0 1 0 -10748.587848
2008-10-01 610355.8 0 0 0 1 30845.503960
2008-11-01 587102.4 0 0 0 1 -23253.386798
2008-12-01 571281.5 0 0 0 1 -15820.959326
2009-01-01 537249.7 1 0 0 0 -34031.751227
2009-02-01 522587.3 1 0 0 0 -14662.381196
2009-03-01 559569.9 1 0 0 0 36982.563018
2009-04-01 551362.7 0 1 0 0 -8207.187303
2009-05-01 567616.5 0 1 0 0 16253.808642
2009-06-01 581478.5 0 1 0 0 13861.928018
2009-07-01 600855.9 0 0 1 0 19377.488380
2009-08-01 597157.6 0 0 1 0 -3698.362088
2009-09-01 593340.6 0 0 1 0 -3816.970439
2009-10-01 630429.8 0 0 0 1 37089.151413
2009-11-01 634539.1 0 0 0 1 4109.319152
2009-12-01 648536.0 0 0 0 1 13996.958188
2010-01-01 593215.7 1 0 0 0 -55320.322877
2010-02-01 582757.9 1 0 0 0 -10457.767508
2010-03-01 632195.5 1 0 0 0 49437.597001
2010-04-01 619829.4 0 1 0 0 -12366.129393
2010-05-01 636436.4 0 1 0 0 16607.017711
2010-06-01 646544.9 0 1 0 0 10108.442692
2010-07-01 669400.3 0 0 1 0 22855.430228
2010-08-01 671324.7 0 0 1 0 1924.444387
2010-09-01 661392.5 0 0 1 0 -9932.281419
2010-10-01 683363.4 0 0 0 1 21970.962665
2010-11-01 701506.8 0 0 0 1 18143.382517
2010-12-01 694645.8 0 0 0 1 -6861.047521
2011-01-01 645375.7 1 0 0 0 -49270.065776
2011-02-01 643602.4 1 0 0 0 -1773.315303
2011-03-01 663209.5 1 0 0 0 19607.134583
2011-04-01 661339.3 0 1 0 0 -1870.176232
2011-05-01 691797.1 0 1 0 0 30457.747866
2011-06-01 699581.1 0 1 0 0 7784.057011
2011-07-01 701856.1 0 0 1 0 2274.918411
2011-08-01 705501.7 0 0 1 0 3645.603998
2011-09-01 674094.1 0 0 1 0 -31407.539577
2011-10-01 702004.4 0 0 0 1 27910.271712
2011-11-01 718870.3 0 0 0 1 16865.876493
2011-12-01 718815.1 0 0 0 1 -55.203863
2012-01-01 670677.0 1 0 0 0 -48138.051005
2012-02-01 668402.5 1 0 0 0 -2274.565208
2012-03-01 712377.4 1 0 0 0 43974.893309
2012-04-01 688631.0 0 1 0 0 -23746.341489
2012-05-01 720390.1 0 1 0 0 31759.112451
2012-06-01 715746.2 0 1 0 0 -4643.879180
2012-07-01 741180.7 0 0 1 0 25434.495027
2012-08-01 746975.3 0 0 1 0 5794.547887
2012-09-01 696007.7 0 0 1 0 -50967.538389
2012-10-01 743137.3 0 0 0 1 47129.543411
2012-11-01 740005.8 0 0 0 1 -3131.463357
2012-12-01 732876.0 0 0 0 1 -7129.865971
2013-01-01 711982.4 1 0 0 0 -20893.590749
2013-02-01 681710.9 1 0 0 0 -30271.464730
2013-03-01 727191.2 1 0 0 0 45480.270448
2013-04-01 743248.5 0 1 0 0 16057.279743
2013-05-01 741247.9 0 1 0 0 -2000.599240
2013-06-01 746586.1 0 1 0 0 5338.257612
2013-07-01 771847.4 0 0 1 0 25261.327404
2013-08-01 760182.8 0 0 1 0 -11664.684844
2013-09-01 733150.0 0 0 1 0 -27032.711426
2013-10-01 774633.0 0 0 0 1 41482.988935
2013-11-01 768241.3 0 0 0 1 -6391.729493
2013-12-01 775507.5 0 0 0 1 7266.240156
2014-01-01 742056.4 1 0 0 0 -33451.111680
2014-02-01 727127.9 1 0 0 0 -14928.525534
2014-03-01 740296.2 1 0 0 0 13168.292235
2014-04-01 746662.5 0 1 0 0 6366.278981
2014-05-01 750729.1 0 1 0 0 4066.656291
2014-06-01 725721.1 0 1 0 0 -25008.067195
2014-07-01 761889.7 0 0 1 0 36168.604052
2014-08-01 751000.9 0 0 1 0 -10888.758066
2014-09-01 746468.5 0 0 1 0 -4532.377273
2014-10-01 769184.6 0 0 0 1 22716.013392
2014-11-01 758337.4 0 0 0 1 -10847.138277
2014-12-01 766682.7 0 0 0 1 8345.306292
2015-01-01 716529.0 1 0 0 0 -50153.680962
2015-02-01 688456.9 1 0 0 0 -28072.133494
2015-03-01 743149.4 1 0 0 0 54692.512243
2015-04-01 715541.6 0 1 0 0 -27607.864471
2015-05-01 705184.3 0 1 0 0 -10357.287862
2015-06-01 705185.9 0 1 0 0 1.604084
2015-07-01 724789.3 0 0 1 0 19603.454148
2015-08-01 708002.6 0 0 1 0 -16786.726774
2015-09-01 708218.0 0 0 1 0 215.361113
2015-10-01 734091.2 0 0 0 1 25873.246299
2015-11-01 719913.1 0 0 0 1 -14178.141576
2015-12-01 723198.2 0 0 0 1 3285.183141
2016-01-01 672073.1 1 0 0 0 -51125.177515
2016-02-01 668626.4 1 0 0 0 -3446.709194
2016-03-01 700354.6 1 0 0 0 31728.239568
2016-04-01 683511.0 0 1 0 0 -16843.640169
2016-05-01 686641.2 0 1 0 0 3130.236987
2016-06-01 714558.7 0 1 0 0 27917.520953
2016-07-01 706490.1 0 0 1 0 -8068.635140
2016-08-01 707057.5 0 0 1 0 567.461708
2016-09-01 673140.2 0 0 1 0 -33917.335207
2016-10-01 691664.9 0 0 0 1 18524.668311
2016-11-01 711514.8 0 0 0 1 19849.900871
2016-12-01 740857.8 0 0 0 1 29342.997023
2017-01-01 687067.6 1 0 0 0 -53790.144634
2017-02-01 668890.8 1 0 0 0 -18176.794345
2017-03-01 706794.5 1 0 0 0 37903.681477
2017-04-01 680494.8 0 1 0 0 -26299.746873
2017-05-01 710853.1 0 1 0 0 30358.380076
2017-06-01 721049.9 0 1 0 0 10196.757855
2017-07-01 720369.6 0 0 1 0 -680.274029
2017-08-01 716687.3 0 0 1 0 -3682.348503
2017-09-01 680262.9 0 0 1 0 -36424.390839
2017-10-01 704081.0 0 0 0 1 23818.060145
2017-11-01 723145.3 0 0 0 1 19064.316824
2017-12-01 749380.6 0 0 0 1 26235.293427
2018-01-01 704921.1 1 0 0 0 -44459.436989
2018-02-01 669626.2 1 0 0 0 -35294.965973
2018-03-01 708049.4 1 0 0 0 38423.274405
2018-04-01 704902.6 0 1 0 0 -3146.806839
2018-05-01 683679.2 0 1 0 0 -21223.468771
2018-06-01 720058.1 0 1 0 0 36378.968351
2018-07-01 722115.2 0 0 1 0 2057.111280
2018-08-01 720344.0 0 0 1 0 -1771.199950
2018-09-01 685045.0 0 0 1 0 -35299.032938
2018-10-01 727494.6 0 0 0 1 42449.635152
2018-11-01 730102.7 0 0 0 1 2608.107418
2018-12-01 739709.0 0 0 0 1 9606.221440
2019-01-01 706763.8 1 0 0 0 -32945.174634
2019-02-01 689904.4 1 0 0 0 -16859.349921
2019-03-01 698882.0 1 0 0 0 8977.567242
2019-04-01 712972.4 0 1 0 0 14090.389672
2019-05-01 726522.7 0 1 0 0 13550.325376
2019-06-01 718205.0 0 1 0 0 -8317.694296
2019-07-01 751610.0 0 0 1 0 33404.994783
2019-08-01 738295.7 0 0 1 0 -13314.337335
2019-09-01 735714.7 0 0 1 0 -2580.969488
2019-10-01 765904.8 0 0 0 1 30190.031940
2019-11-01 751888.5 0 0 0 1 -14016.216314
2019-12-01 760367.0 0 0 0 1 8478.452122
2020-01-01 725058.8 1 0 0 0 -35308.160781
2020-02-01 714600.7 1 0 0 0 -10458.148102
2020-03-01 723115.5 1 0 0 0 8514.783205
2020-04-01 653864.1 0 1 0 0 -69251.356173
2020-05-01 661612.0 0 1 0 0 7747.898985
2020-06-01 694692.1 0 1 0 0 33080.084519
2020-07-01 737299.0 0 0 1 0 42606.881568
2020-08-01 728749.0 0 0 1 0 -8549.956001
2020-09-01 735042.6 0 0 1 0 6293.593171
2020-10-01 758357.7 0 0 0 1 23315.044507
2020-11-01 754535.5 0 0 0 1 -3822.121949
2020-12-01 770907.3 0 0 0 1 16371.802219
2021-01-01 731680.6 1 0 0 0 -39226.724368
2021-02-01 750086.1 1 0 0 0 18405.514450
2021-03-01 811273.1 1 0 0 0 61187.004122
2021-04-01 782022.8 0 1 0 0 -29250.321350
2021-05-01 775193.2 0 1 0 0 -6829.653053
2021-06-01 772853.1 0 1 0 0 -2340.094751
2021-07-01 796847.4 0 0 1 0 23994.359551
2021-08-01 785520.1 0 0 1 0 -11327.316490
2021-09-01 764799.1 0 0 1 0 -20720.997573
2021-10-01 761170.8 0 0 0 1 -3628.292063
2021-11-01 772984.2 0 0 0 1 11813.363359
2021-12-01 786974.9 0 0 0 1 13990.705804
2022-01-01 752223.6 1 0 0 0 -34751.284789
2022-02-01 753542.9 1 0 0 0 1319.302758

Esse NA em janeiro de 1990 é simplesmente um valor faltante. Como não temos a informação do PIB um mês antes, esse valor é perdido. Por isso existe perda de informação na diferenciação da série. Quanto mais vezes eu repito esse processo, mais observações eu perco.

Visualmente a média naqueles mesmos intervalos é igual a partir de agora???

media_primeiro <- dataset %>%
  filter(Data < as.POSIXct("2000-01-01", tz="UTC")) %>%
  summarise(mean(primeira_diferenca, na.rm = TRUE)) %>%
  pull()

media_segundo <- dataset %>%
  filter(Data >= as.POSIXct("2000-01-01", tz="UTC") &
           Data < as.POSIXct("2010-01-01", tz="UTC")) %>%
  summarise(mean(primeira_diferenca)) %>%
  pull()

media_terceiro <- dataset %>%
  filter(Data >= as.POSIXct("2010-01-01", tz="UTC")) %>%
  summarise(mean(primeira_diferenca)) %>%
  pull()

ggplot(dataset, aes(x = Data, y= primeira_diferenca)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_vline(xintercept = as.POSIXct("2000-01-01", tz="UTC"), color = "red") +
  geom_vline(xintercept = as.POSIXct("2010-01-01", tz="UTC"), color = "red") +
  geom_segment(aes(
    x=as.POSIXct("1990-01-01", tz="UTC"),
    xend=as.POSIXct("2000-01-01", tz="UTC"),
    y=media_primeiro,
    yend=media_primeiro)) +
  geom_segment(aes(
    x=as.POSIXct("2000-01-01", tz="UTC"),
    xend=as.POSIXct("2010-01-01", tz="UTC"),
    y=media_segundo,
    yend=media_segundo)) +
  geom_segment(aes(
    x=as.POSIXct("2010-01-01", tz="UTC"),
    xend=as.POSIXct("2022-02-01", tz="UTC"),
    y=media_terceiro,
    yend=media_terceiro)) +
  theme_classic()

Parece que sim! Mas como dá pra ver, não posso afirmar com a mais absoluta certeza que as médias são estatisticamente iguais. É aí que entram os testes de estacionariedade Dickey Fuller, Dickey Fuller aumentado, KPSS entre outros. Quanto mais testes são usados, mais certeza podemos ter que a média dessa série em primeira diferença é de fato uma constante (o mesmo vale para sua variância).

7 A função de autocorrelação e autocorrelação parcial.

Inicio essa seção com uma indagação, você sabe definir correlação? Como definiria correlação com suas palavras? Correlação implica causalidade?

Com as minhas palavras, correlação é o quanto uma coisa varia considerando a variação de outra coisa. Por exemplo, quanto maior a escolaridade de uma pessoa, maior tende a ser o nível de renda. Essas varíaveis são consideradas muito correlacionadas, e existe, além da correlação entre elas, um sentido de causalidade. Assim, além de maiores níveis de escolaridade estarem correlacionados com maiores níveis de renda, existe um componente causal, que explica a renda da pessoa com base em sua educação!

Muitas vezes, a correlação não é um indicativo de causalidade, mas causalidade é indicativo de correlação. Sobre esse assunto, acesse aqui para conhecer algumas séries temporais muito correlacionadas que não implicam em causalidade alguma!

Mas beleza, falei muito de correlação, e por que isso é relevante?

Nas séries temporais, o valor do presente tende a estar muito relacionado com algum componente do passado. Esse sentido é apresentado por meio de uma correlação entre o termo no presente com o termo defasado (atrasado) em k vezes, ou por meio de uma representação direta (explicação causal) de um termo com o seu passado em k vezes.

A função de autocorrelação busca exatamente a representação de quanto o termo do passado varia considerando esse mesmo termo atrasado em k períodos. É o mesmo que comparar o seguinte:

dataset <- as.data.table(dataset)
dataset[, pib_um_mes_atras := lag(PIB)]
dataset[, pib_doze_meses_atras := lag(PIB, 12)]

dataset_long <- melt(
  dataset[, .SD, .SDcols = c("Data", "PIB", "pib_um_mes_atras", "pib_doze_meses_atras")],
  id.vars = "Data", variable.name = "Serie", value.name = "PIB")

ggplot(dataset_long[Data >= as.POSIXct("2019-01-01", tz="UTC")], aes(Data, PIB, color = Serie)) +
  geom_line() +
  scale_y_continuous(labels = scales::number_format()) +
  theme_classic()

Qual das linhas apresenta um desenho mais similar ao PIB? Como o PIB defasado em um mês é mais parecido em desenho, sua correlação com o PIB deve ser maior também!

Assim, vamos supor que para cada termo de Y, eu gostaria de estimar o quanto esse termo se correlaciona com seu valor defasado (ele atrasado em n vezes). A autocorrelação, no fim, é um valor entre -1 e 1, e, quanto mais próximo de |1|, maior a correlação de dois efeitos.

A função de autocorrelação faz a relação de y com sua enésima defasagem, e retornaria esses resultados no caso do PIB:

plot(acf(dataset$PIB))

O gráfico acima é conhecido como correlograma. Como é possível análisar, o ponto em que cada linha bate no eixo y indica o quão correlacionada está o PIB com sua defasagem, no eixo x. Quanto mais defasagens, menor o sinal esperado da correlação.

E a função de autocorrelação parcial? Ao invés de usarmos a correlação entre duas variáveis, estimamos um coeficiente direto (um sentido de causalidade), por meio de pequenas “regressões” relacionando Y com Y defasado em n termos. Na prática é estimar b, nessa equação: \(Y_t = b(Y_{t -n})\) (é um pouco mais complexa que isso, mas posso generalizar aqui para facilitar).

Assim, o sinal da PACF (função de autocorrelação parcial) é mais sensível ao termo defasado que a simples correlação entre termos, e, graficamente tem essa cara:

plot(pacf(dataset$PIB))

Se refizermos esses dois gráficos, só que em cima da primeira diferença da série do PIB (que é estacionária), veremos uma notável diferença.

dataset <- dataset %>%
  mutate(primeira_diferenca = PIB - lag(PIB))

plot(acf(dataset$primeira_diferenca, na.action = na.pass))

plot(pacf(dataset$primeira_diferenca, na.action = na.pass))

Os correlogramas da série normal, e em primeira diferença são bem diferentes! No caso, os dois primeiros gráficos são muito comuns a séries não estacionárias, enquanto que os dois últimos apresentam um padrão um pouco mais próximo de séries estacionárias.

A análise do correlograma não é suficiente para diagnosticar estacionariedade, mas pode ser uma ferramenta importante para identificar característiscas intrínsecas a essa série, conforme poderemos descobrir no decorrer da matéria. (Estimação por meio de ARIMA utiliza diagnóstico gráfico em cima desses conceitos)

8 Tratando a sazonalidade.

Recobrando do primeiro gráfico apresentado nesse documento, é possível notar que existem oscilações recorrentes ao longo da série temporal. Podemos utilizar uma técnica bem simples para “suavizar” essa série de tempo e tratar a sazonalidade. Essa técnica foi muito usada durante a pandemia do COVID-19 e se trata de suavizar por meio da média móvel de um periodo.

Funciona assim: em dado dia/mês/ano, pegamos n valores anteriores a essa observação e calculamos a média. Fazemos isso para todas as observações. Quanto mais valores forem utilizados para calcular a média, mais “suave” fica a série. Abaixo calculo a média de 3, 6, 9 e 12 meses:

dataset <- read_excel("PIB.xls")
dataset <- dataset %>%
  mutate(
    media_movel_3_meses = frollmean(PIB, 3),
    media_movel_6_meses = frollmean(PIB, 6),
    media_movel_9_meses = frollmean(PIB, 9),
    media_movel_12_meses = frollmean(PIB, 12)
)

dataset %>%
  kbl() %>%
  kable_material() %>%
  scroll_box(width = "800px", height = "350px")
Data PIB media_movel_3_meses media_movel_6_meses media_movel_9_meses media_movel_12_meses
1990-01-01 174698.3 NA NA NA NA
1990-02-01 195161.9 NA NA NA NA
1990-03-01 268903.2 212921.2 NA NA NA
1990-04-01 211052.0 225039.1 NA NA NA
1990-05-01 219974.2 233309.8 NA NA NA
1990-06-01 195822.5 208949.6 210935.4 NA NA
1990-07-01 195128.7 203641.8 214340.4 NA NA
1990-08-01 190782.3 193911.2 213610.5 NA NA
1990-09-01 183468.6 189793.2 199371.4 203888.0 NA
1990-10-01 202031.9 192094.3 197868.1 206925.1 NA
1990-11-01 208569.9 198023.5 195967.3 208414.8 NA
1990-12-01 184664.1 198422.0 194107.6 199054.9 202521.5
1991-01-01 178441.2 190558.4 191326.4 195431.5 202833.4
1991-02-01 175443.5 179516.3 188769.9 190483.7 201190.2
1991-03-01 168590.9 174158.5 186290.3 187457.9 192830.8
1991-04-01 196841.5 180292.0 185425.2 187648.2 191646.6
1991-05-01 209151.1 191527.8 185522.1 189689.2 190744.7
1991-06-01 213064.0 206352.2 190255.4 192977.6 192181.5
1991-07-01 209675.4 210630.2 195461.1 193826.9 193393.7
1991-08-01 208926.1 210555.2 201041.5 193866.4 194905.7
1991-09-01 187224.5 201942.0 204147.1 194150.9 195218.7
1991-10-01 204366.7 200172.4 205401.3 197031.5 195413.3
1991-11-01 201426.0 197672.4 204113.8 199918.5 194817.9
1991-12-01 184176.1 196656.3 199299.1 201650.2 194777.3
1992-01-01 183638.0 189746.7 194959.6 200183.1 195210.3
1992-02-01 185993.9 184602.7 191137.5 197610.1 196089.5
1992-03-01 185350.3 184994.1 190825.2 194530.8 197486.2
1992-04-01 182378.5 184574.3 187160.5 191497.8 196280.9
1992-05-01 189865.3 185864.7 185233.7 189379.9 194673.8
1992-06-01 195462.0 189235.3 187114.7 190295.2 193206.9
1992-07-01 196981.7 194103.0 189338.6 189474.7 192149.1
1992-08-01 196366.6 196270.1 191067.4 188912.5 191102.5
1992-09-01 196261.6 196536.6 192886.0 190255.3 191855.6
1992-10-01 199191.2 197273.1 195688.1 191983.5 191424.3
1992-11-01 199492.9 198315.2 197292.7 193483.4 191263.2
1992-12-01 180601.9 193095.3 194816.0 192955.7 190965.3
1993-01-01 181718.7 187271.1 192272.1 192882.4 190805.4
1993-02-01 181781.6 181367.4 189841.3 191984.2 190454.4
1993-03-01 202999.9 188833.4 190964.3 192821.8 191925.2
1993-04-01 198595.8 194459.1 190865.1 193001.1 193276.6
1993-05-01 201615.4 201070.4 191218.9 193584.3 194255.8
1993-06-01 196966.4 199059.2 193946.3 193662.6 194381.1
1993-07-01 204903.1 201161.6 197810.4 194297.3 195041.2
1993-08-01 208411.0 203426.8 202248.6 195288.2 196044.9
1993-09-01 212291.2 208535.1 203797.1 198809.2 197380.7
1993-10-01 206761.4 209154.5 205158.1 201591.8 198011.6
1993-11-01 204688.8 207913.8 205670.3 204137.0 198444.6
1993-12-01 186310.9 199253.7 203894.4 202282.7 198920.3
1994-01-01 170812.2 187270.6 198212.6 199195.6 198011.5
1994-02-01 153255.1 170126.1 189019.9 193822.2 195634.3
1994-03-01 157942.7 160670.0 179961.8 189486.3 191879.5
1994-04-01 165888.8 159028.9 173149.7 185151.3 189153.9
1994-05-01 181951.4 168594.3 169360.2 182211.4 187515.2
1994-06-01 234223.0 194021.0 177345.5 184648.2 190620.0
1994-07-01 276449.0 230874.5 194951.7 192391.3 196582.1
1994-08-01 292405.2 267692.4 218143.3 202137.6 203581.6
1994-09-01 286222.6 285025.6 239523.3 213238.9 209742.6
1994-10-01 287548.8 288725.5 259800.0 226209.6 216474.9
1994-11-01 285495.9 286422.4 277057.4 240903.0 223208.8
1994-12-01 270221.1 281088.6 283057.1 253378.4 230201.3
1995-01-01 283593.0 279770.0 284247.8 266456.7 239599.7
1995-02-01 297416.2 283743.4 285082.9 279286.1 251613.1
1995-03-01 350398.8 310469.3 295779.0 292194.5 267651.1
1995-04-01 328964.8 325593.3 302681.6 298029.6 281240.8
1995-05-01 313058.1 330807.3 307275.3 300324.4 292166.4
1995-06-01 308031.1 316684.7 313577.0 302747.5 298317.0
1995-07-01 313975.8 311688.3 318640.8 305683.9 301444.3
1995-08-01 322332.3 314779.7 322793.5 309776.8 303938.2
1995-09-01 316736.5 317681.5 317183.1 314945.2 306481.0
1995-10-01 326753.2 321940.7 316814.5 319740.8 309748.1
1995-11-01 343874.5 329121.4 321950.6 324902.8 314612.9
1995-12-01 333031.8 334553.2 326117.3 322973.1 319847.2
1996-01-01 317047.9 331318.1 326629.4 321649.0 322635.1
1996-02-01 305395.4 318491.7 323806.6 320797.6 323300.0
1996-03-01 306785.5 309742.9 322148.0 320659.2 319665.6
1996-04-01 307989.4 306723.4 319020.8 319994.1 317917.6
1996-05-01 330323.3 315032.7 316762.2 320881.9 319356.4
1996-06-01 334154.1 324155.6 316949.3 322817.2 321533.3
1996-07-01 349618.7 338032.0 322377.7 325357.8 324503.6
1996-08-01 347794.9 343855.9 329444.3 325793.5 326625.4
1996-09-01 332844.3 343419.3 333787.5 325772.6 327967.8
1996-10-01 357046.3 345895.2 341963.6 330216.9 330492.2
1996-11-01 370608.3 353499.6 348677.8 337462.8 332720.0
1996-12-01 373142.3 366932.3 355175.8 344835.7 336062.5
1997-01-01 351528.2 365092.9 355494.0 349673.4 338935.9
1997-02-01 320413.7 348361.4 350930.5 348572.3 340187.4
1997-03-01 315466.4 329136.1 348034.2 346495.9 340910.8
1997-04-01 327302.0 321060.7 343076.8 344016.3 342520.2
1997-05-01 345831.0 329533.1 338947.3 343798.1 343812.5
1997-06-01 358158.7 343763.9 336450.0 346610.8 345812.9
1997-07-01 361573.9 355187.9 338124.3 347113.8 346809.2
1997-08-01 361826.6 360519.7 345026.4 346138.1 347978.5
1997-09-01 360664.7 361355.1 352559.5 344751.7 350296.8
1997-10-01 383257.5 368582.9 361885.4 348277.2 352481.1
1997-11-01 373764.6 372562.3 366541.0 354205.0 352744.1
1997-12-01 353483.7 370168.6 365761.8 358429.2 351105.9
1998-01-01 343410.6 356886.3 362734.6 360219.0 350429.5
1998-02-01 326803.9 341232.7 356897.5 358104.9 350962.0
1998-03-01 345974.1 338729.5 354449.1 356751.1 353504.3
1998-04-01 347514.1 340097.4 348491.8 355188.9 355188.6
1998-05-01 363872.7 352453.6 346843.2 355416.2 356692.1
1998-06-01 365571.4 358986.1 348857.8 355961.4 357309.8
1998-07-01 372624.8 367356.3 353726.8 354780.0 358230.7
1998-08-01 371550.0 369915.4 361184.5 354533.9 359041.0
1998-09-01 364870.1 369681.6 364333.9 355799.1 359391.5
1998-10-01 376122.5 370847.5 369101.9 359433.7 358796.9
1998-11-01 371484.2 370825.6 370370.5 364398.2 358606.8
1998-12-01 355602.2 367736.3 368709.0 365468.0 358783.4
1999-01-01 343538.3 356874.9 363861.2 365026.2 358794.0
1999-02-01 339854.4 346331.6 358578.6 362357.5 359881.6
1999-03-01 369850.4 351081.0 359408.7 362833.0 361871.3
1999-04-01 363856.0 357853.6 357364.2 361858.7 363233.1
1999-05-01 369105.9 367604.1 356967.9 361587.1 363669.2
1999-06-01 377138.2 370033.4 360557.2 362950.2 364633.1
1999-07-01 371948.5 372730.9 365292.2 362486.5 364576.7
1999-08-01 374612.2 374566.3 371085.2 362834.0 364831.9
1999-09-01 365091.1 370550.6 370292.0 363888.3 364850.3
1999-10-01 382197.2 373966.8 373348.9 368183.8 365356.6
1999-11-01 393859.0 380382.4 377474.4 374184.3 367221.1
1999-12-01 388362.9 388139.7 379345.1 376241.2 369951.2
2000-01-01 362642.1 381621.3 377794.1 376106.4 371543.2
2000-02-01 358856.0 369953.7 375168.0 374967.5 373126.6
2000-03-01 360866.6 360788.2 374464.0 373159.5 372378.0
2000-04-01 355411.1 358377.9 369999.6 371322.0 371674.2
2000-05-01 383541.8 366606.5 368280.1 372314.2 372877.2
2000-06-01 395291.2 378081.4 369434.8 375669.8 374390.0
2000-07-01 392353.9 390395.6 374386.8 376798.3 376090.4
2000-08-01 396016.6 394553.9 380580.2 377038.0 377874.1
2000-09-01 376982.5 388451.0 383266.2 375773.5 378865.1
2000-10-01 401028.4 391342.5 390869.1 380038.7 380434.4
2000-11-01 401926.0 393312.3 393933.1 384824.2 381106.6
2000-12-01 392830.2 398594.9 393522.9 388375.8 381478.9
2001-01-01 378555.7 391104.0 391223.2 390947.4 382805.0
2001-02-01 373680.5 381688.8 387500.6 389851.7 384040.4
2001-03-01 396297.1 382844.4 390719.6 389963.4 386992.9
2001-04-01 391681.0 387219.5 389161.7 389888.7 390015.4
2001-05-01 403024.6 397000.9 389344.8 390667.3 391639.0
2001-06-01 376879.6 390528.4 386686.4 390655.9 390104.7
2001-07-01 393747.9 391217.3 389218.4 389846.9 390220.8
2001-08-01 399986.6 390204.7 393602.8 389631.5 390551.7
2001-09-01 382427.8 392054.1 391291.2 388475.6 391005.4
2001-10-01 405474.1 395962.8 393590.1 391466.6 391375.9
2001-11-01 408778.9 398893.6 394549.1 395366.4 391947.0
2001-12-01 389627.4 401293.5 396673.8 394625.3 391680.1
2002-01-01 385716.9 394707.8 395335.3 393962.6 392276.9
2002-02-01 380808.2 385384.2 392138.9 391494.2 392870.8
2002-03-01 401797.1 389440.8 395367.1 394262.8 393329.2
2002-04-01 406332.1 396312.5 395510.1 395661.0 394550.1
2002-05-01 415711.9 407947.0 396665.6 397408.3 395607.4
2002-06-01 411967.6 411337.2 400389.0 400690.5 398531.4
2002-07-01 419565.0 415748.2 406030.3 402256.1 400682.8
2002-08-01 419810.7 417114.4 412530.7 403481.9 402334.8
2002-09-01 406936.6 415437.4 413387.3 405405.1 404377.2
2002-10-01 423751.5 416832.9 416290.5 409631.2 405900.3
2002-11-01 421996.6 417561.5 417338.0 414207.7 407001.8
2002-12-01 395622.1 413790.0 414613.7 413521.6 407501.4
2003-01-01 379076.6 398898.4 407865.7 410493.2 406948.0
2003-02-01 386177.2 386958.6 402260.1 407211.5 407395.4
2003-03-01 403249.9 389501.2 401645.6 406242.9 407516.5
2003-04-01 407871.8 399099.6 398999.0 404943.6 407644.8
2003-05-01 401809.0 404310.2 395634.4 402943.5 406486.2
2003-06-01 397069.9 402250.2 395875.7 401847.2 405244.7
2003-07-01 418893.1 405924.0 402511.8 401307.3 405188.7
2003-08-01 413276.0 409746.3 407028.3 400338.4 404644.2
2003-09-01 421695.4 417954.8 410102.5 403235.4 405874.1
2003-10-01 438384.7 424452.0 415188.0 409825.2 407093.5
2003-11-01 432897.1 430992.4 420369.4 415016.3 408001.9
2003-12-01 430584.8 433955.6 425955.2 418053.5 410915.5
2004-01-01 401955.9 421812.6 423132.3 417396.2 412822.1
2004-02-01 395103.5 409214.7 420103.6 416651.1 413565.9
2004-03-01 433391.6 410150.3 422052.9 420686.9 416077.7
2004-04-01 430370.5 419621.9 420717.2 421962.2 417952.6
2004-05-01 434698.3 432820.1 421017.4 424342.4 420693.4
2004-06-01 447003.9 437357.6 423753.9 427154.5 424854.6
2004-07-01 459626.6 447109.6 433365.7 429514.7 428249.0
2004-08-01 451445.7 452692.1 442756.1 431575.6 431429.8
2004-09-01 437814.5 449628.9 443493.3 432378.9 432773.1
2004-10-01 450775.7 446678.7 446894.1 437803.4 433805.7
2004-11-01 464057.2 450882.5 451787.3 445464.9 436402.4
2004-12-01 464754.0 459862.3 454745.6 448949.6 439249.8
2005-01-01 423416.1 450742.4 448710.5 448176.9 441038.1
2005-02-01 413585.6 433918.5 442400.5 445831.0 442578.3
2005-03-01 448274.6 428425.4 444143.8 445972.2 443818.6
2005-04-01 449587.8 437149.3 443945.9 444856.8 445420.0
2005-05-01 449339.9 449067.4 441493.0 444622.8 446640.1
2005-06-01 457384.0 452103.9 440264.7 446797.2 447505.1
2005-07-01 464479.2 457067.7 447108.5 448319.8 447909.5
2005-08-01 471260.0 464374.4 456720.9 449120.1 449560.7
2005-09-01 454396.7 463378.6 457741.3 447969.3 450942.6
2005-10-01 470472.5 465376.4 461222.0 453197.8 452584.0
2005-11-01 482233.9 469034.4 466704.4 460825.4 454098.7
2005-12-01 489035.5 480580.6 471979.6 465354.4 456122.1
2006-01-01 454938.8 475402.7 470389.5 465948.9 458749.0
2006-02-01 435744.4 459906.2 464470.3 464438.3 460595.6
2006-03-01 462928.2 451203.8 465892.2 465054.3 461816.7
2006-04-01 449594.2 449422.3 462412.5 463400.5 461817.3
2006-05-01 481067.4 464529.9 462218.1 464490.2 464461.2
2006-06-01 484028.7 471563.5 461383.6 467782.6 466681.6
2006-07-01 502640.1 489245.4 469333.9 471356.8 469861.7
2006-08-01 508884.4 498517.7 481523.8 474318.0 472997.1
2006-09-01 486319.2 499281.2 485422.4 474016.2 475657.3
2006-10-01 516634.7 503946.1 496595.8 480871.3 479504.1
2006-11-01 527697.6 510217.2 504367.5 491088.3 483292.8
2006-12-01 529190.1 524507.5 511894.3 498450.7 486639.0
2007-01-01 502525.4 519804.4 511875.2 504332.0 490604.5
2007-02-01 480522.5 504079.3 507148.2 504271.4 494336.0
2007-03-01 514213.9 499087.3 511797.4 507625.3 498609.9
2007-04-01 507056.6 500597.7 510201.0 508116.0 503398.4
2007-05-01 532457.5 517909.4 510994.4 510735.3 507680.9
2007-06-01 536821.9 525445.4 512266.3 516346.7 512080.3
2007-07-01 546218.4 538499.3 519548.5 519633.8 515711.9
2007-08-01 547231.6 543424.0 530666.7 521804.2 518907.5
2007-09-01 518008.7 537152.9 531299.1 520561.8 521548.2
2007-10-01 560092.5 541777.6 540138.4 526958.2 525169.7
2007-11-01 556972.1 545024.4 544224.2 535452.6 527609.3
2007-12-01 554623.7 557229.4 547191.2 539942.6 529728.7
2008-01-01 539919.4 550505.1 546141.3 543594.0 532844.9
2008-02-01 526969.0 540504.0 542764.2 542984.1 536715.4
2008-03-01 545547.9 537478.8 547354.1 543953.7 539326.6
2008-04-01 556844.7 543120.5 546812.8 545134.4 543475.6
2008-05-01 566261.6 556218.1 548361.0 547248.8 546292.6
2008-06-01 586646.3 569917.5 553698.1 554875.2 550444.7
2008-07-01 611329.3 588079.1 565599.8 560568.2 555870.6
2008-08-01 590258.9 596078.2 576148.1 564266.7 559456.2
2008-09-01 579510.3 593699.5 581808.5 567031.9 564581.3
2008-10-01 610355.8 593375.0 590727.0 574858.2 568769.9
2008-11-01 587102.4 592322.9 594200.5 581539.7 571280.8
2008-12-01 571281.5 589579.9 591639.7 584399.0 572668.9
2009-01-01 537249.7 565211.2 579293.1 582221.8 572446.5
2009-02-01 522587.3 543706.2 568014.5 577369.1 572081.3
2009-03-01 559569.9 539802.3 564691.1 574360.6 573249.8
2009-04-01 551362.7 544506.7 554858.9 567697.6 572793.0
2009-05-01 567616.5 559516.4 551611.3 565181.8 572905.9
2009-06-01 581478.5 566819.2 553310.8 565400.5 572475.2
2009-07-01 600855.9 583317.0 563911.8 564344.9 571602.5
2009-08-01 597157.6 593164.0 576340.2 565462.2 572177.4
2009-09-01 593340.6 597118.0 581968.6 567913.2 573329.9
2009-10-01 630429.8 606976.0 595146.5 578266.5 575002.7
2009-11-01 634539.1 619436.5 606300.2 590705.6 578955.8
2009-12-01 648536.0 637835.0 617476.5 600590.7 585393.6
2010-01-01 593215.7 625430.3 616203.1 605241.1 590057.5
2010-02-01 582757.9 608169.9 613803.2 606923.5 595071.7
2010-03-01 632195.5 602723.1 620279.0 612558.7 601123.8
2010-04-01 619829.4 611594.3 618512.3 614666.9 606829.4
2010-05-01 636436.4 629487.1 618828.5 619031.2 612564.4
2010-06-01 646544.9 634270.2 618496.7 624942.8 617986.6
2010-07-01 669400.3 650793.9 631194.1 629272.8 623698.6
2010-08-01 671324.7 662423.3 645955.2 633360.1 629879.2
2010-09-01 661392.5 667372.5 650821.4 634788.6 635550.2
2010-10-01 683363.4 672026.9 661410.4 644805.0 639961.3
2010-11-01 701506.8 682087.6 672255.4 657999.3 645542.0
2010-12-01 694645.8 693172.0 680272.3 664938.2 649384.5
2011-01-01 645375.7 680509.4 676268.2 667776.7 653731.1
2011-02-01 643602.4 661207.9 671647.8 668572.9 658801.5
2011-03-01 663209.5 650729.2 671950.6 670424.6 661386.0
2011-04-01 661339.3 656050.4 668279.9 669528.9 664845.1
2011-05-01 691797.1 672115.3 666661.6 671803.6 669458.5
2011-06-01 699581.1 684239.2 667484.2 676046.8 673878.2
2011-07-01 701856.1 697744.8 676897.6 678101.5 676582.9
2011-08-01 705501.7 702313.0 687214.1 678545.4 679430.9
2011-09-01 674094.1 693817.3 689028.2 676261.9 680489.4
2011-10-01 702004.4 693866.7 695805.8 682554.0 682042.8
2011-11-01 718870.3 698322.9 700317.9 690917.1 683489.8
2011-12-01 718815.1 713229.9 703523.6 697095.5 685503.9
2012-01-01 670677.0 702787.5 698327.1 698133.0 687612.3
2012-02-01 668402.5 685964.9 692143.9 695533.6 689679.0
2012-03-01 712377.4 683818.9 698524.4 696955.4 693776.3
2012-04-01 688631.0 689803.6 696295.5 695485.9 696050.6
2012-05-01 720390.1 707132.8 696548.8 697140.2 698433.4
2012-06-01 715746.2 708255.8 696037.4 701768.2 699780.5
2012-07-01 741180.7 725772.4 707788.0 706121.1 703057.5
2012-08-01 746975.3 734634.1 720883.5 709243.9 706513.7
2012-09-01 696007.7 728054.6 718155.2 706709.8 708339.8
2012-10-01 743137.3 728706.8 727239.6 714760.9 711767.6
2012-11-01 740005.8 726383.6 730508.9 722716.8 713528.8
2012-12-01 732876.0 738673.0 733363.8 724994.5 714700.6
2013-01-01 711982.4 728288.1 728497.4 727589.1 718142.7
2013-02-01 681710.9 708856.4 717620.0 723291.4 719251.7
2013-03-01 727191.2 706961.5 722817.3 724563.0 720486.2
2013-04-01 743248.5 717383.5 722835.8 724792.8 725037.7
2013-05-01 741247.9 737229.2 723042.8 724156.4 726775.8
2013-06-01 746586.1 743694.1 725327.8 729776.2 729345.8
2013-07-01 771847.4 753227.1 735305.3 732966.2 731901.4
2013-08-01 760182.8 759538.8 748384.0 735208.1 733002.0
2013-09-01 733150.0 755060.1 749377.1 735238.6 736097.2
2013-10-01 774633.0 755988.6 754607.9 742199.8 738721.8
2013-11-01 768241.3 758674.8 759106.8 751814.2 741074.8
2013-12-01 775507.5 772794.0 763927.0 757182.7 744627.4
2014-01-01 742056.4 761935.1 758961.9 757050.3 747133.6
2014-02-01 727127.9 748230.6 753452.7 755481.4 750918.3
2014-03-01 740296.2 736493.5 754643.7 754782.5 752010.4
2014-04-01 746662.5 738028.9 749982.0 751984.2 752294.9
2014-05-01 750729.1 745895.9 747063.3 750933.8 753085.0
2014-06-01 725721.1 741037.6 738765.5 750108.3 751346.3
2014-07-01 761889.7 746113.3 742071.1 748692.4 750516.5
2014-08-01 751000.9 746203.9 746049.9 746776.8 749751.3
2014-09-01 746468.5 753119.7 747078.6 743550.3 750861.2
2014-10-01 769184.6 755551.3 750832.3 746564.5 750407.1
2014-11-01 758337.4 757996.8 752100.4 750032.2 749581.8
2014-12-01 766682.7 764734.9 758927.3 752964.1 748846.4
2015-01-01 716529.0 747183.1 751367.2 749615.9 746719.1
2015-02-01 688456.9 723889.6 740943.2 742696.8 743496.6
2015-03-01 743149.4 716045.1 740390.0 744633.2 743734.3
2015-04-01 715541.6 715716.0 731449.5 739483.4 741140.9
2015-05-01 705184.3 721291.7 722590.6 734392.7 737345.5
2015-06-01 705185.9 708637.2 712341.2 729805.7 735634.2
2015-07-01 724789.3 711719.8 713717.9 724872.9 732542.5
2015-08-01 708002.6 712659.3 716975.5 719280.2 728959.3
2015-09-01 708218.0 713670.0 711153.6 712784.1 725771.8
2015-10-01 734091.2 716770.6 714245.2 714735.5 722847.4
2015-11-01 719913.1 720740.7 716700.0 718230.6 719645.3
2015-12-01 723198.2 725734.2 719702.1 716013.8 716021.6
2016-01-01 672073.1 705061.5 710916.0 711184.0 712317.0
2016-02-01 668626.4 687965.9 704353.3 707122.0 710664.4
2016-03-01 700354.6 680351.3 703042.8 706585.2 707098.2
2016-04-01 683511.0 684164.0 694612.7 701998.7 704429.0
2016-05-01 686641.2 690168.9 689067.4 699625.2 702883.7
2016-06-01 714558.7 694903.6 687627.5 700329.7 703664.8
2016-07-01 706490.1 702563.3 693363.7 697262.9 702139.8
2016-08-01 707057.5 709368.8 699768.8 695834.5 702061.1
2016-09-01 673140.2 695562.6 695233.1 690272.5 699137.9
2016-10-01 691664.9 690620.9 696592.1 692449.4 695602.4
2016-11-01 711514.8 692106.6 700737.7 697214.8 694902.6
2016-12-01 740857.8 714679.1 705120.9 701715.1 696374.2
2017-01-01 687067.6 713146.7 701883.8 702110.3 697623.7
2017-02-01 668890.8 698938.7 695522.7 700138.0 697645.8
2017-03-01 706794.5 687584.3 701131.7 699275.4 698182.4
2017-04-01 680494.8 685393.4 699270.0 696387.0 697931.1
2017-05-01 710853.1 699380.8 699159.8 696808.7 699948.7
2017-06-01 721049.9 704132.6 695858.5 702132.0 700489.7
2017-07-01 720369.6 717424.2 701408.8 705321.4 701646.3
2017-08-01 716687.3 719368.9 709374.9 705896.2 702448.8
2017-09-01 680262.9 705773.3 704952.9 699163.4 703042.3
2017-10-01 704081.0 700343.7 708884.0 701053.8 704077.0
2017-11-01 723145.3 702496.4 710932.7 707082.0 705046.2
2017-12-01 749380.6 725535.6 715654.4 711813.8 705756.4
2018-01-01 704921.1 725815.7 713079.7 714527.9 707244.2
2018-02-01 669626.2 707976.0 705236.2 709947.1 707305.5
2018-03-01 708049.4 694198.9 709867.3 708502.6 707410.1
2018-04-01 704902.6 694192.7 710004.2 706784.0 709444.1
2018-05-01 683679.2 698877.1 703426.5 703116.5 707179.6
2018-06-01 720058.1 702880.0 698539.4 707538.2 707096.9
2018-07-01 722115.2 708617.5 701405.1 709542.0 707242.4
2018-08-01 720344.0 720839.1 709858.1 709230.7 707547.1
2018-09-01 685045.0 709168.1 706024.0 702082.3 707945.6
2018-10-01 727494.6 710961.2 709789.4 704590.5 709896.8
2018-11-01 730102.7 714214.1 717526.6 711310.1 710476.6
2018-12-01 739709.0 732435.5 720801.8 714827.8 709670.6
2019-01-01 706763.8 725525.2 718243.2 715034.6 709824.2
2019-02-01 689904.4 712125.7 713169.9 715726.3 711514.0
2019-03-01 698882.0 698516.8 715476.1 713373.4 710750.1
2019-04-01 712972.4 700586.3 713055.7 712357.6 711422.5
2019-05-01 726522.7 712792.4 712459.1 713044.1 714992.8
2019-06-01 718205.0 719233.4 708875.1 716728.5 714838.4
2019-07-01 751610.0 732112.6 716349.4 719408.0 717296.3
2019-08-01 738295.7 736036.9 724414.6 720318.3 718792.3
2019-09-01 735714.7 741873.5 730553.4 719874.5 723014.8
2019-10-01 765904.8 746638.4 739375.5 726445.8 726215.6
2019-11-01 751888.5 751169.3 743603.1 733332.9 728031.1
2019-12-01 760367.0 759386.8 750630.1 740164.5 729752.6
2020-01-01 725058.8 745771.5 746204.9 741507.5 731277.2
2020-02-01 714600.7 733342.2 742255.8 740182.8 733335.2
2020-03-01 723115.5 720925.0 740155.9 740728.4 735354.7
2020-04-01 653864.1 697193.4 721482.4 729867.8 730429.0
2020-05-01 661612.0 679530.5 706436.3 721347.3 725019.7
2020-06-01 694692.1 670056.1 695490.5 716789.3 723060.3
2020-07-01 737299.0 697867.7 697530.6 713610.9 721867.7
2020-08-01 728749.0 720246.7 699888.6 711039.8 721072.2
2020-09-01 735042.6 733696.9 701876.5 708226.0 721016.2
2020-10-01 758357.7 740716.4 719292.1 711925.8 720387.2
2020-11-01 754535.5 749311.9 734779.3 716363.1 720607.8
2020-12-01 770907.3 761266.8 747481.9 721673.3 721486.2
2021-01-01 731680.6 752374.5 746545.5 730319.5 722038.0
2021-02-01 750086.1 750891.4 750101.6 740150.0 724995.1
2021-03-01 811273.1 764346.6 762806.7 753103.4 732341.6
2021-04-01 782022.8 781127.4 766750.9 758072.8 743021.5
2021-05-01 775193.2 789496.4 770193.9 763233.2 752486.6
2021-06-01 772853.1 776689.7 770518.1 767434.4 759000.0
2021-07-01 796847.4 781631.2 781379.3 771711.0 763962.4
2021-08-01 785520.1 785073.5 787284.9 775153.7 768693.3
2021-09-01 764799.1 782388.9 779539.3 774475.1 771173.0
2021-10-01 761170.8 770496.7 776063.9 777751.7 771407.4
2021-11-01 772984.2 766318.0 775695.8 780296.0 772944.8
2021-12-01 786974.9 773710.0 778049.4 777596.2 774283.8
2022-01-01 752223.6 770727.6 770612.1 774285.1 775995.7
2022-02-01 753542.9 764247.1 765282.6 771879.6 776283.8

Perceba que aparecem uns NA, esses valores são o equivalente a “nada”. A média entre valores desconhecidos é desconhecida, por isso, suavizar a série ocasiona também na perda de informação. Abaixo observe que a tendência da série é mantida, mas a oscilação ao longo dela é reduzida.

data_long <- dataset %>%
  tidyr::pivot_longer(!Data, names_to = "serie", values_to = "PIB")

ggplot(data_long, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  theme_classic() +
  facet_wrap(~serie)

9 Modelos Autorregressivos Integrados de Média Móvel (ARIMA)

Nos capítulos anteriores busquei utilizar a série histórica do PIB como simplificadora. Na prática, series temporais podem ser qualquer observação de uma variável em dado recorte temporal. Além disso, busquei não entrar no mérito dos modelos AR(p), MA(q) ou modelos ARMA(p, q).

Dessa forma, nesta seção, buscarei conceituar os modelos AR(p), MA(q) e ARMA(p, q), além de introduzir mais um compontente, o grau de diferenciação I(d).

9.1 Modelos autoregressivos AR

São a classe de modelos que dependem de um componente defasado da série.

Em outras palavras: são os modelos em que o resultado do presente é influenciado por um ou mais resultados do passado. Exemplo: o PIB do ano de 2020 é fortemente influenciado pelos PIBs do passado!

A forma com uma defasagem do modelo AR(1) é: \[ Y_t = c + \phi_1 Y_{t-1} + \epsilon_t \] O valor de phi (\(\phi\)) é o sinal que é atribuido a combinação das variáveis que usamos pra explicar o fenômeno \(Y_t\). Ou seja, \(Y_t\) depende de uma constante mais alguma coisa de seu valor passado.

Podemos generalizar para p defasagens:

\[ Y_t = c + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + ... + \phi_p Y_{t-p} + \epsilon_t \]

Alguns exemplos gráficos para série AR(p):

O gráfico abaixo advém de um modelo da seguinte formula:

\[ Y_t = 50 + 0.9 Y_{t-1} + \epsilon_t \]

set.seed(402)
dataset <- data.table(x = 1:201, y = arima.sim(model = list(order = c(1, 1, 0), ar = .9), n = 200) + 50)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

O gráfico abaixo advém de um modelo da seguinte formula:

\[ Y_t = 20 - 0.4 Y_{t-1} + \epsilon_t \]

set.seed(402)
dataset <- data.table(x = 1:201, y = arima.sim(model = list(order = c(1, 1, 0), ar = -.4), n = 200) + 20)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

O gráfico abaixo advém de um modelo da seguinte formula:

\[ Y_t = 20 + 0.6 Y_{t-1} + 0.2 Y_{t-2}+ 0.1 Y_{t-3} + \epsilon_t \]

set.seed(402)
dataset <- data.table(x = 1:201, y = arima.sim(model = list(order = c(3, 1, 0), ar = c(.6, .2, .1)), n = 200) + 20)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

9.2 Modelos de média movel (MA)

São a classe de modelos que dependem do erro aleatório do componente passado.

Em outras palavras: são os modelos em que o resultado do presente é influenciado por um ou mais erros do passado. Exemplo: para aprender a andar de bicicleta, uma pessoa provavelmente irá cair algumas vezes, e seu aprendizado advém de cada tentativa e de cada erro.

A forma com uma defasagem do modelo MA(1) é: \[ Y_t = \mu + \epsilon_t + \theta \epsilon_{t-1} \] Em que \(\mu\) é o valor médio das observações e \(\epsilon_t\) é o erro estocástico (aleatório) da série no período t. O valor de \(\theta\) é simplesmente o sinal (e nosso objetivo de estimação) em que o erro passado influenciou no erro do presente.

Podemos escrever o componente MA(q) de uma forma geral, como segue: \[ Y_t = \mu + \epsilon_t + \theta_1 \epsilon_{t-1} + \theta_2 \epsilon_{t-2} + ... + \theta_q \epsilon_{t-q} \] Alguns exemplos gráficos para série MA(q):

O gráfico abaixo advém de um modelo da seguinte formula:

\[ Y_t = 20 + \epsilon_t + 10 \epsilon_{t-1} \]

set.seed(402)
dataset <- data.table(x = 1:201, y = arima.sim(model = list(order = c(0, 1, 1), ma = c(10)), n = 200) + 20)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

O gráfico abaixo advém de um modelo da seguinte formula:

\[ Y_t = 20 + \epsilon_t + 70 \epsilon_{t-1} + 40 \epsilon_{t-1} \]

set.seed(42)
dataset <- data.table(x = 1:201, y = arima.sim(model = list(order = c(0, 1, 2), ma = c(70, 40)), n = 200) + 20)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

Com a observação dos gráficos dessa subseção e da anterior você pode ter se perguntado: qual a diferença? As vezes não tem nenhuma! O modelo AR pode ser inversível, ou seja, pode ter uma representação direta em forma de modelo MA, e todo o modelo MA pode ser representado por um modelo AR!

Mais a frente, aprenderemos a diagnosticar qual a melhor adequação do modelo com base em diferentes critérios.

9.3 O modelo ARMA:

Agora que vimos a forma do modelo AR(p) e MA(q), para entendermos o modelo ARMA é uma simples questão de forma funcional!(a função que define o valor no presente)

No caso, um modelo ARMA(1,1) é uma combinação dos modelos AR(1) e MA(1), tendo a cara:

\[ Y_t = c + \phi_1 Y_{t-1} + \theta_1\epsilon_{t-1} + \epsilon_t \] De uma forma geral, podemos definir o modelo ARMA(p,q) da forma: \[ Y_t = c + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + ... + \phi_p Y_{t-p} + \theta_1\epsilon_{t-1} + \theta_2\epsilon_{t-2} + ... + \theta_q\epsilon_{t-q} + \epsilon_t \] Posso simplificar esse trem feio com dois somatórios: \[ Y_t = c + \sum_{i=1}^p\phi_i Y_{t-i} + \sum_{j = 1}^q\theta_j\epsilon_{t-j} + \epsilon_t \]

9.4 O componente I(d): grau de diferenciação

Nas seções anteriores, me dediquei a explicar o conceito de estacionariedade sem explicar exatamente o por quê isso era tão relevante. Bom, esse conceito entra aqui! Na série histórica do PIB, que foi utilizada de exemplo no início desse documento, vimos que ela era considerada estacionária a partir da sua primeira diferença. Isso quer dizer que aquela série podia ser chamada de integrada de ordem 1.

Assim, o grau de diferenciação é simplesmente em quantas diferenças a série em questão fica estacionária! No caso do exemplo do PIB, se fôssemos estimar um modelo ARIMA(p, d, q), já conheceríamos o componente d, visto que a série é integrada de ordem \(I(1)\)!

9.5 Sintese: a estimação de modelos ARIMA(p,d,q)

Vimos a relação dos modelos de componente autorregressivo AR(p), média móvel MA(q), e autorregressivo de médias móveis ARMA(p,q). O I, de ARIMA advém apenas de estimarmos um modelo ARMA(p,q) em uma série diferenciada em d vezes!

O processo de estimação em si não terá foco nesse documento, mas poderíamos estimar os coeficientes relacionados a cada modelo pelo método de Momentos Generalizados, ou por Máxima Verossimilhança. (Esses métodos são abordados na disciplina de ECO 457!)

10 Identificação de modelos ARIMA

Pela metodologia Box–Jenkins, existe um passo a passo para auxiliar na determinação dos componentes do modelo que melhor se adequem a realidade estudada.

O que eu quero dizer com identificação? Excelente pergunta! A questão da identificação está relacionada a melhor representação matemática de um fenômeno que observamos. No caso do PIB, é muito provável que eu tenha que considerar um ou mais componentes autoregressivos AR(p). A identificação tem exatamente esse objetivo: quais a forma ideal que meu modelo deve ter que melhor representa a natureza do evento que estou observando.

A identificação ocorre em 3 etapas:

  1. Se identifica a necessidade de uma transformação na série original, de forma que ocorra uma estabilização da variância. (A série é estacionária?)
  2. Caso a série já não seja estacionária, torná-la estacionária pelo processo de diferenciação. (Quantas diferenças são necessárias para estacionarizá-la?)
  3. Verificar, por meio da função de autocorrelação (correlograma) e por meio da função de autocorrelação parcial (correlograma parcial), o comportamento esperado dos componentes.

O item 3 é um tanto quanto nebuloso, não é mesmo? O que é comportamento esperado? Por que analisar um gráfico para verificar isso?

A próxima subseção explicará a análise gráfica por meio de diferentes exemplos de ajustamento.

10.1 Exemplos de identificação gráfica

A partir de agora, espero que minha explicação lhe ajude a compreender o por quê tudo isso que fizemos é relevante! (sugestão: reveja a seção referente a interpretação do correlograma!)

Começo primeiro com uma série de exemplo, já estacionária.

Seu objetivo com os gráficos abaixo é de pensar qual seriam os componentes ideais do modelo ARMA(p, q) e por que você acredita estar certo.

10.1.1 Exemplo 1:

set.seed(402)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(1, 0, 0), ar = c(.4)), n = 200) + 150)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Uma dica: analise a significância de cada defasagem com o termo no presente. Qual o único valor significativo? O correlograma nos diz algo?

Ver a resposta: Se você chegou a conclusão de que o modelo que melhor representa essa série é o ARMA(1,0), você acertou! Nesse caso, ocorre um sinal forte de que a primeira defasagem dessa série influencia o valor dela no presente. O modelo ARMA, nesse caso, seria um simples modelo AR(1)! Veja a estimação dele abaixo: \[ Y_t = 150 + 0.8 Y_{t-1} + \epsilon_t \]

10.1.2 Exemplo 2

set.seed(402)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(2, 0, 0), ar = c(.7, 0.2)), n = 200) + 40)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Ver a resposta: Se você identificou um modelo ARMA(2,0), parabéns! Da mesma forma que antes, o correlograma apresenta uma descida exponencial, e o correlograma parcial apresenta apenas duas defasagens significativas. Por isso, a identificação do modelo AR(2) é o ideal!

10.1.3 Exemplo 3

set.seed(2)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(0, 0, 1), ma = 10), n = 200) + 400)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Dica: esses gráficos parecem com o que foram mostrados anteriormente? Então provavelmente não se tratam do mesmo tipo de especificação!

Ver a resposta: Perceba que apenas a primeira defasagem pelo correlograma é significante, e, pelo correlograma parcial, um novo padrão pôde ser observado, uma “ondinha” que relaciona o valor no presente e defasado que se repete esporadicamente. Isso é comportamento de uma série ARMA(0, 1), ou, simplesmente, um modelo MA(1)!

10.1.4 Exemplo 4

set.seed(154)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(0, 0, 2), ma = c(40, 20)), n = 200) + 10)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Ver a resposta: Se você classificou esse modelo como ARMA(0, 2) você acertou! Veja que, pelo correlograma, existem apenas duas defasagens com sinal significativo (depois da linha azul). Isso é um indicativo de que a série tem 2 componentes de média móvel, e, pelo correlograma parcial, existe uma mistura de subidas e descidas (ondinha), típica de uma série com padrões de MA(q).

10.1.5 Exemplo 5

set.seed(2)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(1, 0, 1), ar = 0.6, ma = 40), n = 200) + 70)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Dica: Mais uma vez, o padrão do gráfico é um pouco diferente dos anteriores. Analise o correlograma e o correlograma parcial simultaneamente!

Ver a resposta:

Se você julgou que o ajustamento correto do modelo seria de um ARMA(1,1), você acertou! Caso tenha chutado ARMA(1, 3), não desanime, você está no caminho! A interpretação do ajustamento dos modelos muitas vezes é digna de erro. Quantos mais componentes forem necessários para um ajustamento “ideal”, mais complexo fica o diagnóstico.

Pelo livro texto, a explicação do porque essa série apresenta um ajustamento ARMA(1,1) é devido ao comportamento de quedas exponenciais aceleradas em ambos os correlogramas.

Vimos que é possível identificar os valores ideais de ARMA(p,q) no caso em que existem poucos componentes. Idealmente a análise pode ser feita com mais componentes, mas se torna cada vez mais dificil. Uma forma simples de analisar se o modelo se ajusta bem a tipificação dele será apresentada na seção seguinte.

10.2 Critério de Informação de Akaike (AIC) e Critério de Informação Bayesiano (BIC)

Os critérios de informação analisados nessa sessão são métricas de desempenho de um dado modelo estimado. Isso quer dizer que, para cada tipificação de modelo que supormos, existirá um AIC ou um BIC referentes. Buscamos minimizar os critérios de informação.

O AIC tem a seguinte fórmula: \[ AIC(p, q) = ln\hat{\sigma}_{p,q}² + \frac{2(p+1)}{N} \] O BIC tem a seguinte fórmula: \[ BIC(p, q) = ln\hat{\sigma}_{p,q}² + (p+q) \frac{lnN}{N} \]

O valor de \(\hat{\sigma}_{p,q}²\) nas duas equações é o mesmo, e é calculado por meio do método de máxima verossimilhança, de forma a maximizar a verossimilhança residual do modelo ARMA(p, q).

Parou tudo! Falei grego agora né? Vamos em partes: conhecemos os valores de p e q, certo? Lembra lá do modelo ARMA(p, q)! Eles são os termos que adicionam componentes autorregressivos ou de média móvel em nossos modelos. N é a quantidade de observações da série utilizada no modelo e o \(\hat{\sigma}_{p,q}²\) é um valor calculado que minimiza a variância dos resíduos por um método de otimização. (deriva e iguala a zero, encontra a relação de máximo ou mínimo… enfim, vem de uma conta dessas!)

Ok, então qual a relação dos dois critérios com a sua vida? Quanto maior o AIC, pior ajustado será o modelo, o BIC tem a mesma interpretação, mas ele penaliza mais a adição de mais componentes no modelo. Menos é mais!

Podemos então, considerar o valor do AIC ou BIC para auxiliar em nosso diagnóstico do tipo do modelo ajustado. Abaixo, faremos alguns exemplos:

10.2.1 Exemplo 1

set.seed(20)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(5, 0, 0), ar = c(.3,.25,.22,.12, .1)), n = 200) + 700)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Com base nos correlogramas, como você ajustaria o modelo?

Vamos supor que esse modelo tenha natureza ARMA(4, 1). Qual o AIC relacionado a esse modelo?

print(arima(dataset$y, c(4, 0, 1)))
## 
## Call:
## arima(x = dataset$y, order = c(4, 0, 1))
## 
## Coefficients:
##          ar1     ar2     ar3     ar4      ma1  intercept
##       0.5912  0.1418  0.0628  0.1491  -0.3760   697.0540
## s.e.  0.1952  0.0937  0.0964  0.0933   0.1904     0.6607
## 
## sigma^2 estimated as 0.883:  log likelihood = -272.1,  aic = 558.19

E para um modelo ARMA(4,0)?

print(arima(dataset$y, c(4, 0, 0)))
## 
## Call:
## arima(x = dataset$y, order = c(4, 0, 0))
## 
## Coefficients:
##          ar1     ar2     ar3     ar4  intercept
##       0.2434  0.2508  0.1802  0.2224   697.0467
## s.e.  0.0687  0.0696  0.0697  0.0687     0.5901
## 
## sigma^2 estimated as 0.8972:  log likelihood = -273.66,  aic = 559.33

O AIC foi pior que nosso primeiro chute. E no caso de um modelo ARMA(5,1)?

print(arima(dataset$y, c(5, 0, 1)))
## 
## Call:
## arima(x = dataset$y, order = c(5, 0, 1))
## 
## Coefficients:
##           ar1     ar2     ar3     ar4     ar5     ma1  intercept
##       -0.2313  0.3293  0.2498  0.2609  0.2592  0.4524   697.0494
## s.e.   0.2900  0.1004  0.1048  0.0895  0.0782  0.2979     0.6434
## 
## sigma^2 estimated as 0.8677:  log likelihood = -270.41,  aic = 556.81

Melhorou! E se for na verdade um ajuste tipo ARMA(5, 0)?

print(arima(dataset$y, c(5, 0, 0)))
## 
## Call:
## arima(x = dataset$y, order = c(5, 0, 0))
## 
## Coefficients:
##          ar1     ar2     ar3     ar4     ar5  intercept
##       0.2056  0.2222  0.1393  0.1815  0.1646   697.0508
## s.e.  0.0696  0.0697  0.0710  0.0700  0.0702     0.6677
## 
## sigma^2 estimated as 0.8727:  log likelihood = -270.96,  aic = 555.91

Se você tinha chutado um modelo ARMA(5,0), parabéns! Vimos que é realmente dificil identificar padrões quando existem muitos componentes na série temporal. Assim, a utilização de métricas auxilia nosso diagnóstico.

10.2.2 Exemplo 2

set.seed(20)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(3, 0, 2), ar = c(.3,.25,.22), ma = c(40, 30)), n = 200) + 39)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Tente identificar o ajustamento ideal do modelo ARMA(p, q) com base nos correlogramas. Quais você imagina serem os valores mais prováveis?

Vamos imaginar um modelo ARMA(1, 3):

print(arima(dataset$y, c(1, 0, 3)))
## 
## Call:
## arima(x = dataset$y, order = c(1, 0, 3))
## 
## Coefficients:
##          ar1     ma1      ma2     ma3  intercept
##       0.6995  0.3009  -0.0016  0.2962    62.2367
## s.e.  0.0860  0.0949   0.1093  0.0851    14.3421
## 
## sigma^2 estimated as 1504:  log likelihood = -1016.21,  aic = 2044.42

E se eu supor o ajustamento ARMA(2,3)?

print(arima(dataset$y, c(2, 0, 3)))
## 
## Call:
## arima(x = dataset$y, order = c(2, 0, 3))
## 
## Coefficients:
##          ar1      ar2     ma1      ma2     ma3  intercept
##       0.7694  -0.0697  0.2370  -0.0029  0.3180    62.3240
## s.e.  0.2138   0.1922  0.2014   0.1128  0.1026    13.9724
## 
## sigma^2 estimated as 1503:  log likelihood = -1016.14,  aic = 2046.29

Houve piora no AIC, portanto não foi uma boa sugestão. E no caso de um ARMA(1,5)?

print(arima(dataset$y, c(1, 0, 5)))
## 
## Call:
## arima(x = dataset$y, order = c(1, 0, 5))
## 
## Coefficients:
##          ar1     ma1      ma2     ma3      ma4      ma5  intercept
##       0.7262  0.2812  -0.0359  0.2896  -0.0108  -0.0630    62.2474
## s.e.  0.1469  0.1652   0.1632  0.1135   0.1237   0.0891    14.3860
## 
## sigma^2 estimated as 1499:  log likelihood = -1015.85,  aic = 2047.7

Ainda não foi uma boa sugestão. Se parássemos de sugerir, a nossa primeira sugestão seria a melhor possível! Você teria chutado ela primeiro também?

10.2.3 Exemplo 3

set.seed(20)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(1, 0, 3), ar = c(.9), ma = c(40, 30, 15)), n = 200) + 309)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Tente identificar o ajustamento ideal do modelo ARMA(p, q) com base nos correlogramas. Quais você imagina serem os valores mais prováveis?

Vamos imaginar um modelo ARMA(2, 1):

print(arima(dataset$y, c(2, 0, 1)))
## 
## Call:
## arima(x = dataset$y, order = c(2, 0, 1))
## 
## Coefficients:
##          ar1      ar2     ma1  intercept
##       1.5348  -0.6255  0.0224   365.4808
## s.e.  0.0760   0.0740  0.0894    31.6918
## 
## sigma^2 estimated as 1629:  log likelihood = -1024.99,  aic = 2059.99

E agora, ajustar outra sugestão, podendo ser ARMA(1, 2):

print(arima(dataset$y, c(1, 0, 2)))
## 
## Call:
## arima(x = dataset$y, order = c(1, 0, 2))
## 
## Coefficients:
##          ar1     ma1     ma2  intercept
##       0.8582  0.7312  0.4602   364.1854
## s.e.  0.0381  0.0706  0.0603    42.1308
## 
## sigma^2 estimated as 1589:  log likelihood = -1022.57,  aic = 2055.15

Essa sugestão melhorou nosso AIC! E se sugerirmos agora um ARMA(1, 3)?

print(arima(dataset$y, c(1, 0, 3)))
## 
## Call:
## arima(x = dataset$y, order = c(1, 0, 3))
## 
## Coefficients:
##          ar1     ma1     ma2     ma3  intercept
##       0.8478  0.7464  0.4943  0.0492   364.1690
## s.e.  0.0431  0.0766  0.0811  0.0766    41.0609
## 
## sigma^2 estimated as 1585:  log likelihood = -1022.37,  aic = 2056.74

E um ARMA(0,3)?

print(arima(dataset$y, c(0, 0, 3)))
## 
## Call:
## arima(x = dataset$y, order = c(0, 0, 3))
## 
## Coefficients:
##          ma1     ma2     ma3  intercept
##       1.5743  1.3584  0.5107   364.3568
## s.e.  0.0613  0.0696  0.0476    15.7352
## 
## sigma^2 estimated as 2541:  log likelihood = -1069.4,  aic = 2148.81

Vish! O componente autorregressivo é bem importante pro modelo! E um ARMA(2,3)?

print(arima(dataset$y, c(2, 0, 3)))
## 
## Call:
## arima(x = dataset$y, order = c(2, 0, 3))
## 
## Coefficients:
##          ar1     ar2     ma1     ma2     ma3  intercept
##       0.1088  0.6489  1.4751  0.9950  0.3198   363.9926
## s.e.  0.4731  0.4019  0.4790  0.3706  0.2447    42.5784
## 
## sigma^2 estimated as 1586:  log likelihood = -1022.41,  aic = 2058.82

Com base em nossos chutes, o melhor ajustamento do modelo é do tipo ARMA(1,2)!

10.3 Identificação pelos resíduos

Uma outra forma de analisarmos o ajustamento do modelo ARMA(p,q) é de testarmos a normalidade dos resíduos do modelo ajustados. O que quero dizer com isso? Lembre de um modelo AR(1):

\[ Y_t = c + \phi_1 Y_{t-1} + \epsilon_t \] Sem o termo de choque aleatório \(\epsilon_t\), eu teria uma estimativa do valor de \(Y_t\): \[ \hat{Y_t} = c + \phi_1 Y_{t-1} \] Resíduo é quanto minha previsão “errou” considerando o valor verdadeiro, que é \(Y_t\), então: \[ \epsilon_t = Y_t - \hat{Y_t} = Y_t - (c + \phi_1 Y_{t-1}) \] Se temos nossa estimativa de \(Y_t\), podemos assumir um valor para o termo de choque aleatório! Lembre-se, que esse termo de choque aleatório é um termo de ruído branco (normalmente distribuído). Caso o valor do choque aleatório não seja normalmente distribuído, a nossa sugestão de identificação para o modelo ARMA(p,q) não é próxima da realidade!

Farei um exemplo no modelo AR(1) simples:

set.seed(20)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(1, 0, 0), ar = c(.9)), n = 200) + 9)

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Pelo gráfico, podemos facilmente classificar essa tipificação como modelo AR(1). E se eu tivesse classificado errado, por exemplo um modelo ARMA(0, 1)? Veja como ficariam os resíduos:

sarima(dataset$y, 0, 0, 1)

Muitas informações não é? Vamos devagar, com um passo a passo:

  1. O primeiro gráfico mostra o comportamento desse resíduo ao longo do tempo. Ele parece estacionário e sem componente cíclico aparente. Isso é um bom indicativo de ajustamento do modelo!
  2. O gráfico do meio, à esquerda nos mostra o correlograma dos resíduos. Existe uma correlação forte entre o resíduo em uma defasagem com o presente? Conforme aumentam as defasagens, a correlação fica cada vez menor?
  3. O gráfico do meio, à direita é chamado de Q-Plot. A linha azul apresenta uma distribuição normal clássica, de média 0 e desvio padrão 1. Quanto mais próximos os pontos dessa linha reta, mais próximos os resíduos estão da distribuição normal. Nesse caso, existem indícios de que os resíduos são normalizados.
  4. O gráfico de baixo é o mais sensível de todos. Ele apresenta um teste para cada defasagem do resíduo, que apresenta como hipótese nula os resíduos serem normais. Como o pvalor dos pontos estão todos abaixo do ponto de corte (0.05), rejeitamos a hipótese que os resíduos são normais em toda a amostra!

Pelo item 4, nosso modelo não pode ser considerado bem ajustado aos dados. E se fosse um modelo ARMA(1,0)?

sarima(dataset$y, 1, 0, 0)

Agora sim, do último gráfico poderia assumir normalidade dos erros, visto que existem muitos poucos pontos abaixo da linha azul.

Agora que vimos como realizar a identificação do modelo pelos resíduos, farei mais 2 exemplos abaixo:

10.3.1 Exemplo 1

Identifique a série abaixo:

set.seed(2000)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(2, 0, 1), ar = c(.5, 0.4), ma = 50), n = 200) + 100)

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

O primeiro chute para essa tipificação poderia ser um ARMA(0, 3). Vejamos o comportamento do resíduo nesse caso:

sarima(dataset$y, 0, 0, 3)

Pelo gráfico de baixo não poderiamos aceitar essa especificação para o modelo. E se chutassemos ARMA(3, 0)?

sarima(dataset$y, 3, 0, 0)

Esse chute se saiu melhor! Poderíamos já aceitar esse ajustamento para o modelo. Mas e se eu chutasse outro valor? Que tal ARMA(2, 1)?

sarima(dataset$y, 2, 0, 1)

Parece que essa outra tipificação se saiu bem tambem… Nesse caso poderíamos utilizar os critérios de informação para encontrar o melhor modelo:

print(arima(dataset$y, c(3, 0, 0)))
## 
## Call:
## arima(x = dataset$y, order = c(3, 0, 0))
## 
## Coefficients:
##          ar1     ar2      ar3  intercept
##       0.5155  0.3789  -0.0975   101.5875
## s.e.  0.0704  0.0751   0.0706    16.7428
## 
## sigma^2 estimated as 2425:  log likelihood = -1063.66,  aic = 2137.32
print(arima(dataset$y, c(2, 0, 1)))
## 
## Call:
## arima(x = dataset$y, order = c(2, 0, 1))
## 
## Coefficients:
##          ar1    ar2     ma1  intercept
##       0.2639  0.491  0.2467   101.7286
## s.e.  0.1536  0.114  0.1708    17.2737
## 
## sigma^2 estimated as 2427:  log likelihood = -1063.74,  aic = 2137.47

Parece que o modelo ARMA(3,0) é a melhor tipificação do modelo! (por muito pouco)

10.3.2 Exemplo 2

set.seed(2000)
dataset <- data.table(x = 1:200, y = arima.sim(model = list(order = c(1, 0, 5), ar = c(.9), ma = c(50, 40, 30, 20, 10)), n = 200) + 100)

plot(acf(dataset$y, na.action = na.pass))

plot(pacf(dataset$y, na.action = na.pass))

Chutando um modelo ARMA(2,1), os resíduos são normais?

sarima(dataset$y, 2, 0, 1)

Parece que sim! E um ARMA(1, 3)?

sarima(dataset$y, 1, 0, 3)

Não são, por muito pouco! E um ARMA(1,5)?

sarima(dataset$y, 1, 0, 5)

Os resíduos parecem ser normalmente distribuídos, excelente. Entre os dois modelos que foram bem ajustados, qual o melhor?

print(arima(dataset$y, c(2, 0, 1)))
## 
## Call:
## arima(x = dataset$y, order = c(2, 0, 1))
## 
## Coefficients:
##          ar1      ar2     ma1  intercept
##       1.6099  -0.6872  0.1044   117.1819
## s.e.  0.0656   0.0645  0.0831    48.8958
## 
## sigma^2 estimated as 2408:  log likelihood = -1064.46,  aic = 2138.93
print(arima(dataset$y, c(1, 0, 5)))
## 
## Call:
## arima(x = dataset$y, order = c(1, 0, 5))
## 
## Coefficients:
##          ar1     ma1     ma2     ma3     ma4     ma5  intercept
##       0.7634  0.9625  0.8787  0.6349  0.4136  0.0981   116.9379
## s.e.  0.0740  0.1028  0.1495  0.1735  0.1400  0.0981    56.1202
## 
## sigma^2 estimated as 2324:  log likelihood = -1061.01,  aic = 2138.03

O modelo de tipificação ARMA(1,5) foi o melhor pro nosso caso!

Com isso, concluímos a seção sobre ARIMA. Na próxima seção, iremos trabalhar com ARIMA com ajustes sazonais, o SARIMA!

11 Modelos Sazonais Autoregressivos Integrados de Média Móvel (SARIMA)

Primeiro, gostaria de introduzir o conceito de modelo sazonal puro. Esse, tipo de modelo acontece quando o valor no presente é influenciado somente pelo valor passado dele em termos de sazonalidade. Lembremos do caso do PIB (para os anos de 2001 e 2002), apresentado no início do documento:

rm(list = ls())
dataset <- as.data.table(read_excel("PIB.xls"))[Data >= as.POSIXct("2001-01-01", tz="UTC") &
                                                  Data < as.POSIXct("2003-01-01", tz="UTC")]

ggplot(dataset, aes(Data, PIB, label = substr(format(dataset$Data, "%B"), 1,1))) +
  geom_line(color = "steelblue") +
  geom_text(aes(color = as.factor(format(Data, "%B"))), size = 7) +
  theme_classic() +
  theme(legend.position="none")

Nas seções iniciais, eu estimei o componente sazonal utilizando o MQO e 4 dummies. O gráfico acima foi apenas para ilustrar com clareza o componente cíclico dessa série.

Note que, os meses de fevereiro costumam ser meses de baixa no PIB, com um uma tendência de crescimento em maio! Esse movimento é exatamente igual nos dois anos. Na prática então, ao invés de usar um modelo AR, que utiliza da primeira defasagem da série, o componente sazonal puro seria simplesmente a série no ano passado!

\[ Y_t = c + \Phi_1Y_{t-12} + \epsilon_t \] Veja que esse modelo não poderia ser necessariamente considerado um AR(12), visto que AR(12) implicaria falar nesse modelo: \[ Y_t = c + \phi_1Y_{t-1} + \phi_2Y_{t-2} + \phi_3Y_{t-3} + \phi_4Y_{t-4} + \phi_5Y_{t-5} + \phi_6Y_{t-6} + \phi_7Y_{t-7} + \phi_8Y_{t-8} + \phi_9Y_{t-9} + \phi_{10}Y_{t-10} + \phi_{11}Y_{t-11} + \phi_{12}Y_{t-12} + \epsilon_t \] Claramente não são a mesma coisa não é mesmo? Então uma forma de representar o modelo sazonal puro (isso é, o modelo que utiliza apenas o componente sazonal para previsão) seria por meio do seguinte:

\[ SAR(1)_s = c + \Phi_1Y_{t-s} + \epsilon_t \] A introdução de mais termos no modelo SAR(P) inclui apenas mais componentes sazonais, considerando a frequência (s): \[ SAR(P)_s = c + \Phi_1Y_{t-s} + \Phi_2Y_{t-2s} + ... + \Phi_PY_{t-Ps} + \epsilon_t \]

O modelo MA(q) tem a mesma lógica, considerando componentes sazonais, e apresenta um modelo genérico similar: \[ SMA(Q)_s = \mu + \epsilon_t + \Theta_1\epsilon_{t-s} + \Theta_2\epsilon_{t-2s} + ... + \Theta_Q\epsilon_{t-Qs} \] Da mesma forma, o modelo ARMA(p,q), considerando um modelo puramente sazonal pode ser representado da forma: \[ SARMA(P, Q)_s = c + \sum_{j=1}^P\Phi_jY_{t-js} + \sum_{i=1}^Q \Theta_i\epsilon_{t-is} + \epsilon_t \] Sem assustar! Essas são simplesmente representações genéricas do modelo que a gente busca tipificar, igual fizemos na seção anterior!

Olhando para aquela série do PIB que apresentei no início da seção, qual tipo de modelo você consideraria ajustar, utilizando apenas componentes sazonais? Minha resposta e justificativa abaixo:

Expandir aqui: Analisando somente o comportamento direto entre meses, eu diria que uma boa tipificação, considerando os dois anos de análise, e, considerando que buscamos classificar apenas um modelo puramente sazonal, seria de um modelo \(SAR(1)_{12}\). Visto que os meses, ao longo de um ano, tendem a representar comportamentos similares!

Agora que comentei sobre os modelos de pura natureza sazonal, podemos misturar o que aprendemos na seção anterior com essa! Vamos supor que uma série apresentou forte presença de um componente Autorregressivo de primeira ordem, a série é estacionária somente em sua primeira diferença e apresentou um componente de médias móveis. Parando por aí, teríamos um modelo ARIMA(1,1,1)!

Adicionando o componente sazonal, poderíamos supor que a série é similar a que eu mostrei acima, em que os meses dependem em certo grau do valor no ano anterior. Então teria um modelo, de forma genérica \(SARIMA(p,d,q)(P,D,Q)_s\), que, no caso que comentei, seria: \(SARIMA(1,1,1)(1,1,0)_{12}\).

Antes de finalizar essa seção, vou mastigar um pouco a definição que dei logo acima: \[ SARIMA(p,d,q)(P,D,Q)_s \] O que cada componente desse modelo geral quer dizer é simples: temos os valores AR(p), grau de diferenciação I(d) e MA(q). Esse é o ARIMA tradicional. Lembrando que a aplicação do ARIMA envolve em estimar ARMA na série diferenciada d vezes!

O mesmo vale para os componentes \(SAR(P)_s\), o grau de diferenciação do componente sazonal \(I(P)_s\), e o componente \(SMA(Q)_s\). Esse é o ARIMA com componentes sazonais puros. A mistura dos dois, matematicamente falando seria: \[ SARMA(p,d,q)(P,D,Q)_s = c + \sum_{i = 1}^p \phi_iY_{t-i} + \sum_{j=1}^q\theta_j\epsilon_{t-j} + \sum_{k=1}^P\Phi_kY_{t-ks} + \sum_{l=1}^Q \Theta_l\epsilon_{t-ls} + \epsilon_t \] Pro exemplo dado acima, o modelo teria a cara: \[ SARIMA(1,1,1)(1,1,0)_{12} = c + \phi_1Y_{t-1} + \theta_1\epsilon_{t-1} + \Phi_1Y_{t-12} + \Theta\epsilon_{t-12} + \epsilon_t \]

Na seção seguinte, iremos aprofundar nesses termos e na tipificação de séries com componentes sazonais.

12 Identificação de modelos SARIMA

A identificação de modelos mistos que envolvem um componente sazonal funcionam de forma silimar aos modelos ARIMA normais. Nas seções anteriores eu apresentei 3 ferramentas para analisar o ajustamento do modelo. A ideia dessa seção é a mesma. Podemos analisar por meio dos correlogramas, pelos critérios de informação e pelo ajustamento dos resíduos. Por isso, essa seção será dedicada a resolução de alguns exemplos.

12.1 Exemplo 1

set.seed(32)
dataset <- data.table(x = 1:200, y = sarima.sim(0, 1, 0, 0.4, 0, 0, 12, n = 200) + 100)

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

Essa série é estacionária? Não. Primeiro busco em qual diferença ela é estacionária.

dataset <-  data.table(x = 1:199, y = diff(dataset$y))

ggplot(dataset, aes(x, y)) +
  geom_line(color = "steelblue") +
  theme_classic()

tseries::adf.test(dataset$y)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dataset$y
## Dickey-Fuller = -5.7847, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Pelo teste Dickey-Fuller aumentado, rejeitamos a hipótese nula que a série não é estacionária! Então encontramos nossos componentes I(d) e SI(D).

Analiso agora o correlograma e o correlograma parcial:

Acf(dataset$y, lag.max = 30)

Pacf(dataset$y, lag.max = 30)

Pela interpretação do correlograma parcial, notamos que existe um valor muito significativo no ponto de lag(12), mas não existem muitos valores significativos antes disso. Além disso, não existem componentes significativos no início dos dois gráficos. Por isso, o modelo que melhor representa a série acima é o \(SARMA(0, 0, 0)(1,0,0)_{12}\)!

12.2 Exemplo 2

Tente dar um diagnóstico da série abaixo:

set.seed(32)
dataset <- data.table(x = 1:200, y = sarima.sim(0, 0, 0.9, 0.9, 0, 0, 4, n = 200) + 78)

Acf(dataset$y)

Pacf(dataset$y)

Dica: identifique primeiro a sazonalidade da série. A partir desse valor, no eixo x, você irá identificar o componente sazonal, antes dele, os componentes ARMA(p,q) normalmente!

Ver a resposta: Se você classificou esse modelo como \(SARIMA(0, 0, 1)(1, 0, 0)_4\) você acertou! A sazonalidade da série é notável a partir da quarta defasagem, ao analisar o correlograma, ou seja, esse é o valor de s. Antes da quarta defasagem, o correlograma indica presença de um componente MA(1), depois da quarta defasagem, pelo correlograma parcial, existe um indicativo forte de um componente SAR(1), visto que, comparado com o correlograma que de 4 em 4 defasagens apresenta um sinal significativo, o correlograma parcial apresenta valor significativo apenas para 4ª defasagem.

12.3 Exemplo 3

set.seed(32)
dataset <- data.table(x = 1:200, y = sarima.sim(0, 0, 0, c(0.5, 0.4), 0, 0, 6, n = 200) + 78)

Acf(dataset$y)

Pacf(dataset$y)

Note que o componente sazonal apresenta picos e cumes, ou seja, o padrão se repete de quanto em quanto tempo?

Ver a resposta: Se você classificou esse modelo como \(SARIMA(0, 0, 0)(2, 0, 0)_6\) você acertou! A sazonalidade da série é notável a partir da sexta defasagem, ao analisar o correlograma, sendo a terceira defasagem relacionada a um momento de baixa, e a sexta a um momento de alta. Antes da sexta defasagem não existem valores significativos, portanto, a série temporal é puramente sazonal!

12.4 Exemplo 4

set.seed(32)
dataset <- data.table(x = 1:200, y = sarima.sim(0, 0, 0, 0, 0, 0.9, 12, n = 200) + 78)

Acf(dataset$y)

Pacf(dataset$y)

Ver a resposta: Se você classificou esse modelo como \(SARIMA(0, 0, 0)(0, 0, 1)_12\) você acertou! A sazonalidade da série é notável a partir da décima segunda defasagem, ao analisar o correlograma. Antes da sexta defasagem não existem valores significativos, portanto, a série temporal é puramente sazonal! Note que, quando identificamos um padrão SAR(1), precisamos analisar conjuntamente o correlograma e o correlograma parcial, sendo os valores significativos somente no correlograma. No caso do modelo SMA(1), os valores são significativos no correlograma parcial, e, no correlograma, é significativo apenas uma vez.

12.5 Exemplo 5

Finalmente, iremos classificar a série que apresentamos no início deste documento! Tá valendo tudo, porque quanto mais complexa a série, mais difícil fica de dar um diagnóstico gráfico sobre o ajustamento da série. Mãos a obra!

dataset <- as.data.table(read_excel("PIB.xls"))
ggplot(dataset, aes(x = Data, y= PIB)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  theme_classic()

A série não é estacionária, veremos se ela passa a ser com a primeira diferença.

dataset[, primeira_diferença := PIB - lag(PIB)]

ggplot(dataset, aes(x = Data, y= primeira_diferença)) +
  geom_line(color = "steelblue") +
  scale_y_continuous(labels = scales::number_format()) +
  theme_classic()

tseries::adf.test(na.omit(dataset$primeira_diferença))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(dataset$primeira_diferença)
## Dickey-Fuller = -9.0955, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary

Pelo teste ADF, rejeitamos a hipótese de que a série não é estacionária. Vamos identificar os componentes nos correlogramas dessa série diferenciada.

Acf(dataset$primeira_diferença)

Pacf(dataset$primeira_diferença)

Um chute inicial que eu daria sobre o ajustamento dessa série seria que existe uma sazonalidade mensal (doze em doze defasagens). No início do correlograma, imagino a existência de um componente MA(2), visto que existem duas defasagens significativas, e pelo correlograma parcial, existe um componente AR(4). Sobre os componentes sazonais, acredito existir um componente SAR(2). Assim, meu modelo teria a cara \(SARIMA(4, 0, 1)(2, 0, 0)_{12}\)

Estou certo? EU acho bem difícil dizer apenas por análise gráfica. Vamos ver se essa minha suposição apresenta resíduos bem ajustados!

sarima(na.omit(dataset$primeira_diferença), 4, 0, 1, 2, 0, 0, 12)

Parece que eu errei em algum componente! Vou fazer alguns chutes e comparar diferentes modelos pelo BIC. Esse foi o BIC do meu chute inicial.

sarima(na.omit(dataset$primeira_diferença), 4, 0, 1, 2, 0, 0, 12, details = FALSE)$BIC
## [1] 22.27353

E se o ajustamento correto for \(SARIMA(4, 0, 1)(1, 0, 1)_{12}\)? Abaixo o BIC do modelo proposto:

sarima(na.omit(dataset$primeira_diferença), 4, 0, 1, 1, 0, 1, 12, details = FALSE)$BIC
## [1] 22.1238

Houve uma melhoria significativa. Vamos ver se eu consigo melhorar ainda mais com \(SARIMA(4, 0, 0)(1, 0, 1)_{12}\)

sarima(na.omit(dataset$primeira_diferença), 4, 0, 0, 1, 0, 1, 12, details = FALSE)$BIC
## [1] 22.1086

Melhorou ainda mais! E como estão distribuídos os resíduos desse ajustamento?

sarima(na.omit(dataset$primeira_diferença), 4, 0, 0, 1, 0, 1, 12)

Em maiores defasagens os erros parecem não estar normalmente distribuídos. Independente disso, com base nos outros diagnósticos, os resíduos desse modelo se ajustam muito bem! Essa é a realidade com dados reais (tem que rir pra não chorar), a tipificação do modelo é bem mais difícil!

Tentei várias sugestões e não encontrei alguma com BIC menor, então julgo que o modelo \(SARIMA(4, 0, 0)(1, 0, 1)_{12}\) representa bem o PIB brasileiro!

Poderia fazer uma projeção para o PIB com esse modelo então! Sei que na série original, o modelo seria \(SARIMA(4, 1, 0)(1, 0, 1)_{12}\). Assim, uma projeção para 48 meses de PIB abaixo:

previsoes <- sarima.for(dataset$PIB, n.ahead = 48, 4, 0, 0, 1, 0, 1, 12, plot = FALSE)
dados_previsao <- data.table(previsto = as.numeric(previsoes$pred), 
                             se = as.numeric(previsoes$se),
                             Data = seq(as.POSIXct("2022-03-01"), by = "month", length.out = 48))
dados_previsao[
  ,
  `:=` (
    minimo = previsto - se,
    maximo = previsto + se
  )
]

ggplot(dataset) +
  geom_point(aes(x = Data, y = PIB), color = "gray23", size = 0.4) +
  geom_line(aes(x = Data, y = PIB), color = "steelblue") +
  geom_point(data = dados_previsao, aes(Data, previsto), color = "lightpink1", size = 0.4) +
  geom_line(data = dados_previsao, aes(Data, previsto), color = "indianred2") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_ribbon(data = dados_previsao, aes(Data, ymin = minimo, ymax = maximo), alpha = 0.5, fill = "indianred1") + 
  theme_classic()

13 Modelagem de Vetores Autoregressivos VAR

Sobre a modelagem de modelos VAR, um assunto que ainda não foi abordado nesse documento se faz relevante: a cointegração. Por isso, a próxima subseção será dedicada a falar sobre esse tema, e depois abordarei a temática de modelagem em VAR.

13.1 Cointegração

Em seções anteriores, quando me dediquei a falar sobre séries estacionárias e séries diferenciadas, o termo integrada de ordem d foi utilizado, para definir uma série que era estacionária a partir de uma diferença d. A cointegração tem mesmo sentido, só que dessa vez, a interação entre mais de uma série temporal pode tornar a série estacionária.

Tomemos como exemplo a seguinte série de dados macroeconomicos do Canadá, disponíveis quadrimestralmente:

rm(list = ls())

dataset <- as.data.table(Canada)
names(dataset) <- c("empregados_a_cada_1000_pessoas", "produtividade_do_trabalho", "salario_real", "taxa_de_desemprego")

dataset[, tempo := seq.Date(as.Date("1980/01/01"), as.Date("2000/12/01"), "quarter")]

dataset %>%
  kbl() %>%
  kable_material() %>%
  scroll_box(width = "800px", height = "350px")
empregados_a_cada_1000_pessoas produtividade_do_trabalho salario_real taxa_de_desemprego tempo
929.6105 405.3665 386.1361 7.53 1980-01-01
929.8040 404.6398 388.1358 7.70 1980-04-01
930.3184 403.8149 390.5401 7.47 1980-07-01
931.4277 404.2158 393.9638 7.27 1980-10-01
932.6620 405.0467 396.7647 7.37 1981-01-01
933.5509 404.4167 400.0217 7.13 1981-04-01
933.5315 402.8191 400.7515 7.40 1981-07-01
933.0769 401.9773 405.7335 8.33 1981-10-01
932.1238 402.0897 409.0504 8.83 1982-01-01
930.6359 401.3067 411.3984 10.43 1982-04-01
929.0971 401.6302 413.0194 12.20 1982-07-01
928.5633 401.5638 415.1670 12.77 1982-10-01
929.0694 402.8157 414.6621 12.43 1983-01-01
930.2655 403.1421 415.7319 12.23 1983-04-01
931.6770 403.0786 416.2315 11.70 1983-07-01
932.1390 403.7188 418.1439 11.20 1983-10-01
932.2767 404.8668 419.7352 11.27 1984-01-01
932.8328 405.6362 420.4842 11.47 1984-04-01
933.7334 405.1363 420.9309 11.30 1984-07-01
934.1772 406.0246 422.1124 11.17 1984-10-01
934.5928 406.4123 423.6278 11.00 1985-01-01
935.6067 406.3009 423.9887 10.63 1985-04-01
936.5111 406.3354 424.1902 10.27 1985-07-01
937.4201 406.7737 426.1270 10.20 1985-10-01
938.4159 405.1525 426.8578 9.67 1986-01-01
938.9992 404.9298 426.7457 9.60 1986-04-01
939.2354 404.5765 426.8858 9.60 1986-07-01
939.6795 404.1995 428.8403 9.50 1986-10-01
940.2497 405.9499 430.1223 9.50 1987-01-01
941.4358 405.8221 430.2307 9.03 1987-04-01
942.2981 406.4463 430.3930 8.70 1987-07-01
943.5322 407.0512 432.0284 8.13 1987-10-01
944.3490 407.9460 433.3886 7.87 1988-01-01
944.8215 408.1796 433.9641 7.67 1988-04-01
945.0671 408.5998 434.4844 7.80 1988-07-01
945.8067 409.0906 436.1569 7.73 1988-10-01
946.8697 408.7042 438.2651 7.57 1989-01-01
946.8766 408.9803 438.7636 7.57 1989-04-01
947.2497 408.3287 439.9498 7.33 1989-07-01
947.6513 407.8857 441.8359 7.57 1989-10-01
948.1840 407.2605 443.1769 7.63 1990-01-01
948.3492 406.7752 444.3592 7.60 1990-04-01
948.0322 406.1794 444.5236 8.17 1990-07-01
947.1065 405.4398 446.9694 9.20 1990-10-01
946.0796 403.2800 450.1586 10.17 1991-01-01
946.1838 403.3649 451.5464 10.33 1991-04-01
946.2258 403.3807 452.2984 10.40 1991-07-01
945.9978 404.0032 453.1201 10.37 1991-10-01
945.5183 404.4774 453.9991 10.60 1992-01-01
945.3514 404.7868 454.9552 11.00 1992-04-01
945.2918 405.2710 455.4824 11.40 1992-07-01
945.4008 405.3830 456.1009 11.73 1992-10-01
945.9058 405.1564 457.2027 11.07 1993-01-01
945.9035 406.4700 457.3886 11.67 1993-04-01
946.3190 406.2293 457.7799 11.47 1993-07-01
946.5796 406.7265 457.5535 11.30 1993-10-01
946.7800 408.5785 458.8024 10.97 1994-01-01
947.6283 409.6767 459.0564 10.63 1994-04-01
948.6221 410.3858 459.1578 10.10 1994-07-01
949.3992 410.5395 459.7037 9.67 1994-10-01
949.9481 410.4453 459.7037 9.53 1995-01-01
949.7945 410.6256 460.0258 9.47 1995-04-01
949.9534 410.8672 461.0257 9.50 1995-07-01
950.2502 411.2359 461.3039 9.27 1995-10-01
950.5380 410.6637 461.4031 9.50 1996-01-01
950.7871 410.8085 462.9277 9.43 1996-04-01
950.8695 412.1160 464.6888 9.70 1996-07-01
950.9281 412.9994 465.0717 9.90 1996-10-01
951.8457 412.9551 464.2851 9.43 1997-01-01
952.6005 412.8241 464.0344 9.30 1997-04-01
953.5976 413.0489 463.4535 8.87 1997-07-01
954.1434 413.6110 465.0717 8.77 1997-10-01
954.5426 413.6048 466.0889 8.60 1998-01-01
955.2631 412.9684 466.6171 8.33 1998-04-01
956.0561 412.2659 465.7478 8.17 1998-07-01
956.7966 412.9106 465.8995 8.03 1998-10-01
957.3865 413.8294 466.4099 7.90 1999-01-01
958.0634 414.2242 466.9552 7.87 1999-04-01
958.7166 415.1678 467.6281 7.53 1999-07-01
959.4881 415.7016 467.7026 6.93 1999-10-01
960.3625 416.8674 469.1348 6.80 2000-01-01
960.7834 417.6104 469.3364 6.70 2000-04-01
961.0290 418.0030 470.0117 6.93 2000-07-01
961.7657 417.2667 469.6472 6.87 2000-10-01

A relação de cada uma dessas variáveis com o tempo é:

dataset_long <- melt(dataset, id.vars = "tempo", variable.name = "serie", value.name = "valor")

ggplot(dataset_long, aes(tempo, valor)) +
  geom_line(color = "steelblue") +
  facet_wrap(~ serie, scales = "free") +
  theme_classic()

Observando os dados dispostos acima, você diria que as 4 séries aparentam ser estacionárias?

Antes de analisar a cointegração nos dados reais acima, vou gerar uma situação bem clara de cointegração, gerada artificialmente por mim.

Veja a série da taxa de desemprego, comparada com outra série muito parecida:

dataset[, parecida_com_desemprego := taxa_de_desemprego + rnorm(3, 0, 0.5)]

ggplot(dataset) +
  geom_line(aes(tempo, taxa_de_desemprego), color = "steelblue") +
  geom_line(aes(tempo, parecida_com_desemprego), color = "indianred1", linetype = "dashed") +
  theme_classic()

A linha azul é simplesmente a taxa de desemprego, e a linha vermelha é essa série simulada, muito parecida com a que já tinhamos. Em que diferença ambas as séries serão estacionárias?

temp <- dataset[
  ,
  . (
    diff_taxa_de_desemprego = taxa_de_desemprego - lag(taxa_de_desemprego),
    diff_parecida_com_desemprego = parecida_com_desemprego - lag(parecida_com_desemprego)
  )
]
tseries::adf.test(na.omit(temp$diff_taxa_de_desemprego))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(temp$diff_taxa_de_desemprego)
## Dickey-Fuller = -3.7325, Lag order = 4, p-value = 0.02698
## alternative hypothesis: stationary
tseries::adf.test(na.omit(temp$diff_parecida_com_desemprego))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(temp$diff_parecida_com_desemprego)
## Dickey-Fuller = -4.3674, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

Ambas as séries são integradas de ordem 1! Isso quer dizer que são cointegradas? Não necessariamente. A cointegração implica numa combinação de séries não estacionárias parecidas, que gera uma série estacionária, sem o uso do operador de diferença.

Matematicamente: \[ Y_t = y_1 - \beta_1y_2 \] Sendo \(y_1\) e \(y_2\) duas séries distintas, e \(Y_t\) uma nova série, que é estacionária.

Se eu chutar que esse valor de \(\beta_1\) é um, como seria essa nova série no nosso caso?

rm(temp)

dataset[, Yt := taxa_de_desemprego - parecida_com_desemprego]

ggplot(dataset) +
  geom_line(aes(tempo, taxa_de_desemprego), color = "steelblue") +
  geom_line(aes(tempo, parecida_com_desemprego), color = "indianred1", linetype = "dashed") +
  geom_line(aes(tempo, Yt), color = "gray23") +
  theme_classic()

A diferença entre as duas séries gerou uma série perfeitamente estacionária (um ruído branco)! Veja o resultado do teste para ter certeza:

tseries::adf.test(dataset$Yt)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dataset$Yt
## Dickey-Fuller = -3.8278e+15, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

Agora vou dar nomes aos bois! Eu só chutei que \(\beta_1\) era 1 porque eu gerei a nova série lá com base na antiga. Se as séries não fossem extremamente parecidas seria difícil dizer qual o valor correto pra \(\beta_1\), certo? Mais ou menos! Podemos inferir sobre esse valor regredindo uma série sob outra usando MQO! Seria o mesmo que fazer a regressão abaixo: \[ TaxaDeDesemprego = \beta_0 + \beta_1 ParecidaComDesemprego \]

Que tem esse resultado:

jtools::export_summs(lm(taxa_de_desemprego ~ parecida_com_desemprego, dataset))
Model 1
(Intercept)-0.18    
(0.19)   
parecida_com_desemprego0.97 ***
(0.02)   
N84       
R20.97    
*** p < 0.001; ** p < 0.01; * p < 0.05.

Posso ignorar o intercepto e olhar diretamente para o valor de inclinação estimado! Essa seria uma forma de combinar linearmente duas series temporais não estacionárias em uma série temporal estacionária!

Usando dados mais reais, existem duas séries muito parecidas naquele conjunto de gráficos que apresentei, as séries de salário_real e taxa_de_desemprego. Vamos identificar se essas séries são cointegradas pelo procedimento que utilizei acima!

Primeiro, vejo se essas séries tem a mesma ordem de integração (caso não tenham, provavelmente não são cointegradas!).

dataset[
  ,
  `:=` (
    diff_empregados_a_cada_1000_pessoas = empregados_a_cada_1000_pessoas - lag(empregados_a_cada_1000_pessoas),
    diff_salario_real = salario_real - lag(salario_real)
  )
]
tseries::adf.test(na.omit(dataset$diff_empregados_a_cada_1000_pessoas))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(dataset$diff_empregados_a_cada_1000_pessoas)
## Dickey-Fuller = -3.2668, Lag order = 4, p-value = 0.08274
## alternative hypothesis: stationary
tseries::adf.test(na.omit(dataset$diff_salario_real))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(dataset$diff_salario_real)
## Dickey-Fuller = -3.2352, Lag order = 4, p-value = 0.08789
## alternative hypothesis: stationary
dataset[
  ,
  `:=` (
    diff2_empregados_a_cada_1000_pessoas = diff_empregados_a_cada_1000_pessoas - lag(diff_empregados_a_cada_1000_pessoas),
    diff2_salario_real = diff_salario_real - lag(diff_salario_real)
  )
]
tseries::adf.test(na.omit(dataset$diff2_empregados_a_cada_1000_pessoas))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(dataset$diff2_empregados_a_cada_1000_pessoas)
## Dickey-Fuller = -5.271, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
tseries::adf.test(na.omit(dataset$diff2_salario_real))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(dataset$diff2_salario_real)
## Dickey-Fuller = -5.9644, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

Ambas as séries são estacionárias na segunda diferença, pelos testes Dickey-Fuller. Será que as séries são cointegradas?

lm(empregados_a_cada_1000_pessoas ~ salario_real, dataset) # O valor estimado de beta é 0.3649
## 
## Call:
## lm(formula = empregados_a_cada_1000_pessoas ~ salario_real, data = dataset)
## 
## Coefficients:
##  (Intercept)  salario_real  
##     783.4157        0.3649
dataset[, Yt := empregados_a_cada_1000_pessoas - 0.3649 * salario_real]

ggplot(dataset, aes(tempo, Yt)) +
  geom_line(color = "steelblue") +
  theme_classic()

Não tá com muita cara de série estacionária ein! Vamos testar pelo Dickey-Fuller aumentado:

tseries::adf.test(dataset$Yt)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dataset$Yt
## Dickey-Fuller = -2.6667, Lag order = 4, p-value = 0.3024
## alternative hypothesis: stationary

As séries analisadas não aparentam ser cointegradas!

Como sempre, podemos utilizar testes estatísticos para analisar a presença de cointegração. Utilizarei o teste de Engle-Granger para tal, sob a hipótese nula de ausência de cointegração:

coint.test(dataset$empregados_a_cada_1000_pessoas, dataset$salario_real, d = 0, nlag = NULL, output = TRUE)
## Response: dataset$empregados_a_cada_1000_pessoas 
## Input: dataset$salario_real 
## Number of inputs: 1 
## Model: y ~ X + 1 
## ------------------------------- 
## Engle-Granger Cointegration Test 
## alternative: cointegrated 
## 
## Type 1: no trend 
##     lag      EG p.value 
##    3.00   -1.66    0.10 
## ----- 
##  Type 2: linear trend 
##     lag      EG p.value 
##    3.00    1.04    0.10 
## ----- 
##  Type 3: quadratic trend 
##     lag      EG p.value 
##    3.00   -1.54    0.10 
## ----------- 
## Note: p.value = 0.01 means p.value <= 0.01 
##     : p.value = 0.10 means p.value >= 0.10

O teste usou 3 tipos de forma funcional e verificou a presença de cointegração, não rejeitando a hipótese nula em nenhuma delas! Assim, essas séries de fato não são cointegradas!

13.2 Modelagem VAR sem cointegração

Os modelos VAR fazem parte da classe de modelos que eu gosto de chamar de SEF (Simples e Eficientes!). A ideia de utilizar vetores autoregressivos é de chegar em projeções precisas de um evento sem ter muita complicação de tipificação, identificação ou um monte de termo que (desculpem estatísticos!) o estudante de graduação em economia nem vai fazer questão de lembrar depois de cursar a disciplina.

A praticidade do modelo vem do efeito causal que uma variável pode ter com outra ao longo do tempo. Pense da seguinte forma: antes usamos componentes do passado de uma série para encontrar um valor dela no presente. Isso nos permitia extrapolar a série no futuro sem muita complicação, sem precisar de fazer uma coleta extensiva de dados.

Agora, com modelagem VAR, podemos combinar o passado de outras variáveis em meio a explicar o presente de outra. Um exemplo: para prever a taxa de desemprego, poderíamos usar o PIB passado e o desemprego passado como variáveis explicativas. O mesmo poderia ser feito para o PIB, podemos usar o desemprego passado e o PIB passado para prever o PIB. Isso implica em um sistema de equações dinâmicas!

A notação do modelo VAR(1) pode ser escrita da seguinte forma:

\[ r_{1t} = \phi_{10} + \phi_{11}r_{1t-1} + \phi_{12} r_{2t-1} + a_{1t} \] \[ r_{2t} = \phi_{20} + \phi_{21}r_{1t-1} + \phi_{22} r_{2t-1} + a_{2t} \]

Calma lá! Acompanha comigo essas duas equações pois eu sei que pode parecer confuso. Na equação de cima, a série de \(r_{1t}\) é ajustada de acordo com um intercepto próprio \(\phi_{10}\), uma combinação dela no passado \(\phi_{11}r_{1t-1}\) e uma combinação de outra série no passado \(\phi_{12} r_{2t-1}\) mais um erro para esse ajuste (porque não dá pra acertar sempre né!) \(a_{1t}\). Essa série pode ser exatamente traduzida pro exemplo que dei acima:

\[ TaxaDeDesemprego_t = \phi_{10} + \phi_{11}TaxaDeDesemprego_{t-1} + \phi_{12} PIB_{t-1} + a_{1t} \] \[ PIB_t = \phi_{20} + \phi_{21}TaxaDeDesemprego_{t-1} + \phi_{22} PIB_{t-1} + a_{2t} \]

Ou seja, nosso modelo VAR considera o impacto dinâmico causal na determinação de uma série temporal, quando usa outra série como preditora!

Se eu incluir mais uma série temporal nesse modelo, incluiria mais uma equação e mais uma variável em cada equação. Exemplo, se eu incluir o salário real como preditor nesse modelo, teria o seguinte modelo VAR(1): \[ TaxaDeDesemprego_t = \phi_{10} + \phi_{11}TaxaDeDesemprego_{t-1} + \phi_{12} PIB_{t-1} + \phi_{13} SalarioReal_{t-1} + a_{1t} \] \[ PIB_t = \phi_{20} + \phi_{21}TaxaDeDesemprego_{t-1} + \phi_{22} PIB_{t-1} + \phi_{23} SalarioReal_{t-1} + a_{2t} \] \[ SalarioReal_t = \phi_{30} + \phi_{31}TaxaDeDesemprego_{t-1} + \phi_{32} PIB_{t-1} + \phi_{33} SalarioReal_{t-1} + a_{3t} \]

A complexidade do modelo cresce muito rapidamente! Isso porque estamos utilizando o VAR com uma única defasagem. Imagine como ficaria o modelo VAR(2)! Eu adicionaria para cada variável incluída no modelo, 2 variáveis defasadas em cada equação. Por isso a abordagem matricial facilita nossa vida, e reduz a quantidade de termo escrito. De forma genérica, o VAR(1) com duas séries, na forma matricial é:

\[ \left[\begin{matrix} r_{1t} \\ r_{2t} \end{matrix}\right] = \left[\begin{matrix} \phi_{10} \\ \phi_{20} \end{matrix}\right] + \left[\begin{matrix} \phi_{11} & \phi_{12} \\ \phi_{21} & \phi_{22} \end{matrix}\right] \left[\begin{matrix} r_{1t-1} \\ r_{2t-1} \end{matrix}\right] + \left[\begin{matrix} a_{1t} \\ a_{2t} \end{matrix}\right] \]

Veja que o VAR(2) é simplesmente:

\[ \begin{bmatrix} r_{1t} \\r_{2t}\end{bmatrix}=\begin{bmatrix} \phi_{10} \\\phi_{20}\end{bmatrix}+\begin{bmatrix} \phi_{11} & \phi_{12} & \phi_{13} & \phi_{14} \\\phi_{21} & \phi_{22} & \phi_{23} & \phi_{24}\end{bmatrix}\begin{bmatrix} r_{1t-1} \\ r_{2t-1} \\ r_{1t-2} \\ r_{2t-2}\end{bmatrix}+\begin{bmatrix} a_{1t} \\a_{2t}\end{bmatrix} \]

No nosso exemplo com 3 séries, o VAR(2) seria:

\[ \begin{bmatrix} TaxaDeDesemprego_t \\PIB_t \\SalarioReal_t\end{bmatrix}=\begin{bmatrix} \phi_{10} \\\phi_{20} \\\phi_{30}\end{bmatrix}+\begin{bmatrix} \phi_{11} & \phi_{12} & \phi_{13} & \phi_{14} & \phi_{15} & \phi_{16} \\\phi_{21} & \phi_{22} & \phi_{23} & \phi_{24} & \phi_{25} & \phi_{26} \\\phi_{31} & \phi_{32} & \phi_{33} & \phi_{34} & \phi_{35} & \phi_{36} \end{bmatrix}\begin{bmatrix} TaxaDeDesemprego_{t-1} \\PIB_{t-1} \\ SalarioReal_{t-1} \\ TaxaDeDesemprego_{t-2} \\ PIB_{t-2} \\ SalarioReal_{t-2}\end{bmatrix}+\begin{bmatrix} a_{1t} \\a_{2t} \\a_{3t}\end{bmatrix} \]

Que tremzinho feio né? Imagina se eu fosse escrever as 3 equações!

Agora que vimos a representação geral do modelo VAR, quero atentar para um detalhe muito importante que são os parâmetros \(\phi_{ij}\). Poderia simplesmente dizer que eles são parâmetros de inclinação do modelo, que combinam uma informação para gerar outra, mas isso é uma forma meio simplista de encarar as coisas não?

Relembre das duas equações originais que apresentei: \[ TaxaDeDesemprego_t = \phi_{10} + \phi_{11}TaxaDeDesemprego_{t-1} + \phi_{12} PIB_{t-1} + a_{1t} \] \[ PIB_t = \phi_{20} + \phi_{21}TaxaDeDesemprego_{t-1} + \phi_{22} PIB_{t-1} + a_{2t} \] O que os parâmetros \(\phi_{11}\) e \(\phi_{22}\) querem dizer? Eles determinam a a relação de uma variável sob outra! Ou seja, um aumento de uma unidade no passado do PIB causa um aumento ou diminuição do desemprego em \(\phi_{11}\), na primeira equação. Esse mesmo sinal é mensurado na segunda equação em \(\phi_{22}\). Uma forma interessante de testar o ajustamento correto de um modelo VAR é aplicar o teste de causalidade de Granger, de forma a testar se a utilização de dado conjunto de variáveis faz sentido.

Outra coisa interessante sobre os parâmetros é no sinal de \(\phi_{12}\) e \(\phi_{21}\). Se a estimativa desses valores for 0, significa dizer que nosso modelo é melhor representado ao utilizar apenas o componente AR(1)!

Vamos ao exemplo usando a base de dados macroeconomicos do Canadá, abordado na subseção anterior. Desejo estimar a taxa_de_desemprego, utilizando a produtividade_do_trabalho. As séries não são cointegradas. Como ambas não são estacionárias, primeiro estacionarizo as séries, depois estimo um modelo VAR(1) usando MQO para ambas as equações:

dataset[
  ,
  `:=` (
    diff_taxa_de_desemprego = taxa_de_desemprego - lag(taxa_de_desemprego),
    diff_produtividade_do_trabalho = produtividade_do_trabalho - lag(produtividade_do_trabalho)
  )
]

dataset[, diff2_produtividade_do_trabalho := diff_produtividade_do_trabalho - lag(diff_produtividade_do_trabalho)]

ggplot(dataset) +
  geom_line(aes(tempo, diff2_produtividade_do_trabalho, color = "produtividade_do_trabalho"), show.legend = T) +
  geom_line(aes(tempo, diff_taxa_de_desemprego, color = "taxa_de_desemprego"), show.legend =) +
  scale_color_manual(values = c("produtividade_do_trabalho" = "indianred1", "taxa_de_desemprego" = "steelblue")) +
  labs(color = "Series", y = "Valor") + 
  theme_classic()

A produtividade do trabalho é estacionária em sua segunda diferença, sendo integrada de ordem 2, enquanto que a taxa de desemprego é estacionária em sua primeira diferença, sendo integrada de primeira ordem. Isso só quer dizer que vou gerar o modelo nessas diferenças.

A primeira equação desse modelo teria essa aparência: \[ DiferencaTaxaDeDesemprego_t = \phi_{10} + \phi_{11}DiferencaTaxaDeDesemprego_{t-1} + \phi_{12}SegundaDiferencaProdTrabalho_{t-1} + a_{1t} \] Com os seguintes resultados:

coefficients(VAR(y = na.omit(dataset[, c("diff_taxa_de_desemprego", "diff2_produtividade_do_trabalho")]), p = 1, type = "const"))[1] %>% 
  kbl() %>%
  kable_paper()
Estimate Std. Error t value Pr(>|t|)
diff_taxa_de_desemprego.l1 0.5785060 0.0932117 6.2063680 0.0000000
diff2_produtividade_do_trabalho.l1 -0.0407809 0.0480840 -0.8481192 0.3989667
const -0.0013445 0.0404236 -0.0332613 0.9735512

E a segunda equação seria:

\[ SegundaDiferencaProdTrabalho_ = \phi_{20} + \phi_{21}DiferencaTaxaDeDesemprego_{t-1} + \phi_{22}SegundaDiferencaProdTrabalho_{t-1} + a_{2t} \] Com os seguintes resultados:

coefficients(VAR(y = na.omit(dataset[, c("diff_taxa_de_desemprego", "diff2_produtividade_do_trabalho")]), p = 1, type = "const"))[2] %>% 
  kbl() %>%
  kable_paper()
Estimate Std. Error t value Pr(>|t|)
diff_taxa_de_desemprego.l1 -0.0137398 0.2069452 -0.0663934 0.9472345
diff2_produtividade_do_trabalho.l1 -0.3820207 0.1067543 -3.5785026 0.0005980
const 0.0062424 0.0897471 0.0695554 0.9447255

Analisando o resultado das regressões, daria para chegar em uma conclusão fundamental sobre a forma funcional desse modelo VAR. A conclusão é que uma série não influencia na outra de forma significativa, ou seja, seria melhor estimarmos um modelo AR(1) que um modelo VAR(1).

Uma forma de testar a causalidade de duas séries é testar para a causalidade de Granger! Os resultados do teste, considerando apenas uma defasagem, da série diff_taxa_de_desemprego para diff2_produtividade_do_trabalho são:

grangertest(dataset$diff_taxa_de_desemprego, dataset$diff2_produtividade_do_trabalho, order = 1)
## Granger causality test
## 
## Model 1: dataset$diff2_produtividade_do_trabalho ~ Lags(dataset$diff2_produtividade_do_trabalho, 1:1) + Lags(dataset$diff_taxa_de_desemprego, 1:1)
## Model 2: dataset$diff2_produtividade_do_trabalho ~ Lags(dataset$diff2_produtividade_do_trabalho, 1:1)
##   Res.Df Df      F Pr(>F)
## 1     78                 
## 2     79 -1 0.0044 0.9472

A hipótese nula do teste de Granger é que o termo associado a diff2_produtividade_do_trabalho não Granger Causa a primeira série. Como o pvalor do teste foi muito alto, não negamos a hipótese de ausência de causalidade.

Agora vou quebrar sua cabeça. Com uma defasagem não rejeitamos, certo? E com três?

grangertest(dataset$diff_taxa_de_desemprego, dataset$diff2_produtividade_do_trabalho, order = 3)
## Granger causality test
## 
## Model 1: dataset$diff2_produtividade_do_trabalho ~ Lags(dataset$diff2_produtividade_do_trabalho, 1:3) + Lags(dataset$diff_taxa_de_desemprego, 1:3)
## Model 2: dataset$diff2_produtividade_do_trabalho ~ Lags(dataset$diff2_produtividade_do_trabalho, 1:3)
##   Res.Df Df      F  Pr(>F)  
## 1     72                    
## 2     75 -3 3.5774 0.01796 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Com três defasagens, há indícios de uma correlação de Granger entre as séries! Como escolher o melhor modelo pode ter sido uma válida pergunta que você tenha feito agora. A resposta para ela nunca é simples, visto que muitas vezes o processo de ajustamento de um modelo advém de muita tentativa e erro até encontrar um modelo que se ajuste bem. Sobre a definição da ordem do modelo VAR, podemos usar os critérios de informação apresentados na seção de modelos ARIMA.

O Critério de Informação de Akaike (AIC) e o Critério de Informação Bayesiano (BIC) são formas de mensurar o ajustamento do modelo. Quanto menor os valores desses critérios, melhor. A diferença entre o AIC e o BIC vem do fato de que o BIC penaliza modelos complexos demais, ou seja, com muitas variáveis. Como modelos VAR utilizam de muitas variáveis eu acho interessante de se utilizar o AIC, mas isso pode depender da natureza do evento estimado.

Veja um comparativo de modelos VAR do evento que estimamos acima, com diferentes ordens (note que eu uso outras 3 métricas para mensurar ajustamento. A ideia delas é igual, quanto menor melhor, mas depois sugiro dar uma olhada!):

temp <- as.data.table(
  t(VARselect(na.omit(dataset[, c("diff_taxa_de_desemprego", "diff2_produtividade_do_trabalho")]), lag.max = 4)$criteria))[, defasagens := 1:4]
setcolorder(temp, c("defasagens", "AIC(n)", "HQ(n)", "SC(n)", "FPE(n)"))

temp %>%
  kbl() %>%
  kable_paper()
defasagens AIC(n) HQ(n) SC(n) FPE(n)
1 -2.414637 -2.342066 -2.233352 0.0894065
2 -2.464820 -2.343867 -2.162678 0.0850540
3 -2.469301 -2.299967 -2.046302 0.0847260
4 -2.436872 -2.219157 -1.893017 0.0876146

Pelo AIC, o melhor modelo seria o terceiro (o valor mais negativo), que usa 3 ordens de defasagem (que vai de encontro com nosso teste de granger!).

Outra forma de medir um bom ajustamento do modelo seria por meio da análise do resíduo da regressão. Um resíduo bem comportado implica num ajustamento adequado do modelo. Lá na seção de ARIMA fizemos esse procedimento! Vamos analisar os resíduos do modelo VAR(3):

model <- VAR(y = na.omit(dataset[, c("diff_taxa_de_desemprego", "diff2_produtividade_do_trabalho")]), p = 3, type = "const")
temp <- dataset[, .(residuos = residuals(model), tempo)]
temp_long <- melt(temp, id.vars = "tempo", value.name = "residuo", variable.name = "equacao")

ggplot(temp_long, aes(tempo, residuo, color = equacao)) +
  geom_line() +
  theme_classic() +
  geom_hline(yintercept = 0, size = 0.2, color = "red")

Os resíduos parecem estacionários. Posso testar a estacionariedade deles pelo teste Dickey-Fuller Aumentado. Além disso, testar normalidade por meio do teste de Shapiro–Wilk, ou analisar o Q-Qplot desses resíduos. Existe um mundo de possibilidades que espero que tenha sido compreendido por você, leitor!

Finalizo essa seção utilizando todas as variáveis da base que apresentei para estimar o melhor modelo que eu puder!

Primeiro, identifico em qual diferença cada série é estacionária. Isso já fiz em cima e é o mesmo procedimento que fiz em todo o documento.

rm(list = setdiff(ls(), "dataset"))

temp <- dataset[, c("diff_taxa_de_desemprego", "diff2_produtividade_do_trabalho",
                    "diff2_empregados_a_cada_1000_pessoas", "diff2_salario_real", "tempo")]
temp %>% 
  kbl() %>%
  kable_paper() %>%
  scroll_box(width = "800px", height = "350px")
diff_taxa_de_desemprego diff2_produtividade_do_trabalho diff2_empregados_a_cada_1000_pessoas diff2_salario_real tempo
NA NA NA NA 1980-01-01
0.17 NA NA NA 1980-04-01
-0.23 -0.0983185 0.3209324 0.4047038 1980-07-01
-0.20 1.2258411 0.5948968 1.0193505 1980-10-01
0.10 0.4300503 0.1250183 -0.6228307 1981-01-01
-0.24 -1.4609153 -0.3453840 0.4561370 1981-04-01
0.27 -0.9676364 -0.9083477 -2.5272136 1981-07-01
0.93 0.7558186 -0.4352332 4.2521779 1981-10-01
0.50 0.9541830 -0.4984795 -1.6650623 1982-01-01
1.60 -0.8954269 -0.5346878 -0.9689212 1982-04-01
1.77 1.1065195 -0.0510651 -0.7269477 1982-07-01
0.57 -0.3898995 1.0051549 0.5264976 1982-10-01
-0.34 1.3183609 1.0397688 -2.6524336 1983-01-01
-0.20 -0.9255356 0.6900916 1.5747577 1983-04-01
-0.53 -0.3898972 0.2153794 -0.5703327 1983-07-01
-0.50 0.7036550 -0.9495794 1.4129253 1983-10-01
0.07 0.5078467 -0.3242171 -0.3211537 1984-01-01
0.20 -0.3786256 0.4183778 -0.8423494 1984-04-01
-0.17 -1.2692891 0.3445394 -0.3022598 1984-07-01
-0.13 1.3882559 -0.4568489 0.7348279 1984-10-01
-0.17 -0.5007247 -0.0281534 0.3338782 1985-01-01
-0.37 -0.4989669 0.5982364 -1.1545203 1985-04-01
-0.36 0.1457562 -0.1094939 -0.1593550 1985-07-01
-0.07 0.4039245 0.0046280 1.7353048 1985-10-01
-0.53 -2.0594913 0.0868274 -1.2060798 1986-01-01
-0.07 1.3984308 -0.4125831 -0.8428271 1986-04-01
0.00 -0.1305676 -0.3470636 0.2521519 1986-07-01
-0.10 -0.0237693 0.2079647 1.8143839 1986-10-01
0.00 2.1274173 0.1260205 -0.6723908 1987-01-01
-0.47 -1.8781277 0.6159746 -1.1737118 1987-04-01
-0.33 0.7519547 -0.3238673 0.0539587 1987-07-01
-0.57 -0.0192255 0.3718500 1.4731095 1987-10-01
-0.26 0.2898115 -0.4173807 -0.2752193 1988-01-01
-0.20 -0.6612158 -0.3442276 -0.7847400 1988-04-01
0.13 0.1866674 -0.2268708 -0.0551733 1988-07-01
-0.07 0.0705198 0.4939411 1.1522024 1988-10-01
-0.16 -0.8770934 0.3233461 0.4357697 1989-01-01
0.00 0.6624056 -1.0559847 -1.6098213 1989-04-01
-0.24 -0.9276452 0.3661295 0.6877808 1989-07-01
0.24 0.2085917 0.0285037 0.6998206 1989-10-01
0.06 -0.1821709 0.1311108 -0.5450286 1990-01-01
-0.03 0.1397829 -0.3674261 -0.1586899 1990-04-01
0.57 -0.1103557 -0.4823371 -1.0179106 1990-07-01
1.03 -0.1438831 -0.6086189 2.2813741 1990-10-01
0.97 -1.4202023 -0.1012413 0.7433925 1991-01-01
0.16 2.2447078 1.1311863 -1.8013420 1991-04-01
0.07 -0.0690608 -0.0622740 -0.6359161 1991-07-01
-0.03 0.6066779 -0.2699947 0.0697909 1991-10-01
0.23 -0.1482868 -0.2514936 0.0573643 1992-01-01
0.40 -0.1648313 0.3126233 0.0769508 1992-04-01
0.40 0.1748368 0.1072695 -0.4288253 1992-07-01
0.33 -0.3722319 0.1686124 0.0913429 1992-10-01
-0.66 -0.3385664 0.3960236 0.4832199 1993-01-01
0.60 1.5402042 -0.5073634 -0.9158749 1993-04-01
-0.20 -1.5543612 0.4178978 0.2054165 1993-07-01
-0.17 0.7379090 -0.1549658 -0.6176702 1993-10-01
-0.33 1.3548462 -0.0601816 1.4752255 1994-01-01
-0.34 -0.7538158 0.6478411 -0.9948640 1994-04-01
-0.53 -0.3891520 0.1455213 -0.1525808 1994-07-01
-0.43 -0.5552928 -0.2166476 0.4444771 1994-10-01
-0.14 -0.2480258 -0.2281710 -0.5458970 1995-01-01
-0.06 0.2746123 -0.7025985 0.3220939 1995-04-01
0.03 0.0612875 0.3125299 0.6778145 1995-07-01
-0.23 0.1270437 0.1379732 -0.7217164 1995-10-01
0.23 -0.9409407 -0.0090678 -0.1790249 1996-01-01
-0.07 0.7171157 -0.0386938 1.4254777 1996-04-01
0.27 1.1626000 -0.1666975 0.2364071 1996-07-01
0.20 -0.4240075 -0.0237963 -1.3781296 1996-10-01
-0.47 -0.9277960 0.8589862 -1.1694970 1997-01-01
-0.13 -0.0865733 -0.1628363 0.5358756 1997-04-01
-0.43 0.3556655 0.2423228 -0.3302474 1997-07-01
-0.10 0.3374012 -0.4512410 2.1991673 1997-10-01
-0.17 -0.5683789 -0.1466306 -0.6010533 1998-01-01
-0.27 -0.6301577 0.3213378 -0.4889141 1998-04-01
-0.16 -0.0661080 0.0723740 -1.3975775 1998-07-01
-0.14 1.3472093 -0.0523832 1.0210549 1998-10-01
-0.13 0.2741147 -0.1506395 0.3586674 1999-01-01
-0.03 -0.5240866 0.0870412 0.0349211 1999-04-01
-0.34 0.5488830 -0.0237588 0.1275177 1999-07-01
-0.60 -0.4098093 0.1183738 -0.5983559 1999-10-01
-0.13 0.6320175 0.1028004 1.3577449 2000-01-01
-0.10 -0.4228349 -0.4534647 -1.2305945 2000-04-01
0.23 -0.3504105 -0.1752351 0.4736152 2000-07-01
-0.06 -1.1288817 0.4910290 -1.0396785 2000-10-01

Cada uma dessas séries no gráfico:

temp_long <- melt(temp, id.vars = "tempo", variable.name = "serie", value.name = "valor")

ggplot(temp_long, aes(tempo, valor, color = serie)) +
  geom_line() +
  theme_classic() +
  geom_hline(yintercept = 0, size = 0.2, color = "gray23")

Defino o número ótimo de defasagens para meu modelo VAR:

temp1 <- as.data.table(
  t(VARselect(na.omit(temp)[, tempo := NULL], lag.max = 4)$criteria))[, defasagens := 1:4]
setcolorder(temp1, c("defasagens", "AIC(n)", "HQ(n)", "SC(n)", "FPE(n)"))

temp1 %>%
  kbl() %>%
  kable_paper()
defasagens AIC(n) HQ(n) SC(n) FPE(n)
1 -4.559586 -4.317680 -3.955301 0.0104738
2 -4.801665 -4.366234 -3.713953 0.0082501
3 -5.250349 -4.621393 -3.679210 0.0053120
4 -5.170243 -4.347763 -3.115677 0.0058470

O melhor modelo pelo AIC foi o VAR(3), os resíduos dele estão estacionários?

model <- VAR(y = na.omit(temp)[, tempo := NULL], p = 3, type = "const")
temp1 <- temp[, .(residuos = residuals(model), tempo)]
temp_long <- melt(temp1, id.vars = "tempo", value.name = "residuo", variable.name = "equacao")

ggplot(temp_long, aes(tempo, residuo, color = equacao)) +
  geom_line() +
  theme_classic() +
  geom_hline(yintercept = 0, size = 0.2, color = "red") +
  facet_wrap(~ equacao) + 
  theme(legend.position = "none")

Pela análise gráfica, as equações do modelo apresentam resíduos estacionários, com média 0. São normalizados?

ggplot(temp_long, aes(sample = residuo, color = equacao)) +
  stat_qq() +
  stat_qq_line(color = "gray23") +
  theme_classic() +
  labs(y = "residuos X distribuição normal") +
  facet_wrap(~ equacao) +
  theme(legend.position = "none")

Os resíduos parecem seguir uma distribuição normal, pela análise do QQ-plot.

A equação de um modelo VAR(3), para o salário real, tem as seguintes estimações:

as.data.table(broom::tidy(VAR(y = na.omit(temp)[, tempo := NULL], p = 3, type = "const")))[order(group, term)][group == "diff2_salario_real"] %>% 
  kbl() %>%
  kable_paper() %>%
  scroll_box(width = "800px", height = "600px")
group term estimate std.error statistic p.value
diff2_salario_real const -0.0071487 0.0377912 -0.1891619 0.8505464
diff2_salario_real diff2_empregados_a_cada_1000_pessoas.l1 -0.5088296 0.1257016 -4.0479169 0.0001381
diff2_salario_real diff2_empregados_a_cada_1000_pessoas.l2 -0.2954479 0.1229848 -2.4023112 0.0191132
diff2_salario_real diff2_empregados_a_cada_1000_pessoas.l3 -0.1189037 0.1076962 -1.1040657 0.2735737
diff2_salario_real diff2_produtividade_do_trabalho.l1 -0.0653328 0.0553184 -1.1810301 0.2418293
diff2_salario_real diff2_produtividade_do_trabalho.l2 -0.0057731 0.0594723 -0.0970717 0.9229636
diff2_salario_real diff2_produtividade_do_trabalho.l3 -0.0170697 0.0546377 -0.3124164 0.7557091
diff2_salario_real diff2_salario_real.l1 -0.0416679 0.0428116 -0.9732848 0.3339655
diff2_salario_real diff2_salario_real.l2 -0.0017265 0.0464304 -0.0371849 0.9704498
diff2_salario_real diff2_salario_real.l3 -0.0009579 0.0410901 -0.0233122 0.9814716
diff2_salario_real diff_taxa_de_desemprego.l1 0.1176640 0.1500378 0.7842289 0.4357115
diff2_salario_real diff_taxa_de_desemprego.l2 0.1801356 0.1506287 1.1958910 0.2360180
diff2_salario_real diff_taxa_de_desemprego.l3 0.2452473 0.1433135 1.7112645 0.0917286

Como somente diff2_empregados_a_cada_1000_pessoas foi significativa na determinação do salário real, vou gerar um VAR(3) usando somente essas séries temporais.

model <- VAR(y = na.omit(temp)[, c("diff2_salario_real", "diff2_empregados_a_cada_1000_pessoas")], p = 3, type = "const")

as.data.table(broom::tidy(model))[order(group, term)][group == "diff2_salario_real"] %>% 
  kbl() %>%
  kable_paper() %>%
  scroll_box(width = "800px", height = "600px")
group term estimate std.error statistic p.value
diff2_salario_real const -0.0924045 0.0951995 -0.9706405 0.3349768
diff2_salario_real diff2_empregados_a_cada_1000_pessoas.l1 -0.6532302 0.2274479 -2.8719991 0.0053546
diff2_salario_real diff2_empregados_a_cada_1000_pessoas.l2 -0.0529673 0.2317197 -0.2285834 0.8198407
diff2_salario_real diff2_empregados_a_cada_1000_pessoas.l3 0.2219781 0.2315157 0.9588038 0.3408663
diff2_salario_real diff2_salario_real.l1 -0.6975735 0.1016568 -6.8620469 0.0000000
diff2_salario_real diff2_salario_real.l2 -0.5534004 0.1077126 -5.1377497 0.0000023
diff2_salario_real diff2_salario_real.l3 -0.4902077 0.0992899 -4.9371347 0.0000050

Será que existe causalidade de Granger entre as séries?

grangertest(dataset$diff2_empregados_a_cada_1000_pessoas, dataset$diff2_salario_real, order = 3)
## Granger causality test
## 
## Model 1: dataset$diff2_salario_real ~ Lags(dataset$diff2_salario_real, 1:3) + Lags(dataset$diff2_empregados_a_cada_1000_pessoas, 1:3)
## Model 2: dataset$diff2_salario_real ~ Lags(dataset$diff2_salario_real, 1:3)
##   Res.Df Df      F  Pr(>F)  
## 1     72                    
## 2     75 -3 3.5525 0.01851 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Parece que sim! Então meu modelo final conta com componentes defasados da própria série e de diff2_empregados_a_cada_1000_pessoas.

As projeções desse modelo na série original, para 10 períodos de tempo a frente foram:

previsoes <- predict(model, n.ahead = 10)$fcst$diff2_salario_real

previsoes_em_nivel <- diffinv(c(na.omit(dataset)$diff2_salario_real, previsoes[,1]), lag = 1, differences = 2, xi = dataset$salario_real[1:2])
previsoes_em_nivel <- tail(previsoes_em_nivel, 10)

minimo_em_nivel <- diffinv(c(na.omit(dataset)$diff2_salario_real, previsoes[,2]), lag = 1, differences = 2, xi = dataset$salario_real[1:2])
minimo_em_nivel <- tail(minimo_em_nivel, 10)

maximo_em_nivel <- diffinv(c(na.omit(dataset)$diff2_salario_real, previsoes[,3]), lag = 1, differences = 2, xi = dataset$salario_real[1:2])
maximo_em_nivel <- tail(maximo_em_nivel, 10)

dados_previsao <- data.table(tempo = seq(as.Date("2001-01-01"), by = "quarter", length.out = 10),
                             previsto = previsoes_em_nivel,
                             minimo = minimo_em_nivel,
                             maximo = maximo_em_nivel)

ggplot(dataset) +
  geom_line(aes(x = tempo, y = salario_real), color = "steelblue", size = 0.4) +
  geom_line(data = dados_previsao, aes(tempo, previsto), color = "indianred2") +
  scale_y_continuous(labels = scales::number_format()) +
  geom_ribbon(data = dados_previsao, aes(tempo, ymin = minimo, ymax = maximo), alpha = 0.5, fill = "indianred1") + 
  theme_classic()

Note que quanto mais a frente, maior o intervalo de confiança da previsão, indicando o que se espera de uma série temporal: prever o que está mais perto é mais fácil que prever o que está mais longe de ocorrer.

Caso houvessem séries cointegradas nesse modelo, deveria ter estimado um VAR com um mecanismo de correção o Modelo Vetorial de Correção de Erros (VEC), que não entrarei nos detalhes desse documento por ser um pouco mais teórico.

14 Considerações finais.

Espero que eu tenha lhe ajudado a melhor compreender os principais conceitos e métodos de modelagem de séries temporais. Caso você tenha interesse, sugiro aprender a modelar séries temporais com recursos computacionais, essa é a área do Aprendizado de Máquina, ou em inglês, o famoso Machine Learning. Essas técnicas utilizam de poder computacional para encontrar relações nos dados e retornam resultados tão precisos quanto ou até melhores do que os resultados dos modelos apresentados nesse documento.

Esse documento foi gerado por meio de um script .Rmd, que é basicamente uma combinação da linguagem R com o Markdown. Todas as linhas de código que eu executar estarão “escondidas” dentro de um botão preto escrito code. Como esse documento tem objetivo de apresentar as diferentes abordagens e objetivos da econometria de séries de tempo, utilizo o R por me dar maior liberdade, mas durante monitorias posso apresentar uma forma de gerar resultados via gretl. (ainda recomendo aprender R!)

Caso tenha alguma dúvida, critica ou elogio (sempre bom esse último aí) não exite em me mandar mensagem. Eu tento ao máximo “simplificar” o conteúdo, mas com certeza é uma matéria bem complexa, principalmente sem um contexto de como todo o processo funciona. Bons estudos!