Sem título-5_Prancheta 1

Introdução às Séries Temporais

Uma série temporal é um conjunto de observações de uma variável de interesse tomadas ao longo do tempo. Utilizando a relação de dependência (ou correlação) que uma observação da série apresenta com relação às anteriores, pode-se construir modelos para esta série e, com eles, gerar previsões para os próximos valores que ela pode assumir.

Artigo escrito com a colaboração de Maria Luisa Gomes dos Reis

Séries temporais são um conjunto de observações de uma variável de interesse tomadas ao longo do tempo. Utilizando a relação de dependência (ou correlação) que uma observação da série apresenta com relação às anteriores, pode-se construir modelos para esta série e com eles, gerar previsões para os próximos valores que ela pode assumir. Para o ajuste de tais modelos, é necessário estudar o comportamento da série a fim de descobrir quais são suas principais características e realizar a modelagem mais adequada.

Caracterizando a série temporal

Uma característica importante das séries temporais é a estacionariedade. Quando uma série apresenta média, variância e autocorrelação constantes ao longo do tempo, ela pode ser dita estacionária. Um exemplo simulado de como este tipo de série se comporta é apresentado no gráfico abaixo.

exemplo simulado de como esse tipo de série se comporta

Se uma série Yt, além de ser estacionária, for normal e apresentar média e autocorrelação iguais a zero (ou seja, suas observações são independentes e identicamente distribuídas com média zero e variância constante), ela é chamada de ruído branco.

Além disso, as séries temporais podem apresentar algumas componentes que caracterizam seu comportamento:

  • Nível (μt): é a média da série no tempo t, ou seja, E(Yt) = μt. Vale notar que quando μt é uma constante e não depende de t, a série é dita estacionária em média.
  • Tendência (Tt): descreve o comportamento geral da série, ou seja, se seus valores tendem a aumentar ou a decair com o passar do tempo.
gráfico da taxa anual de incidência de melanoma em Connecticut
  • Sazonalidade (St): descreve comportamentos que se repetem periodicamente em intervalo de tempo inferior a um ano, comumentemente relacionados às estações do ano e ao comportamento das populações estudadas.
gráfico sobre total de garrafas de vinho de menos de 1L vendidas na Austrália
  • Ciclo: também descreve um comportamento periódico, porém desta vez com duração superior a um ano.
  • Autocorrelação (ρk): mede o quanto a observação no tempo t está correlacionada com a observação no tempo t−k.
  • Erro (εt): é a variabilidade presente na série que não pode ser explicada pelo modelo ajustado.

Com base nestas definições, podemos também notar que:

  • Uma série estacionária é aquela que não apresenta tendência, sazonalidade ou ciclo.
  • O erro εt de uma série temporal é um ruído branco, uma vez que εi~i.i.d N(0, σ2),  i = 1, 2, …, T.

Por fim, uma série temporal pode ser aditiva ou multiplicativa. Quando é aditiva, suas componentes são somadas, de forma que, por exemplo

Yt = Tt + St + εt

Já quando é multiplicativa, suas componentes estão presentes em um produto:

Yt = Tt × St × εt

Vale notar que uma série multiplicativa pode se tornar aditiva com a aplicação do logaritmo.

Uma série multiplicativa pode ser visualmente identificada, no caso da presença de sazonalidade, se a amplitude desta aumenta com o passar do tempo. No exemplo abaixo, a série das garrafas de vinho apresenta amplitude constante, de forma que pode-se dizer que esta é uma série aditiva. Além disso, neste gráfico pode-se observar também a tendência, a sazonalidade e o erro aleatório desta série.

Gráfico de decomposition of additive time series

Alisamentos exponenciais

Em predição, são comuns duas classes de modelos: os Modelos de Alisamento (ou Suavização) Exponencial e os Modelos ARIMA. Tanto nos modelos de alisamento quanto nos ARIMA, a série é descrita como uma função de seus valores passados, em que a cada um deles é atribuído um peso. No alisamento exponencial, no entanto, as observações mais recentes são favorecidas, recebendo um peso maior, enquanto as observações mais antigas recebem pesos exponencialmente menores. Desta forma, os próximos valores previstos para a série terão forte influência das observações recentes e influência exponencialmente menor de observações mais distantes.

Discutiremos aqui três variações dos modelos de alisamento exponencial: o Simples, o de Holt e o de Holt-Winters.

