Módulo 5 - Introdução à modelagem de séries temporais

Até agora, aprendemos a explorar e descrever séries temporais, identificando se uma série possui tendência, sazonalidade ou se é estacionária. Também vimos como transformações podem ser úteis para preparar os dados antes da modelagem. Mas como podemos ir além da descrição e utilizar esses dados para prever cenários futuros e apoiar a tomada de decisão na vigilância em saúde?

Neste módulo, vamos explorar um dos modelos mais amplamente utilizados para análise e previsão de séries temporais: o ARIMA. Esse modelo é essencial na vigilância epidemiológica, pois permite não apenas identificar padrões nos dados temporais, mas também projetar tendências futuras, ajudando a prever o comportamento de doenças e orientar ações de saúde pública. Por exemplo, ele pode ser usado para antecipar aumentos nos casos de uma doença com base em dados históricos, auxiliando no planejamento de recursos e respostas mais eficazes.

Além do ARIMA, veremos uma introdução aos Modelos Aditivos Generalizados (GAM), uma abordagem mais flexível que permite capturar relações não lineares nos dados. Essa técnica é útil para análises mais detalhadas, especialmente quando os padrões observados não seguem um comportamento estritamente linear.

Ao final deste módulo, você compreenderá como esses modelos podem ser aplicados na prática para monitoramento de doenças, previsão de surtos e planejamento de intervenções em saúde pública. Vamos lá?

Modelo Box & Jenkins - o modelo ARIMA

Os modelos ARIMA foram introduzidos e popularizados por George Box e Gwilym Jenkins, em 1970, e são descritos no livro “Time Series Analysis: Forecasting and Control, dos autores (Figura 32).

Figura 32: Livro Time Series Analysis: Forecasting and Control (1970) e os autores George Box e Gwilym Jenkins.

Figura 32: Livro *Time Series Analysis: Forecasting and Control* (1970) e os autores George Box e Gwilym Jenkins.

A sigla ARIMA resume a estrutura básica do modelo: é composta por termos autorregressivos (AR), por termos de diferenciação (ou Integração, I) e de médias móveis (MA, do inglês moving averages). Logo, um modelo ARIMA pode sempre ser descrito pela forma ARIMA(p,d,q), de forma que p, d e q representam a ordem de cada um desses termos (Figura 33).

Figura 33: Termos de um modelo ARIMA.

Figura 33: Termos de um modelo ARIMA.


A seguir vamos nos debruçar sobre o que cada um desses termos representam.


Termo AR (autorregressivo)

O termo AR (autorregressivo) se refere à dependência que a série temporal possui de seus próprios valores passados. Ou seja, por meio dele incluímos a relação do valor da série em um momento t com seu valor no momento t1, ou no t2, e assim em diante. Como um exemplo prático, podemos dizer que o número de casos de covid-19 em um município em uma determinada semana depende do número de casos da semana anterior e do número de casos de duas semanas atrás.

O termo p se refere à ordem do termo autorregressivo, de forma que um modelo AR(1) se refere à dependência da série com seu valor imediatamente anterior e um AR(2) se refere à dependência com os últimos dois valores.

Matematicamente, expressamos uma série com termo autorregressivo como:

Zt=c+ϕ1Zt1+ϕ2Zt2++ϕpZtp+at

Na qual:

  • c é uma constante, representando a média do processo temporal;
  • Os parâmetros ϕ são os coeficientes que indicam o peso da relação com cada valor no passado;
  • Zt1,,Ztp representam os valores da série nos momentos passados;
  • at é o erro aleatório.

Agora vamos conferir na Figura 34 exemplos de duas séries com estruturas autorregressivas, uma AR(1) e outra AR(2):

Figura 34: Exemplos de séries AR(p).

Figura 34: Exemplos de séries AR(p).


Apenas visualmente não conseguimos identificar se uma série é AR(1) ou AR(2). Porém, no geral, espera-se que uma série AR(1) seja mais suave, onde valores altos tendem a ser seguidos por valores altos. Em uma série AR(2), espera-se mais oscilações devido ao impacto da dependência dos valores há dois tempos anteriores.