Alisamento exponencial Simples

Este é o método mais simples, indicado para casos em que a série não apresenta tendência ou padrão de sazonalidade muito claros, como no caso apresentado abaixo.

gráfico sobre o rendimento anual de grãos no campo broadbalk em Rothamsted

Neste caso, a série Yt pode ser descrita como

Yt = μt + εt , εti.i.d N (0, σ2)

em que μt é a média (ou nível) da série e εt é um ruído branco, no tempo t

A estimativa do nível da série é

at = αYt + (1−α)at−1,    0 < α < 1

em que α é a constante de suavização para o nível da série. Valores menores de αα resultam em mais alisamento e valores maiores resultam em alisamentos mais suaves. Em outras palavras, valores de αα maiores dão peso maior para as observações mais recentes. Desta forma, pesos próximos de zero são utilizados para suavizar componentes irregulares e cíclicos indesejados, enquanto pesos próximos de 1 são utilizados para previsão.

Dessa forma, a previsão do h-ésimo valor futuro é obtida a partir da equação:

^Yt+h=at , h=1,2,…

Método de Holt

O Alisamento Exponencial de Holt é adequado para séries que apresentam tendência linear, já que ele introduz uma nova constante para suavizar a componente de tendência. No exemplo abaixo, percebemos que a taxa tende a aumentar com o passar dos anos, mas sem apresentar qualquer outro tipo de padrão, tornando o alisamento de Holt ideal para sua modelagem.

gráfico da taxa anual de incidência de melanoma em Connecticut

A série YtYt pode ser descrita como

Yt = μt + Tt + εt,     εti.i.d N(0,σ2)

em que μt é a média (ou nível) da série, Tt é a componente que modela a tendência e εt é um ruído branco, no tempo t.

A estimativa da tendência da série é

^Tt = β(at − at−1) + (1 − β)^Tt−1,    0 < β < 1

em que β é a constante de suavização para a tendência.

Enquanto a estimativa do nível da série neste caso será

at = αYt + (1 − α)(at−1 + ^Tt−1),    0 < α < 1

em que α é a constante de suavização para o nível da série.

Assim, a previsão ^Yt+h é dada por

^Yt+h = at + h^Tt ,      h = 1, 2, …

Método de Holt-Winters

Por fim, o Alisamento Exponencial de Holt-Winters é indicado para séries que apresentam tanto tendência quanto sazonalidade. Além disso, na modelagem da sazonalidade, temos o caso em que ela é multiplicativa e o em que ela é aditiva.

Holt-Winters Aditivo

Na série apresentada abaixo podemos observar claramente a tendência e a sazonalidade. No entanto, não há aumento da amplitude da sazonalidade, o que nos dá indícios de que esta seja uma série aditiva.

gráfico de demanda mensal de gasolina em Ontario

No caso aditivo, a série Yt pode ser descrita como

Yt = μt + St + Tt + εt  ,    εti.i.dN(0, σ2)

em que μt é a média (ou nível) da série, St é a componente que modela a sazonalidade, Tt a componente de tendência e εt é um ruído branco, no tempo t.

No caso das séries aditivas, o fator de sazonalidade St está presente no modelo sendo somado ao nível e à tendência. Assim, teremos

at = α(Yt − ^St−p) + (1 − α)(at−1 + ^Tt−1),    0 < α < 1

A estimativa da tendência se mantém a mesma

^Tt = β(at − at−1) + (1 − β)^Tt−1,    0 < β < 1

E a sazonalidade é dada por

^St = γ(Yt − ^St−p) + (1 − γ)^St−p ,    0 < γ < 1

α, β e γ são as constantes de suavização para o nível, a tendência e a sazonalidade, respectivamente. O valor p presente na estimativa da sazonalidade é o período da sazonalidade.

A previsão será então

^Yt+h = at + h^Tt + ^St+h−kp ,    h = 1, 2, …

em que o valor de k depende do valor de p, de modo que

 k = 1 se h ≤ p e k = 2 se p ≤ h ≤ 2p.

Holt-Winters Multiplicativo

Aqui, as séries são multiplicativas e, portanto, o fator de sazonalidade St está presente no modelo multiplicando o nível e a tendência. A diferença em relação ao caso anterior é que o valor da série é dividido pela sazonalidade ao invés de ser subtraído por ela. Visualmente, este tipo de série apresenta aumento da amplitude da sazonalidade com o passar do tempo.

gráfico do número mensal de passageiros de linhas aéreas internacionais

No caso multiplicativo, a série Yt pode ser descrita como

Yt = μt × St + Tt + εt  ,    εt~i.i.d N(0,σ2)

em que μt é a média da série, St é a componente que modela a sazonalidade, Tt a componente de tendência e εt é um ruído branco, no tempo t. O nível estará presente na previsão como

α, β e γ são as constantes de suavização para o nível, a tendência e a sazonalidade, respectivamente. O valor p presente na estimativa da sazonalidade é o período da sazonalidade.

A previsão será então

^Yt+h = (at + h^Tt)^St+h−kp ,    h = 1, 2, …

em que o valor de k depende do valor de p, de modo que

k = 1  se h ≤ ph ≤ p e k = 2 se p ≤ h ≤ 2p.

Aplicação do Script no R

Primeiramente, os dados devem ser transformados em um objeto de classe “ts” (se já não estiverem originalmente neste formato).

library(tidyverse)
library(forecast)    # pacote para modelagem e previsão
library(tsdl)        # fonte das séries utilizadas

set.seed(22)
dados_exemplo <- rnorm(144, 20, 2)
ts_exemplo <- ts(data = dados_exemplo, # dados que não estão no formato ts
                 frequency = 12,       # número de observações por ano
                 start = c(2000,2),    # ano e mês da primeira observação
                 end = 2012            # ano da última observação
                 )

A série pode ser visualizada utilizando a função ts.plot do pacote stats ou a função autoplot do pacote forecast; esta última opção permite modificar o gráfico com funções do pacote ggplot2.

ts.plot(ts_exemplo)   # pacote stats
gráfico com funções do pacote ggplot2
autoplot(ts_exemplo)  # pacote forecast

Alisamento exponencial Simples

A previsão utilizando este método pode ser feita tanto utilizando a função ses quanto as funções HoltWinters e forecast.HoltWinters do pacote forecast.

serie_ses <- tsdl[[21]]  # a série já estava no formato ts

# investigando a série
autoplot(serie_ses,col = "deepskyblue4",lwd = 1) + 
  ggtitle("Rendimento anual de grãos no campo Broadbalk em Rothamsted") +
  xlab("Ano") + ylab("Rendimento") + 
  theme_minimal()
gráfico sobre o rendimento anual de grãos no campo Broadbalk em Rothamsted
# apresenta a série, o gráfico de sua função autocorrelação e o gráfico
# de dispersão da observação no tempo t contra o lag 1 (t-1)
ggtsdisplay(serie_ses, plot.type="scatter", theme=theme_minimal())
# previsão com a função ses
previsao_ses1 <- ses(serie_ses,
                    h = 10)      # previsão para os próximos h anos
summary(previsao_ses1)
## 
## Forecast method: Simple exponential smoothing
## 
## Model Information:
## Simple exponential smoothing 
## 
## Call:
##  ses(y = serie_ses, h = 10) 
## 
##   Smoothing parameters:
##     alpha = 0.2809 
## 
##   Initial states:
##     l = 2.1998 
## 
##   sigma:  0.5313
## 
##      AIC     AICc      BIC 
## 228.8612 229.2041 235.7734 
## 
## Error measures:
##                       ME      RMSE       MAE       MPE     MAPE      MASE
## Training set -0.02478999 0.5240262 0.4178097 -6.895163 20.54569 0.8567446
##                   ACF1
## Training set 0.0908823
## 
## Forecasts:
##      Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## 1926       1.684603 1.0037733 2.365433 0.6433636 2.725843
## 1927       1.684603 0.9774302 2.391776 0.6030754 2.766131
## 1928       1.684603 0.9520338 2.417173 0.5642350 2.804972
## 1929       1.684603 0.9274889 2.441718 0.5266967 2.842510
## 1930       1.684603 0.9037150 2.465492 0.4903377 2.878869
## 1931       1.684603 0.8806439 2.488563 0.4550534 2.914153
## 1932       1.684603 0.8582166 2.510990 0.4207538 2.948453
## 1933       1.684603 0.8363821 2.532825 0.3873608 2.981846
## 1934       1.684603 0.8150957 2.554111 0.3548061 3.014401
## 1935       1.684603 0.7943181 2.574889 0.3230295 3.046177
autoplot(previsao_ses1) +
  ggtitle("Previsão para o rendimento anual de grãos no campo Broadbalk em Rothamsted") +
  xlab("Ano") + ylab("Rendimento") +
  theme_minimal()