Não precisaremos identificar visualmente, para cada série temporal, se ela se trata de um AR(1), AR(2) ou outro AR(p) qualquer. Atualmente, existem técnicas de identificação automática dessas estruturas do modelo que facilitam o processo de modelagem e sobre as quais veremos mais adiante.

Termo MA (médias móveis)

O termo de médias móveis (MA) no modelo ARIMA se refere à dependência de um determinado valor da série com os erros aleatórios passados. Ou seja, ao invés de tratar da relação com os valores passados como faz o termo AR, o termo MA se refere à relação com os erros (diferença entre os valores ajustados pelo modelo e os valores observados) no passado.

Apesar do nome, o termo de médias móveis (MA) NÃO deve ser confundido com a estratégia de suavização por médias móveis vista nos módulos anteriores! Aqui trata-se de outro contexto: é uma relação entre o erro da série em um determinado instante com os erros nos momentos passados.


Os modelos MA também possuem um parâmetro que define sua ordem: o parâmetro q, que define até que ponto da série essa dependência existe. Assim, matematicamente o definimos como:

Zt=c+atθ1at1θ2at2...θpatq

Agora, além do erro aleatório do momento t (at), introduzimos a dependência dos erros aleatórios anteriores: at1,,atq. Os parâmetros θ representam o peso de cada erro passado, de forma similar aos ϕ nos modelos AR. No entanto, os termos são definidos por convenção com o sinal negativo (-). Vamos ver um exemplo prático para clarear.

Exemplo prático

Imagine que temos uma série temporal do número de atendimentos em uma determinada unidade de saúde. Em um cenário de surto de diarreia na comunidade, por exemplo, pode ser que haja uma diferença entre o valor esperado de atendimentos e o valor observado, exatamente devido a esse aumento repentino e específico. Essa diferença seria capturada pelo erro da série: a diferença entre os valores ajustados e observados. Como no momento seguinte a esse aumento repentino a comunidade provavelmente ainda está sob os efeitos do mesmo surto, podemos esperar que haja também um aumento além do esperado de atendimentos no dia seguinte: ou seja, essa dependência que o valor atual da série possui em relação aos erros dos dias anteriores permanece e pode ser capturada através de um termo MA(p).

A Figura 35 apresenta duas séries temporais exemplificando séries MA(1) e MA(2).

Figura 35: Exemplos de séries MA(p).

Figura 35: Exemplos de séries MA(p).


Novamente, vemos que não é simples identificar a ordem da média móvel das séries de forma visual (e nem deve ser nosso objetivo!), mas podemos dizer que, em termos gerais, esperamos oscilações mais complexas em um modelo MA(2) devido à dependência dos dois erros anteriores. Os exemplos são apenas ilustrativos e não é nossa tarefa identificar visualmente qual estrutura (AR, MA, ou as duas) está presente na série e qual a ordem dos termos p e q.


Termo I (diferenciação)

Agora que aprendemos sobre os termos autorregressivos e médias móveis, já temos material para modelar séries estacionárias em função de termos AR(p) e termos MA(q). Mas… somente séries estacionárias? Recapitulando dos módulos anteriores:

Uma série temporal é considerada estacionária quando seus valores flutuam aleatoriamente ao redor de uma média constante, com uma variância também constante. Ou seja, séries que possuem tendência já são consideradas não estacionárias, pois sua média varia ao longo do tempo.


Assim, séries não estacionárias não podem ser modeladas apenas com os termos AR(p) e MA(q), dado o requisito de estacionariedade. É aí que entra o terceiro componente do modelo ARIMA: a diferenciação (I).

O termo I(d) do modelo é responsável por aplicar, uma ou mais vezes, o procedimento de diferenciação sobre a série, com o intuito de torná-la estacionária caso não seja. Como vimos no primeiro módulo, a operação de diferenciação nada mais é que o cálculo das diferenças de uma observação da série para outra. A Figura 36 mostra uma série não estacionária antes e depois da diferenciação.

Figura 36: Diferenciação (B) de uma série não estacionária (A)

Figura 36: Diferenciação (B) de uma série não estacionária (A)


No termo de diferenciação I(d), d indica o grau de diferenciação que é o número de vezes em que a operação de diferenciação será realizada - geralmente uma ou duas vezes são suficientes. A diferenciação é essencial para adaptar as séries reais e torná-las aptas à modelagem.


Ajustando nosso primeiro modelo

Agora sim já sabemos tudo que é preciso para ajustar nosso primeiro modelo ARIMA(p,d,q).

Para isso, vamos ler os dados de novos casos de tuberculose por mês no Rio de Janeiro-RJ, mostrados na Figura 37:

library(tidyverse)

tb_rio <- read.csv2("https://raw.githubusercontent.com/
joaohmorais/dados-mod-temp/refs/heads/main/csv/tb_rio_2007_2023.csv"
) head(tb_rio) # primeiras observacoes
#>   ano_diagnostico mes_diagnostico   n

#> 1            2007             Jan 636

#> 2            2007             Fev 487

#> 3            2007             Mar 665

#> 4            2007             Abr 591

#> 5            2007             Mai 593

#> 6            2007             Jun 543
tail(tb_rio) # últimas observacoes
#>     ano_diagnostico mes_diagnostico   n

#> 199            2023             Jul 851

#> 200            2023             Ago 933

#> 201            2023             Set 791

#> 202            2023             Out 833

#> 203            2023             Nov 818

#> 204            2023             Dez 794

Vamos transformar o objeto em uma série temporal por meio da função ts().

tb_rio_ts <- ts(tb_rio$n,  # informação de casos: coluna "n"

                start = c(2007, 1), # início da série: Jan de 2007

                end = c(2023,12), # fim da série: Dez de 2023

                frequency = 12) # frequência da série: mensal 
plot(tb_rio_ts, 

     main = "Casos de TB por mês de diagnóstico\nRio de Janeiro-RJ, 2007-2023",

     ylab="Casos",

     xlab="Mês")

Figura 37: Série de casos de tuberculose, por mês de diagnóstico, no Rio de Janeiro-RJ. 2007-2023

Figura 37: Série de casos de tuberculose, por mês de diagnóstico, no Rio de Janeiro-RJ. 2007-2023

Neste momento, fique à vontade para utilizar as técnicas vistas nos módulos anteriores para explorar e decompor a série, verificando a existência de componentes como tendência e sazonalidade. Esse processo ajudará a compreender os termos do modelo; se houver tendência, por exemplo, esperamos que o modelo ARIMA utilizado possua um grau de diferenciação d>0.

Vamos ajustar nosso primeiro modelo ARIMA! Para isso, vamos utilizar a função arima(), nativa do R. Há funções de outros pacotes que também possibilitam o ajuste de modelos ARIMA no R, mas trataremos disso mais adiante.

Por meio do parâmetro order, especificamos os valores p (ordem da parte autorregressiva), d (grau de diferenciação) e q (ordem da média móvel) do modelo. Vamos ajustar um ARIMA(1,1,0), ou seja, com um termo autorregressivo de ordem um, um grau de diferenciação e nenhum termo de média móvel:

arima_tb1 <- arima(

  tb_rio_ts,

  order = c( # Aqui no parâmetro order definimos a ordem dos termos

    1, # p = 1

    1, # d = 1

    0 # q = 0

  )

)
  • A função arima() implementa um modelo de séries temporais ARIMA (Autoregressive Integrated Moving Average) para o objeto tb_rio_ts. O modelo é configurado com os seguintes parâmetros:

    • p = 1: indica que o modelo inclui 1 termo autorregressivo.
    • d = 1: indica que a série é diferenciada uma vez para torná-la estacionária.
    • q = 0: indica que o modelo não inclui termos de médias móveis.
  • O objeto arima_tb1 armazena o modelo ajustado.