gráfico de previsão para o rendimento anual de grãos no campo Broadbalk em Rothamste.

No caso da função HoltWinters, deve-se primeiramente ajustar o modelo para então realizar a previsão. Note que os argumentos beta e gamma foram definidos com FALSE, já que estamos modelando uma série sem tendência ou sazonalidade.

# previsão com a função HoltWinters
# ajustando o modelo
mod_ses2 <- HoltWinters(serie_ses,
                        alpha = NULL,
                        beta = FALSE,   # não inclui parâmetro de tendência
                        gamma = FALSE   # não inclui parâmetro de sazonalidade
                        )
mod_ses2
## Holt-Winters exponential smoothing without trend and without seasonal component.
## 
## Call:
## HoltWinters(x = serie_ses, alpha = NULL, beta = FALSE, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.3099475
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 1.641215
plot(mod_ses2)   # plotando o modelo ajustado
gráfico holt-winters filtering
previsao_ses2 <- forecast:::forecast.HoltWinters(mod_ses2,
                                                 h = 10)

previsao_ses2    # valores da previsão
##      Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## 1926       1.641215 0.9583047 2.324126 0.5967935 2.685637
## 1927       1.641215 0.9262540 2.356177 0.5477763 2.734655
## 1928       1.641215 0.8955798 2.386851 0.5008641 2.781567
## 1929       1.641215 0.8661185 2.416312 0.4558070 2.826624
## 1930       1.641215 0.8377368 2.444694 0.4124009 2.870030
## 1931       1.641215 0.8103240 2.472107 0.3704765 2.911954
## 1932       1.641215 0.7837871 2.498644 0.3298919 2.952539
## 1933       1.641215 0.7580472 2.524384 0.2905262 2.991905
## 1934       1.641215 0.7330366 2.549394 0.2522757 3.030155
## 1935       1.641215 0.7086965 2.573734 0.2150508 3.067380
autoplot(previsao_ses2) +
  ggtitle("Previsão para o rendimento anual de grãos no campo Broadbalk em Rothamsted") +
  xlab("Ano") + ylab("Rendimento") +
  theme_minimal()
Gráfico da previsão para o rendimento anual de grãos no campo Broadblak em Rothamsted

Como pode-se ver abaixo, os resultados obtidos utilizando ambas funções foram bem parecidos.

# comparando as previsões
autoplot(serie_ses) + 
  ylab("Rendimento") + xlab("Ano") +
  theme_minimal() +
  autolayer(previsao_ses1, 
            series = "Função ses", 
            PI = FALSE                      # não inclui o intervalo
            ) +
  autolayer(previsao_ses2, 
            series = "Função HoltWinters", 
            PI = FALSE                      # não inclui o intervalo
            )

Método de Holt

serie_holt <- tsdl[[60]]  # série já está no formato ts

autoplot(serie_holt, col = "brown3", lwd = 1) +
  ggtitle("Taxa anual de incidência de melanoma em Connecticut") +
  xlab("Tempo") + ylab("Taxa") +
  theme_minimal()
gráfico de taxa anual de incidência de melanoma em Connecticut
# apresenta a série, o gráfico de sua função autocorrelação e o gráfico
# de dispersão da observação no tempo t contra o lag 1 (t-1)
ggtsdisplay(serie_holt, plot.type="scatter", theme=theme_minimal())
previsao_holt <- holt(serie_holt,
                      h = 10        # Previsão para os próximos h anos
                      )
summary(previsao_holt)
## 
## Forecast method: Holt's method
## 
## Model Information:
## Holt's method 
## 
## Call:
##  holt(y = serie_holt, h = 10) 
## 
##   Smoothing parameters:
##     alpha = 1e-04 
##     beta  = 1e-04 
## 
##   Initial states:
##     l = 0.6869 
##     b = 0.1114 
## 
##   sigma:  0.3468
## 
##      AIC     AICc      BIC 
## 61.00688 62.94237 69.06147 
## 
## Error measures:
##                       ME      RMSE       MAE       MPE     MAPE      MASE
## Training set 0.004142669 0.3275296 0.2622434 -1.388455 11.13102 0.8209359
##                   ACF1
## Training set 0.3626341
## 
## Forecasts:
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1973       4.921098 4.476640 5.365556 4.241358 5.600838
## 1974       5.032520 4.588062 5.476978 4.352780 5.712260
## 1975       5.143942 4.699484 5.588400 4.464202 5.823681
## 1976       5.255364 4.810906 5.699821 4.575624 5.935103
## 1977       5.366785 4.922327 5.811243 4.687046 6.046525
## 1978       5.478207 5.033749 5.922665 4.798467 6.157947
## 1979       5.589629 5.145171 6.034087 4.909889 6.269369
## 1980       5.701051 5.256593 6.145509 5.021311 6.380791
## 1981       5.812473 5.368014 6.256931 5.132732 6.492213
## 1982       5.923895 5.479436 6.368353 5.244154 6.603635
autoplot(previsao_holt) + 
  ggtitle("Previsão para taxa anual de incidência de melanoma em Connecticut") +
  xlab("Tempo") + ylab("Taxa") +
  theme_minimal()
Gráfico de previsão para taxa anual de incidência de melanoma em Connecticut

Alternativamente, como no caso anterior, a previsão pode ser feita com a função HoltWinters.

# ajustando o modelo
mod_holt2 <- HoltWinters(serie_holt,
                        alpha = NULL,
                        beta = NULL,   
                        gamma = FALSE   # não inclui parâmetro de sazonalidade
                        )
mod_holt2
## Holt-Winters exponential smoothing with trend and without seasonal component.
## 
## Call:
## HoltWinters(x = serie_holt, alpha = NULL, beta = NULL, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.8154541
##  beta : 0.08500788
##  gamma: FALSE
## 
## Coefficients:
##        [,1]
## a 4.8233688
## b 0.1044501
plot(mod_holt2)   # visualizando o modelo ajustado
gráfico de holt-winters filtering
previsao_holt2 <- forecast:::forecast.HoltWinters(mod_holt2,
                                                  h = 10)
previsao_holt2    # valores da previsão
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1973       4.927819 4.422915 5.432723 4.155635 5.700003
## 1974       5.032269 4.358109 5.706429 4.001230 6.063308
## 1975       5.136719 4.308135 5.965303 3.869509 6.403929
## 1976       5.241169 4.264667 6.217671 3.747738 6.734601
## 1977       5.345619 4.224032 6.467206 3.630300 7.060939
## 1978       5.450069 4.184287 6.715852 3.514223 7.385916
## 1979       5.554520 4.144290 6.964749 3.397760 7.711279
## 1980       5.658970 4.103323 7.214616 3.279814 8.038125
## 1981       5.763420 4.060916 7.465923 3.159665 8.367175
## 1982       5.867870 4.016749 7.718991 3.036825 8.698915
autoplot(previsao_holt2) + 
  ggtitle("Previsão para taxa anual de incidência de melanoma em Connecticut") +
  xlab("Tempo") + ylab("Taxa") +
  theme_minimal()
Gráfico de previsão para taxa anual de incidência de melanoma em Connecticut
# comparando as previsões
autoplot(serie_holt) + 
  ylab("Taxa") + xlab("Ano") +
  theme_minimal() +
  autolayer(previsao_holt, 
            series = "Função holt", 
            PI = FALSE                      # não inclui o intervalo
            ) +
  autolayer(previsao_holt2, 
            series = "Função HoltWinters", 
            PI = FALSE                      # não inclui o intervalo
            )

Método de Holt-Winters

Aditivo

serie_hw_adi <- tsdl[[4]]   # série já está no formato ts

autoplot(serie_hw_adi, col = 'darkorange3', lwd = 0.8) + 
  ggtitle("Demanda mensal de gasolina em Ontario ") +
  xlab("Ano") + ylab("Milhões de galões") +
  theme_minimal()
gráfico da demanda mensal de gasolina em Ontario
# apresenta a série, o gráfico de sua função autocorrelação e o gráfico
# de dispersão da observação no tempo t contra o lag 1 (t-1)
ggtsdisplay(serie_hw_adi, plot.type="scatter", theme=theme_minimal())
# decompõe a série em tendência, sazonalidade e erro aleatório
decomposta_hw_adi <- decompose(serie_hw_adi, type = "additive")
autoplot(decomposta_hw_adi) + theme_minimal()
gráfico de decomposition of additive time series
previsao_hw_adi <- hw(serie_hw_adi, 
                      h = 10,
                      seasonal = "additive")