Pronto! Temos nosso primeiro modelo ARIMA. Vamos chamar o resumo do modelo:

arima_tb1 # visualizando um resumo do modelo
#> 

#> Call:

#> arima(x = tb_rio_ts, order = c(1, 1, 0))

#> 

#> Coefficients:

#>           ar1

#>       -0.6249

#> s.e.   0.0549

#> 

#> sigma^2 estimated as 5658:  log likelihood = -1165.34,  aic = 2334.67

No resumo, vemos o coeficiente estimado (ϕ1) para o termo autorregressivo em Coefficients: ar1 e seu erro padrão (s.e.). Outro valor importante é o valor de aic, que expressa a qualidade de ajuste do modelo. Trataremos dele mais a frente, mas, por enquanto, vamos frisar a ideia de quanto menor o valor de aic, melhor o ajuste do modelo.

Agora vamos ver os valores ajustados pelo modelo comparado com a série original (Figura 38).

ajustados_tb1 <- tb_rio_ts - residuals(arima_tb1)



plot(tb_rio_ts, 

     main = "Casos de TB por mês de diagnóstico \nRio de Janeiro-RJ, 2007-2023",

     ylab="Casos",

     xlab="Mês")

lines(ajustados_tb1, col = "red")

legend("topleft",

       legend = c("Série original", "ARIMA(1,1,0) - Valores ajustados"),

       col = c("black", "red"),

       lty = c(1, 1),

       cex = 1)

Figura 38: Série de TB e valores ajustados pelo primeiro modelo ARIMA

Figura 38: Série de TB e valores ajustados pelo primeiro modelo ARIMA

As linhas de comando realizam as seguintes ações:

  • ajustados_tb1 <- tb_rio_ts - residuals(arima_tb1): Calcula os valores ajustados do modelo ARIMA subtraindo os resíduos do modelo (residuals(arima_tb1)) da série original tb_rio_ts. O resultado é armazenado no objeto ajustados_tb1.

  • plot(tb_rio_ts, ...): Plota a série temporal original tb_rio_ts, configurando o título e os rótulos dos eixos (ylab e xlab).

  • lines(ajustados_tb1, col = "red"): Adiciona uma linha ao gráfico representando os valores ajustados pelo modelo ARIMA, em vermelho.

  • legend(...): Insere uma legenda no canto superior esquerdo (“topleft”) do gráfico. A legenda descreve as linhas do gráfico: a série original é exibida em preto, e os valores ajustados pelo modelo ARIMA (1,1,0) são exibidos em vermelho.

Resumindo, este script compara visualmente os dados observados (série original) com os valores ajustados pelo modelo ARIMA.

Porém, será que um modelo com um termo de médias móveis (MA) não seria mais adequado? Vamos experimentar, ajustando um ARIMA(1,1,1):

arima_tb2 <- arima(

  tb_rio_ts,

  order = c( # Aqui no parâmetro order definimos a ordem dos termos

    1, # p = 1

    1, # d = 1

    1 # q = 1

  )

)

arima_tb2
#> 

#> Call:

#> arima(x = tb_rio_ts, order = c(1, 1, 1))

#> 

#> Coefficients:

#>           ar1      ma1

#>       -0.2453  -0.7444

#> s.e.   0.0884   0.0718

#> 

#> sigma^2 estimated as 4529:  log likelihood = -1143.09,  aic = 2292.18
  • A função arima() ajusta um modelo ARIMA à série temporal tb_rio_ts, com os parâmetros order = c(1, 1, 1). Isso configura o modelo para incluir:

    • p = 1: um termo autorregressivo,
    • d = 1: uma diferenciação para tornar a série estacionária,
    • q = 1: um termo de média móvel.
  • O modelo ajustado é atribuído ao objeto arima_tb2.

  • A chamada ao objeto arima_tb2 exibe um resumo do modelo ajustado, mostrando os parâmetros estimados, erros padrão e medidas de ajuste.