previsao_hw_adi     # valores da previsão
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1976       209518.3 201642.6 217394.0 197473.5 221563.1
## Feb 1976       205360.5 197401.4 213319.6 193188.1 217532.9
## Mar 1976       216612.9 208566.6 224659.2 204307.1 228918.7
## Apr 1976       221684.7 213547.3 229822.2 209239.6 234129.9
## May 1976       244210.6 235978.2 252443.0 231620.2 256801.0
## Jun 1976       245431.0 237099.7 253762.3 232689.4 258172.6
## Jul 1976       258898.7 250464.6 267332.7 245999.9 271797.4
## Aug 1976       261971.1 253430.6 270511.7 248909.4 275032.8
## Sep 1976       241322.5 232671.5 249973.4 228092.0 254552.9
## Oct 1976       244886.7 236121.6 253651.8 231481.6 258291.8
autoplot(previsao_hw_adi) + 
  ggtitle("Previsão para a demanda mensal de gasolina em Ontario ") +
  xlab("Ano") + ylab("Milhões de galões") +
  theme_minimal()
gráfico de previsão para a demanda mensal de gasolina em Ontario
# ajustando o modelo
mod_hw_adi2 <- HoltWinters(serie_hw_adi,
                           alpha = NULL,
                           beta = NULL,   
                           gamma = NULL,
                           seasonal = "additive"
                           )
mod_hw_adi2
## Holt-Winters exponential smoothing with trend and additive seasonal component.
## 
## Call:
## HoltWinters(x = serie_hw_adi, alpha = NULL, beta = NULL, gamma = NULL,     seasonal = "additive")
## 
## Smoothing parameters:
##  alpha: 0.1290835
##  beta : 0.02848968
##  gamma: 0.1461064
## 
## Coefficients:
##            [,1]
## a   229313.6669
## b      712.8638
## s1  -20902.9175
## s2  -26240.9913
## s3  -15611.5983
## s4  -10233.8221
## s5   14109.6988
## s6   12721.7484
## s7   25715.3763
## s8   26574.1178
## s9    4246.2864
## s10   9018.8500
## s11  -4780.4992
## s12  -3247.9602
plot(mod_hw_adi2)    # plotando o modelo ajustado
previsao_hw_adi2 <-  forecast:::forecast.HoltWinters(mod_hw_adi2, 
                                                     h = 10,
                                                     seasonal ="additive")
previsao_hw_adi2     # valores da previsão
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1976       209123.6 201012.0 217235.2 196718.0 221529.2
## Feb 1976       204498.4 196315.6 212681.2 191983.9 217012.9
## Mar 1976       215840.7 207583.4 224097.9 203212.2 228469.1
## Apr 1976       221931.3 213596.2 230266.4 209183.8 234678.8
## May 1976       246987.7 238571.3 255404.0 234116.0 259859.4
## Jun 1976       246312.6 237811.7 254813.5 233311.5 259313.7
## Jul 1976       260019.1 251430.2 268608.0 246883.5 273154.7
## Aug 1976       261590.7 252910.5 270270.9 248315.4 274866.0
## Sep 1976       239975.7 231200.8 248750.7 226555.6 253395.8
## Oct 1976       245461.2 236588.2 254334.2 231891.1 259031.2
autoplot(previsao_hw_adi2) +
  ggtitle("Previsão para a demanda mensal de gasolina em Ontario ") +
  xlab("Ano") + ylab("Milhões de galões") +
  theme_minimal()
autoplot(serie_hw_adi) + 
  ylab("Demanda de gasolina") + xlab("Ano") +
  theme_minimal() +
  autolayer(previsao_hw_adi, 
            series="Função hw",
            PI = FALSE) +
  autolayer(previsao_hw_adi2, 
            series="Função HoltWinters",
            PI = FALSE) 

Multiplicativo

serie_hw_mult <- AirPassengers   # série já está no formato ts

autoplot(serie_hw_mult, col = 'deeppink', lwd = 0.8) + 
  ggtitle("Número mensal de passageiros de linhas aéreas internacionais") +
  xlab("Mês/Ano") + ylab("Milhares de passageiros") +
  theme_minimal()