Ao chamar o resumo para o modelo ARIMA(1,1,1), vemos que o valor de aic exibido é menor que o visto para o primeiro modelo ARIMA(1,1,0), indicando que o segundo modelo ajustado, incluindo um termo MA, é melhor.

Vamos visualizar os valores ajustados pelos dois modelos (ARIMA(1,1,0) e ARIMA(1,1,1)) comparado com a série original na Figura 39.

Figura 39: Série de TB e valores ajustados pelos modelos ARIMA.

Figura 39: Série de TB e valores ajustados pelos modelos ARIMA.

Ótimo! Mas será que esse é o melhor modelo dentre todas as opções? E quanto aos modelos com graus maiores de AR, como AR(2) em diante? Ou ainda, modelos sem nenhum termo autoregressivo, considerando apenas médias móveis? E os diferentes valores para o termo de médias móveis (q) que ainda não testamos? São muitas possibilidades!

A escolha do modelo é um passo essencial para garantir a qualidade da análise de séries temporais. Um modelo mal ajustado pode levar a previsões distorcidas, influenciando decisões questionáveis e que foram baseadas nesses resultados. Ajustar diferentes modelos ARIMA e comparar seus desempenhos nos permite identificar aquele que melhor se adapta ao nosso objetivo, minimizando erros e proporcionando maior confiança nas interpretações.

Historicamente, o processo de modelagem com modelos ARIMA envolvia uma seleção manual dos parâmetros, com base na análise dos gráficos de autocorrelação (ACF) e autocorrelação parcial (PACF). Esse processo exigia um olhar criterioso do analista para determinar quais termos (AR, I, e MA) eram mais adequados para representar os dados. No entanto, com o avanço computacional, métodos automatizados passaram a permitir o ajuste automático de um grande número de combinações de parâmetros, comparando os modelos por meio de métricas estatísticas. Vamos conhecer um pouco desse processo.


Ajuste automático de modelos ARIMA

Uma forma de realizarmos esse ajuste automático, que compara diferentes modelos e retorna o melhor entre eles, é com o comando auto.arima() da biblioteca forecast. Vamos carregá-la. Se precisar, instale-a previamente utilizando a função install.packages().

library(forecast)

Agora vamos aplicar o ajuste automático à nossa série de tuberculose:

arima_tb_auto <- auto.arima(

  tb_rio_ts,

  seasonal = FALSE, 

  # parâmetro que indica se modelos sazonais serão incluídos ou não

  # (iremos ver sobre isso mais a frente)

  approximation = FALSE,

  # parâmetro que determina se aproximações serão utilizadas no 

  # processo de ajuste automático

  trace = TRUE

  # o parâmetro trace = T é utilizado apenas para exibir os modelos testados

)
#> 

#>  ARIMA(2,1,2)            with drift         : 2296.159

#>  ARIMA(0,1,0)            with drift         : 2434.442

#>  ARIMA(1,1,0)            with drift         : 2336.676

#>  ARIMA(0,1,1)            with drift         : 2296.235

#>  ARIMA(0,1,0)                               : 2432.415

#>  ARIMA(1,1,2)            with drift         : 2294.289

#>  ARIMA(0,1,2)            with drift         : 2294.223

#>  ARIMA(0,1,3)            with drift         : Inf

#>  ARIMA(1,1,1)            with drift         : 2292.633

#>  ARIMA(2,1,1)            with drift         : Inf

#>  ARIMA(2,1,0)            with drift         : 2306.826

#>  ARIMA(1,1,1)                               : 2292.302

#>  ARIMA(0,1,1)                               : 2297.803

#>  ARIMA(1,1,0)                               : 2334.732

#>  ARIMA(2,1,1)                               : 2293.651

#>  ARIMA(1,1,2)                               : 2294.159

#>  ARIMA(0,1,2)                               : 2293.957

#>  ARIMA(2,1,0)                               : 2305.009

#>  ARIMA(2,1,2)                               : 2295.484

#> 