# apresenta a série, o gráfico de sua função autocorrelação e o gráfico
# de dispersão da observação no tempo t contra o lag 1 (t-1)
ggtsdisplay(serie_hw_mult, plot.type="scatter", theme=theme_minimal())
# decompõe a série em tendência, sazonalidade e erro aleatório
decomposta_hw_mult <- decompose(serie_hw_mult, 
                                type = "multiplicative")
autoplot(decomposta_hw_mult) + theme_minimal()
previsao_hw_mult <- hw(serie_hw_mult, 
                       h = 10,
                       seasonal = "multiplicative")
previsao_hw_mult        # valores da previsão
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1961       445.8901 422.6577 469.1225 410.3592 481.4210
## Feb 1961       418.9478 396.0288 441.8667 383.8963 453.9993
## Mar 1961       466.4298 439.7182 493.1414 425.5780 507.2816
## Apr 1961       496.1291 466.4627 525.7955 450.7583 541.4999
## May 1961       507.1463 475.5546 538.7381 458.8309 555.4617
## Jun 1961       575.6281 538.3478 612.9083 518.6129 632.6432
## Jul 1961       666.6573 621.8494 711.4652 598.1295 735.1850
## Aug 1961       658.4970 612.6386 704.3554 588.3627 728.6313
## Sep 1961       550.0907 510.4559 589.7255 489.4745 610.7069
## Oct 1961       491.7130 455.1069 528.3190 435.7289 547.6971
autoplot(previsao_hw_mult) + 
  ggtitle("Previsão do número mensal de passageiros de linhas aéreas internacionais") +
  xlab("Mês/Ano") + ylab("Milhares de passageiros") +
  theme_minimal()
# ajustando o modelo
mod_hw_mult2 <- HoltWinters(serie_hw_mult,
                           alpha = NULL,
                           beta = NULL,   
                           gamma = NULL,
                           seasonal = "multiplicative"
                           )
mod_hw_mult2
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
## 
## Call:
## HoltWinters(x = serie_hw_mult, alpha = NULL, beta = NULL, gamma = NULL,     seasonal = "multiplicative")
## 
## Smoothing parameters:
##  alpha: 0.2755925
##  beta : 0.03269295
##  gamma: 0.8707292
## 
## Coefficients:
##            [,1]
## a   469.3232206
## b     3.0215391
## s1    0.9464611
## s2    0.8829239
## s3    0.9717369
## s4    1.0304825
## s5    1.0476884
## s6    1.1805272
## s7    1.3590778
## s8    1.3331706
## s9    1.1083381
## s10   0.9868813
## s11   0.8361333
## s12   0.9209877
plot(mod_hw_mult2)    # plotando o modelo ajustado
previsao_hw_mult2 <-  forecast:::forecast.HoltWinters(mod_hw_mult2, 
                                                      h = 10,
                                                      seasonal = "multiplicative")
previsao_hw_mult2     # valores da previsão
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1961       447.0559 434.1422 459.9696 427.3061 466.8057
## Feb 1961       419.7123 406.2559 433.1686 399.1326 440.2920
## Mar 1961       464.8671 450.5448 479.1895 442.9630 486.7712
## Apr 1961       496.0839 480.8809 511.2870 472.8329 519.3350
## May 1961       507.5326 491.5815 523.4838 483.1375 531.9278
## Jun 1961       575.4509 557.9648 592.9370 548.7083 602.1935
## Jul 1961       666.5923 647.0002 686.1843 636.6288 696.5558
## Aug 1961       657.9137 637.8194 678.0081 627.1821 688.6454
## Sep 1961       550.3088 531.5631 569.0544 521.6398 578.9777
## Oct 1961       492.9853 474.6967 511.2739 465.0153 520.9553
autoplot(previsao_hw_mult2) +
  ggtitle("Previsão do número mensal de passageiros de linhas aéreas internacionais") +
  xlab("Mês/Ano") + ylab("Milhares de passageiros") +
  theme_minimal()
autoplot(serie_hw_mult) + 
  xlab("Mês/Ano") + ylab("Milhares de passageiros") +
  theme_minimal() + 
  autolayer(previsao_hw_mult, 
            series="Função hw",
            PI = FALSE) + 
  autolayer(previsao_hw_mult2, 
            series="Função HoltWinters",
            PI = FALSE)
Share the Post:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Related Posts

Pesquisa Operacional

Artigo feito em colaboração com Valéria Nicéria A Pesquisa Operacional, ou PO, ganhou destaque durante a Segunda Guerra Mundial. Devido

Read More