#>  Best model: ARIMA(1,1,1)
  • A função auto.arima() é utilizada para ajustar automaticamente um modelo ARIMA à série temporal tb_rio_ts. O ajuste é feito testando diferentes combinações de parâmetros até encontrar o melhor modelo com base em critérios de ajuste, como o AIC (Akaike Information Criterion).

  • O parâmetro seasonal = FALSE especifica que não serão considerados componentes sazonais no modelo.

  • O parâmetro approximation = FALSE define que não serão utilizadas aproximações durante o processo de ajuste automático, garantindo maior precisão no ajuste, embora possa aumentar o tempo de execução computacional.

  • O parâmetro trace = TRUE exibe na saída do console os modelos que estão sendo testados, permitindo acompanhar o processo de seleção do modelo.

  • O modelo ajustado é armazenado no objeto arima_tb_auto.

Pronto! Após comparar vários modelos, o processo de ajuste automático indicou que o modelo ARIMA(1,1,1), com p=1 (um termo autorregressivo com dependência do valor anterior), d=1 (diferenciação de primeira ordem, para remover a tendência) e q=1 (um termo de média móvel, considerando o erro do valor anterior), é de fato o melhor modelo entre os que testamos.

No entanto, será que esse modelo é o mais adequado para nossa análise? Escolher um modelo estatisticamente ótimo não significa que ele seja o mais útil ou confiável para a aplicação prática. Precisamos verificar se ele realmente representa bem os dados e se suas previsões são coerentes com o contexto da série temporal. Para isso, vamos verificar a qualidade do ajuste e a análise dos resíduos, garantindo que o modelo escolhido seja não apenas o melhor em termos numéricos, mas também o mais adequado para descrever a série e gerar previsões confiáveis.

Mas, antes, vamos tratar de um outro ponto importante: e quando a série apresenta sazonalidade?


E a sazonalidade?

Como visto no módulo anterior, as séries temporais podem possuir um componente importante para seu entendimento e predição: a sazonalidade. Principalmente em vigilância em saúde, é comum lidar com situações que apresentem fluxos sazonais, como casos de influenza com picos no inverno. Essa componente ainda não seria capturada pelos termos do modelo ARIMA que vimos até agora: autorregressivo, diferenciação e médias móveis. Por isso, existe uma extensão do modelo ARIMA que chamamos de SARIMA (Seasonal ARIMA).

A diferença do SARIMA é que o mesmo possui termos que se referem à dependência temporal sazonal: componente autorregressivo sazonal, diferenciação sazonal e médias móveis sazonais. Neste caso, esses termos não dizem respeito às observações imediatamente prévias (como casos nas últimas semanas ou meses), mas sim às observações do último período, na mesma época (ex.: casos no mesmo mês, mas no ano anterior).

Dessa forma, nosso modelo SARIMA possui a seguinte notação: SARIMA(p,d,q)(P,D,Q)m, em que, além dos parâmetros já conhecidos, temos:

  • m, que se refere ao número de períodos da série. Ou seja, para séries mensais: m=12 e semanais, m=52;
  • P, a ordem do termo autorregressivo sazonal;
  • D, o número de diferenciações sazonais;
  • Q, a ordem de médias móveis sazonais.

Ou seja, agora além dos termos não sazonais (de ordem p, d e q) que conhecíamos temos termos semelhantes, de ordens P, D e Q e que tratam da dependência sazonal presente nos dados.


Nosso primeiro modelo SARIMA

Agora vamos testar modelar os casos de Síndrome Respiratória Aguda Grave (SRAG) no Estado do Paraná.

# Carregando o arquivo csv

srag_pr_mes <- read.csv(file = "https://raw.githubusercontent.com/
joaohmorais/dados-mod-temp/main/csv/srag_PR_mes.csv"
) # Vendo os dados head(srag_pr_mes)
#>    ano mes    n

#> 1 2013   1   54

#> 2 2013   2   66

#> 3 2013   3  108

#> 4 2013   4  291

#> 5 2013   5  718

#> 6 2013   6 1037

Assim como feito anteriormente, vamos transformar os dados para a classe ts:

# Convertendo os dados para um objeto de classe ts

srag_pr_ts <- ts(

  data = srag_pr_mes$n, # variavel que indica o número de casos

  start = c(2013, 1), # início da série - Janeiro de 2013

  frequency = 12 # frequência da série: mensal

)
  • A função ts() está sendo utilizada para converter os dados do objeto srag_pr_mes em uma série temporal (ts), atribuindo-o ao objeto srag_pr_ts.

  • data = srag_pr_mes$n: define a variável n (número de casos) como os valores da série.

  • start = c(2013, 1): especifica que a série começa em janeiro de 2013. frequency = 12: indica que a série tem periodicidade mensal (12 observações por ano).

Como já vimos nos exemplos dos módulos anteriores, sabemos que essa série possui forte componente sazonal. Vamos, de forma similar à realizada anteriormente, ajustar um modelo ARIMA automático para a série:

arima_srag_auto <- auto.arima(

  srag_pr_ts,

  approximation = F,

  trace = T

)
#> 

#>  ARIMA(2,0,2)(1,1,1)[12] with drift         : 654.3544

#>  ARIMA(0,0,0)(0,1,0)[12] with drift         : 699.8139

#>  ARIMA(1,0,0)(1,1,0)[12] with drift         : 647.817

#>  ARIMA(0,0,1)(0,1,1)[12] with drift         : 661.9244

#>  ARIMA(0,0,0)(0,1,0)[12]                    : 697.7201

#>  ARIMA(1,0,0)(0,1,0)[12] with drift         : 654.6888

#>  ARIMA(1,0,0)(1,1,1)[12] with drift         : 650.234

#>  ARIMA(1,0,0)(0,1,1)[12] with drift         : 648.6853

#>  ARIMA(0,0,0)(1,1,0)[12] with drift         : 692.905

#>  ARIMA(2,0,0)(1,1,0)[12] with drift         : 648.6875

#>  ARIMA(1,0,1)(1,1,0)[12] with drift         : 649.2379

#>  ARIMA(0,0,1)(1,1,0)[12] with drift         : 664.935

#>  ARIMA(2,0,1)(1,1,0)[12] with drift         : Inf

#>  ARIMA(1,0,0)(1,1,0)[12]                    : 645.4911

#>  ARIMA(1,0,0)(0,1,0)[12]                    : 652.4155

#>  ARIMA(1,0,0)(1,1,1)[12]                    : 647.8075

#>  ARIMA(1,0,0)(0,1,1)[12]                    : 646.3493

#>  ARIMA(0,0,0)(1,1,0)[12]                    : 690.9641

#>  ARIMA(2,0,0)(1,1,0)[12]                    : 646.2652

#>  ARIMA(1,0,1)(1,1,0)[12]                    : 646.8091

#>  ARIMA(0,0,1)(1,1,0)[12]                    : 662.8793

#>  ARIMA(2,0,1)(1,1,0)[12]                    : 647.8045

#> 

#>  Best model: ARIMA(1,0,0)(1,1,0)[12]
  • A função auto.arima() é utilizada para ajustar automaticamente um modelo ARIMA à série temporal srag_pr_ts.

  • O parâmetro approximation = F desativa o uso de aproximações durante a seleção do modelo, garantindo maior precisão no ajuste.

  • O parâmetro trace = T habilita a exibição de informações detalhadas no console sobre os diferentes modelos testados durante o processo de seleção automática.

O resultado é um modelo ARIMA otimizado, armazenado no objeto arima_srag_auto, baseado no critério de ajuste (como AIC ou BIC) para identificar a melhor combinação de termos autorregressivos (p), diferenciações (d) e de médias móveis (q).

Como esperado, vemos que o melhor modelo encontrado pela função possui termos sazonais: ARIMA(1,0,0)(1,1,0).

Levar em conta a sazonalidade é essencial para capturar as estruturas presentes em diversas séries temporais que envolvem a rotina da vigilância. Agora, antes de tentar obter previsões com os modelos obtidos, precisamos realizar avaliar a qualidade do ajuste.