Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Séries Temporais: decomposição clássica e a abordagem X11. Campo Grande-MS,Brasil: RStudio/Rpubs, 2019. Disponível em http://rpubs.com/amrofi/decompose_x11_varejoms.

1 Introdução

Neste arquivo utilizo a série do Índice de volume de vendas no varejo Total de Mato Grosso do Sul, série mensal a partir de jan/2000 até jun/2019 obtida com o pacote BETS e importada do Banco Central do Brasil. Portanto, são 234 observações mensais.
É um exercício rápido de decomposição clássica nos componentes de tendência, sazonalidade e irregularidades. O modelo aditivo é descrito como \[ Y = T + S + I \] e o multiplicativo \[ Y = T * S * I \] em que \(Y\) é a série analisada; \(T\) é a tendência (rolling mean de 12 meses); \(S\) é a sazonalidade; e \(I\) é a irregularidade.
Sugerimos assistir, para maiores esclarecimentos acerca dos aspectos teoricos do modelo de decomposição, ao vídeo Decomposição de séries temporais, de nossa autoria.

2 Dados

Farei de duas formas para o leitor. Uma carrega direto do site do Banco Central do Brasil com o pacote BETS (FERREIRA, SPERANZA e COSTA, 2018) e a outra eu gerei a estrutura idêntica pela função dput() para os leitores que não conseguirem por qualquer motivo o acesso ao site do Banco Central (as vezes vejo isso ocorrer dependendo dos bloqueios da sua rede de internet). A forma pelo dput assume o nome varejoms2 enquanto a extraída pelo BETS tem nome varejoms. Esclareço ao leitor que após baixar a série pelo BETS, fiz o dput e a partir de então, renomeei a série de trabalho varejoms2 como varejoms e desabilitei o bloco (Chunk) que acessa o BETS apenas para agilizar os cálculos.

library(BETS)
# Pegando as séries a partir do site do Banco Central do Brasil
# Índice de volume de vendas no varejo Total de Mato Grosso do Sul
# mensal a partir de jan/2000 até junho2019 
# 234 observações mensais
varejoms <- BETSget(1479) 
print(varejoms)
class(varejoms)
dput(varejoms)  # opção para ter os dados como na structure abaixo
# uso a opção abaixo para quando a internet por algum motivo falha
varejoms <- structure(c(35.2, 35.6, 39.2, 40.5, 41.6, 40.4, 40.8, 38.7, 37.3, 37.6, 
    35.6, 47.4, 34.2, 32.2, 38, 37.5, 38.8, 35, 38.4, 40.2, 38.2, 39.3, 36, 46.3, 
    36.4, 34, 39, 37.8, 38.9, 35.3, 37.2, 38.1, 35.6, 38.3, 35.6, 45.7, 32.2, 31.6, 
    35.2, 36.8, 37.5, 34.8, 38.4, 38.1, 37, 39, 37.3, 49, 35.8, 35.3, 40.2, 41.3, 
    43.9, 41.6, 45.9, 42.3, 42.2, 44, 41.3, 56.9, 38.5, 38.5, 45.3, 43.6, 46.2, 44.3, 
    47.5, 46.5, 46.4, 46, 44.1, 61, 42, 40.2, 44.6, 44.5, 47.8, 45.3, 46.5, 48.5, 
    47.7, 50.2, 49.3, 64.5, 47, 46.8, 51, 50.5, 55, 51.3, 52.8, 55.3, 54.8, 55.6, 
    55.3, 72.2, 54.5, 52.1, 56.2, 57.2, 60.8, 56.1, 61.8, 61.6, 59.8, 63.3, 57.7, 
    77.4, 61.4, 51.9, 57.3, 57.9, 61.9, 57.3, 61.1, 61.1, 60.6, 65.6, 63.5, 83.1, 
    64.1, 60.2, 67.8, 67.1, 72.8, 68.5, 71.1, 69.3, 69.9, 71.1, 67.9, 92.7, 67.5, 
    64.8, 69.1, 69.4, 79.6, 70.2, 73.8, 72.5, 71.3, 75.6, 74.7, 100.8, 79.5, 75.7, 
    82.4, 78, 84.8, 83.2, 84.8, 88.5, 86.3, 91.7, 92.8, 111.4, 92.8, 83.7, 92.5, 
    88.3, 93.9, 88.8, 96, 95.9, 93.2, 98.3, 100.5, 128.8, 97.2, 90.2, 94.3, 94.4, 
    101.1, 92, 96.4, 98.2, 97.6, 105.8, 103.1, 129.6, 99.6, 87.8, 97, 94.8, 98.6, 
    93.4, 98.4, 96.4, 92.5, 100.6, 97.2, 124.5, 91.5, 85.1, 91.6, 88.5, 92.2, 87.4, 
    90.5, 88.1, 85.2, 89.4, 93.4, 116.9, 90.8, 84, 89.7, 86.3, 90, 87.3, 90.8, 93.5, 
    93.7, 91.4, 93.5, 114.1, 87.8, 81.1, 94.5, 83.2, 89.9, 88.8, 89.3, 93.7, 93.5, 
    96.3, 101.3, 118.3, 93.8, 85.2, 90, 86.6, 90, 84.5), .Tsp = c(2000, 2019.41666666667, 
    12), class = "ts")
class(varejoms)
[1] "ts"

3 Primeiras análises

Inicialmente olharei as estatísticas descritivas da série. Em seguida farei um plot básico da série e o plot pelo pacote dygraphs, útil para ver os pontos de picos e momentos específicos.

# estatisticas basicas
summary(varejoms)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  31.60   44.02   64.30   67.17   90.00  129.60 
# Min. 1st Qu.  Median Mean 3rd Qu.  Max.  31.60 44.02 64.30 67.17 90.00 129.60

# plot basico lembrar que em class(), ele já indicou que era ts = serie temporal
plot(varejoms)
# pelo pacote dygraph dá mais opções
library(dygraphs)

dygraph(varejoms)

É possivel visualizar nos plots acima: sazonalidade (por exemplo, picos em dezembro de cada ano); a tendência aparentemente crescente até 2014 e decresce com a “crise” brasileira; e uma aparente não-estacionariedade (média e variância mudam no tempo). Em outra postagem aplicarei o teste de raiz unitária na série para avaliar a estacionariedade de modo mais explícito.

4 Decomposição da série

Farei as decomposicoes aditiva e multiplicativa pela função decompose. Ela aplica uma rolling mean na frequência da série (mensal será igual a 12 meses) obtendo a tendência (trend), o fator sazonal médio (que será a componente da sazonalidade) e o componente de irregularidade. Nos objetos decomposicao.ad e decomposicao.mult estarão os vários componentes calculados e que podem ser plotados.

decomposicao.ad <- decompose(varejoms)  # aditiva
decomposicao.mult <- decompose(varejoms, type = "multiplicative")  # multiplicativa

# grafico da decomposicao aditiva
plot(decomposicao.ad)

# grafico da decomposicao multiplicativa
plot(decomposicao.mult)

4.1 Tendência

Podemos verificar que a série trend foi obtida da mesma forma que uma rolling mean de 12 meses como o código abaixo apresenta. O leitor pode verificar que é a mesma independente de ser aditiva ou multiplicativa.

# obtendo a tendencia
library(fpp2)
tend <- ma(varejoms, 12)
print(cbind(tend, decomposicao.ad$trend, decomposicao.mult$trend))
              tend decomposicao.ad$trend decomposicao.mult$trend
Jan 2000        NA                    NA                      NA
Feb 2000        NA                    NA                      NA
Mar 2000        NA                    NA                      NA
Apr 2000        NA                    NA                      NA
May 2000        NA                    NA                      NA
Jun 2000        NA                    NA                      NA
Jul 2000  39.11667              39.11667                39.11667
Aug 2000  38.93333              38.93333                38.93333
Sep 2000  38.74167              38.74167                38.74167
Oct 2000  38.56667              38.56667                38.56667
Nov 2000  38.32500              38.32500                38.32500
Dec 2000  37.98333              37.98333                37.98333
Jan 2001  37.65833              37.65833                37.65833
Feb 2001  37.62083              37.62083                37.62083
Mar 2001  37.72083              37.72083                37.72083
Apr 2001  37.82917              37.82917                37.82917
May 2001  37.91667              37.91667                37.91667
Jun 2001  37.88750              37.88750                37.88750
Jul 2001  37.93333              37.93333                37.93333
Aug 2001  38.10000              38.10000                38.10000
Sep 2001  38.21667              38.21667                38.21667
Oct 2001  38.27083              38.27083                38.27083
Nov 2001  38.28750              38.28750                38.28750
Dec 2001  38.30417              38.30417                38.30417
Jan 2002  38.26667              38.26667                38.26667
Feb 2002  38.12917              38.12917                38.12917
Mar 2002  37.93333              37.93333                37.93333
Apr 2002  37.78333              37.78333                37.78333
May 2002  37.72500              37.72500                37.72500
Jun 2002  37.68333              37.68333                37.68333
Jul 2002  37.48333              37.48333                37.48333
Aug 2002  37.20833              37.20833                37.20833
Sep 2002  36.95000              36.95000                36.95000
 [ reached getOption("max.print") -- omitted 201 rows ]
# plot conjunto com função autoplot do fpp2
autoplot(varejoms, series = "Dados") + autolayer(tend, series = "tend") + xlab("Ano") + 
    ylab("Índice") + ggtitle("Índice de volume de vendas no varejo Total 
          de Mato Grosso do Sul") + 
    scale_colour_manual(values = c(Dados = "grey50", tend = "red"), breaks = c("Dados", 
        "tend"))

4.2 Decomposição X11

Um método mais comum (mais atual, pois o de decomposição clássico é dos anos 1920) é por meio da metodologia do Census Bureau dos Estados Unidos da América, e chamado de X11 (US BUREAU OF THE CENSUS, 2013). Em outra postagem farei um exemplo de análise do método X13-ARIMA SEATS, a versão mais recente que utiliza outras abordagens além do X11.
O primeiro passo é chamar o pacote seasonal (SAX e EDDELBUETTEL, 2018). Crio o objeto fit que contém as saídas da função seas(x11="") com a opção X11 aplicada sobre a série varejoms. Na sequência, faço o plot pela função autoplot do pacote fpp2 (HYNDMAN, 2018).

# decomposição pelo X11 do Census Bureau
library(seasonal)
fit <- seas(varejoms, x11 = "")
# varejoms %>% seas(x11='') -> fit # uso a serie 'varejoms', aplico o 'seas' x11
# e gero 'fit'
library(fpp2)
autoplot(fit) + ggtitle("Decomposição X11 de Mato Grosso do Sul
  do Índice de volume de vendas no varejo total")

names(fit)  # para entender o que esta dentro de fit
 [1] "series"      "udg"         "data"        "err"         "est"        
 [6] "model"       "fivebestmdl" "wdir"        "iofile"      "call"       
[11] "list"        "x"           "spc"        

Dentro do objeto fit, existe o local em que estão as séries (fit$series) e dados (fit$data, que gerarão os gráficos). Um print da parte armazenada em fit$series mostrará as várias séries em sua nomenclatura como consta no documento original do US Census Bureau. Para melhor entender as legendas do X11, recomendo usar o manual de referência do X13-ARIMA SEATS (US BUREAU OF THE CENSUS, 2013). Descrevo abaixo apenas os códigos que aparecem nas saídas do seas.

Legendas do X11

# fit$data[,'final'] é a fit$data[,'seasonaladj']  É A SÉRIE COM AJUSTE SAZONAL
# final = série com ajuste sazonal = dessazonalizada
# d10 = seasonal        É O COMPONENTE SAZONAL - fator sazonal
# d11 = seasonaladj     É A SÉRIE DESSAZONALIZADA
# d12 = trend           É A TENDÊNCIA = ROLLING MEAN
# d13 = irregular       É A IRREGULARIDADE
# d16 = adjustfac       É O FATOR SAZONAL AJUSTADO PARA SAZONALIDADE E TRADING DAYS
# e18 = final adjustment ratios (original series / seasonally adjusted series)
# d16 = e18 (parece que sim)
# rsd = residuos estimados
print(fit$series)
$d10
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9160363 0.8738743 0.9948168 1.0001516 1.0208706 0.9521191 1.0193705
2001 0.9140777 0.8734406 0.9947568 0.9986594 1.0213914 0.9540417 1.0196030
2002 0.9119417 0.8731077 0.9952060 0.9948656 1.0210505 0.9563967 1.0188556
2003 0.9102326 0.8734045 0.9935275 0.9886934 1.0231872 0.9588774 1.0171064
2004 0.9103335 0.8744870 0.9895362 0.9822324 1.0249350 0.9601359 1.0144476
2005 0.9132623 0.8752930 0.9832652 0.9768418 1.0280270 0.9601773 1.0117053
2006 0.9201656 0.8765347 0.9777956 0.9726826 1.0289716 0.9581603 1.0081204
2007 0.9300553 0.8790183 0.9740826 0.9695183 1.0292379 0.9562496 1.0029410
           Aug       Sep       Oct       Nov       Dec
2000 1.0085662 0.9786149 1.0171068 0.9562276 1.2641280
2001 1.0081584 0.9786166 1.0170109 0.9571359 1.2660946
2002 1.0087976 0.9797572 1.0165767 0.9581184 1.2697734
2003 1.0081513 0.9798217 1.0174593 0.9601495 1.2744830
2004 1.0079612 0.9807484 1.0167661 0.9633637 1.2794881
2005 1.0061358 0.9803528 1.0171512 0.9654955 1.2838366
2006 1.0057274 0.9802777 1.0162996 0.9675606 1.2849235
2007 1.0043865 0.9791421 1.0166976 0.9695748 1.2835641
 [ reached getOption("max.print") -- omitted 12 rows ]

$d11
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000  38.94016  39.52152  39.48226  40.27187  41.02116  41.91343  40.55981
2001  37.66416  37.19486  37.99908  37.78664  37.69766  36.38404  38.10896
2002  39.61040  39.28905  38.74981  38.56085  37.75048  37.11832  36.75493
2003  35.05287  36.50330  36.30527  36.77192  36.10707  36.87491  37.46621
2004  38.74347  39.64975  41.04643  41.38121  43.40463  43.28423  44.57580
2005  42.72017  44.37800  45.20760  44.76756  45.47413  45.97429  46.95139
2006  46.18599  46.27191  45.70312  45.49896  46.76380  46.70067  46.74212
2007  50.87148  53.71658  51.53950  52.96640  53.03003  53.20548  53.27034
           Aug       Sep       Oct       Nov       Dec
2000  38.07864  37.80135  37.40660  37.09808  37.49697
2001  39.51094  39.25567  38.90024  37.15284  37.05806
2002  37.20806  36.91869  37.38811  36.85031  36.41807
2003  37.79272  37.89510  37.98110  39.06804  38.70324
2004  42.46425  42.87633  43.27535  43.02175  44.06523
2005  46.52449  46.75183  45.82897  45.63073  46.80973
2006  47.85600  48.25914  49.98146  50.77285  50.19857
2007  54.55622  56.28419  55.05139  56.33871  57.00165
 [ reached getOption("max.print") -- omitted 12 rows ]

$d12
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000  39.25023  39.62251  39.92326  40.18129  40.29172  40.11278  39.59129
2001  37.39369  37.52701  37.63034  37.75919  37.94367  38.19110  38.46100
2002  39.19149  39.05001  38.76017  38.31961  37.82704  37.41450  37.15470
2003  36.48083  36.36462  36.34856  36.45092  36.64742  36.91495  37.25079
2004  39.28169  39.96581  40.77917  41.58926  42.27129  42.71549  42.91333
2005  44.04604  44.40269  44.78256  45.21840  45.67910  46.07001  46.33730
2006  46.06740  46.02514  46.01329  46.05751  46.21240  46.58407  47.17710
2007  51.13835  51.57142  51.98692  52.42638  52.89041  53.34831  53.82108
           Aug       Sep       Oct       Nov       Dec
2000  38.86156  38.13750  37.59052  37.32135  37.28906
2001  38.70456  38.90732  39.06320  39.16051  39.20916
2002  37.02996  36.96966  36.89949  36.79467  36.64373
2003  37.61429  37.93953  38.21491  38.47558  38.79510
2004  42.97120  43.00580  43.12265  43.35672  43.69121
2005  46.44638  46.44121  46.36851  46.24868  46.13891
2006  47.89670  48.67835  49.42208  50.08576  50.65539
2007  54.37618  54.99737  55.60643  56.19250  56.73171
 [ reached getOption("max.print") -- omitted 12 rows ]

$d13
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9921003 0.9974513 0.9889540 1.0022543 1.0181039 1.0448895 1.0244629
2001 1.0072331 0.9911491 1.0097990 1.0007272 0.9935164 0.9526837 0.9908468
2002 1.0106888 1.0061213 0.9997328 1.0062956 0.9979761 0.9920838 0.9892404
2003 0.9608572 1.0038134 0.9988089 1.0088064 0.9852555 0.9989154 1.0057829
2004 0.9862985 0.9920917 1.0065539 0.9949975 1.0268109 1.0133146 1.0387401
2005 0.9698981 0.9994438 1.0094913 0.9900298 0.9955130 0.9979224 1.0132527
2006 1.0025743 1.0053614 0.9932593 0.9878728 1.0119318 1.0025031 0.9907798
2007 0.9947814 1.0415959 0.9913936 1.0103006 1.0026397 0.9973227 0.9897672
           Aug       Sep       Oct       Nov       Dec
2000 0.9798536 0.9911858 0.9951072 0.9940176 1.0055757
2001 1.0208341 1.0089534 0.9958281 0.9487321 0.9451379
2002 1.0048096 0.9986214 1.0132419 1.0015120 0.9938418
2003 1.0047437 0.9988288 0.9938818 1.0153983 0.9976321
2004 0.9882026 0.9969894 1.0035410 0.9922741 1.0085606
2005 1.0016817 1.0066885 0.9883643 0.9866386 1.0145393
2006 0.9991501 0.9913880 1.0113184 1.0137181 0.9909817
2007 1.0033110 1.0233980 0.9900183 1.0026019 1.0047582
 [ reached getOption("max.print") -- omitted 12 rows ]

$d16
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9039510 0.9007751 0.9928509 1.0056648 1.0141108 0.9638916 1.0059218
2001 0.9080251 0.8657111 1.0000241 0.9924142 1.0292415 0.9619601 1.0076371
2002 0.9189507 0.8653811 1.0064565 0.9802687 1.0304506 0.9510130 1.0121091
2003 0.9186125 0.8656753 0.9695563 1.0007637 1.0385777 0.9437311 1.0249235
2004 0.9240266 0.8902957 0.9793788 0.9980375 1.0114129 0.9610890 1.0297067
2005 0.9012135 0.8675471 1.0020438 0.9739194 1.0159622 0.9635820 1.0116845
2006 0.9093666 0.8687777 0.9758633 0.9780443 1.0221582 0.9700075 0.9948201
2007 0.9238968 0.8712393 0.9895323 0.9534346 1.0371483 0.9641864 0.9911706
           Aug       Sep       Oct       Nov       Dec
2000 1.0163178 0.9867373 1.0051702 0.9596183 1.2641021
2001 1.0174398 0.9731077 1.0102766 0.9689704 1.2493909
2002 1.0239717 0.9642811 1.0243898 0.9660707 1.2548715
2003 1.0081306 0.9763796 1.0268264 0.9547447 1.2660438
2004 0.9961319 0.9842260 1.0167452 0.9599795 1.2912674
2005 0.9994736 0.9924744 1.0037318 0.9664539 1.3031478
2006 1.0134571 0.9884139 1.0043725 0.9709915 1.2848972
2007 1.0136332 0.9736304 1.0099654 0.9815631 1.2666299
 [ reached getOption("max.print") -- omitted 12 rows ]

$e18
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9039510 0.9007751 0.9928509 1.0056648 1.0141108 0.9638916 1.0059218
2001 0.9080251 0.8657111 1.0000241 0.9924142 1.0292415 0.9619601 1.0076371
2002 0.9189507 0.8653811 1.0064565 0.9802687 1.0304506 0.9510130 1.0121091
2003 0.9186125 0.8656753 0.9695563 1.0007637 1.0385777 0.9437311 1.0249235
2004 0.9240266 0.8902957 0.9793788 0.9980375 1.0114129 0.9610890 1.0297067
2005 0.9012135 0.8675471 1.0020438 0.9739194 1.0159622 0.9635820 1.0116845
2006 0.9093666 0.8687777 0.9758633 0.9780443 1.0221582 0.9700075 0.9948201
2007 0.9238968 0.8712393 0.9895323 0.9534346 1.0371483 0.9641864 0.9911706
           Aug       Sep       Oct       Nov       Dec
2000 1.0163178 0.9867373 1.0051702 0.9596183 1.2641021
2001 1.0174398 0.9731077 1.0102766 0.9689704 1.2493909
2002 1.0239717 0.9642811 1.0243898 0.9660707 1.2548715
2003 1.0081306 0.9763796 1.0268264 0.9547447 1.2660438
2004 0.9961319 0.9842260 1.0167452 0.9599795 1.2912674
2005 0.9994736 0.9924744 1.0037318 0.9664539 1.3031478
2006 1.0134571 0.9884139 1.0043725 0.9709915 1.2848972
2007 1.0136332 0.9736304 1.0099654 0.9815631 1.2666299
 [ reached getOption("max.print") -- omitted 12 rows ]

$rsd
               Jan           Feb           Mar           Apr           May
2000 -1.469292e-03  4.835738e-03 -1.534311e-03  1.627078e-02  9.921831e-03
2001  7.167179e-05 -2.243456e-02  1.533620e-02 -1.248602e-02 -1.839170e-02
2002  5.281442e-02  5.842271e-03 -1.969108e-02 -1.885580e-02 -2.974529e-02
2003 -7.598416e-02  2.661862e-02 -7.944684e-05  4.466163e-03 -3.131327e-03
2004 -8.068610e-03  1.047022e-02  3.316107e-02  4.126374e-03  7.263069e-02
2005 -3.100684e-02  1.255537e-02 -1.093514e-03 -2.006605e-02  1.606480e-02
2006  2.796022e-03 -2.878522e-02 -4.796052e-02 -1.805357e-02  2.558457e-02
2007  3.101395e-02  3.419434e-02 -5.226078e-02  1.533409e-02  1.265810e-04
               Jun           Jul           Aug           Sep           Oct
2000  2.267089e-02 -2.374413e-02 -5.570412e-02 -1.886054e-02 -1.127732e-02
2001 -4.760195e-02  4.667018e-02  7.954335e-02  1.875368e-02  2.082020e-03
2002 -1.307248e-02 -2.588059e-02  1.313358e-02  1.549619e-03  1.883125e-02
2003  3.421933e-02  1.611461e-02  1.399672e-02  1.367018e-02  5.469448e-03
2004  1.630768e-02  1.833928e-02 -4.390433e-02  3.140341e-03  7.403573e-03
2005  1.342106e-02  1.175008e-03  1.018570e-02  8.240707e-03 -2.217813e-02
2006 -2.933758e-03 -2.375897e-02  3.592220e-02  1.657227e-02  4.329607e-02
2007 -3.505522e-03 -1.811378e-02  2.575531e-02  3.417674e-02 -2.247700e-02
               Nov           Dec
2000 -7.443153e-04  6.171883e-03
2001 -3.475852e-02 -1.757276e-02
2002  1.567423e-02 -8.771326e-03
2003  5.214205e-02  9.366336e-03
2004  3.568018e-03  3.233773e-02
2005 -1.265565e-03  2.205898e-02
2006  3.687999e-02 -1.472108e-02
2007  1.946050e-02  9.801785e-03
 [ reached getOption("max.print") -- omitted 12 rows ]

Primeiro aplico o attach para que o R entenda os nomes dentro do objeto criado fit$series (d11, d16, e18 etc). Depois faço um teste para verificar se a série e18 pode ser dada pela fórmula (e18 = ‘série original’ / ‘série ajustada para sazonalidade’). Faço os prints para ver que os valores calculados conferem e ver que a têndencia obtida pela rolling mean difere da tendência obtida pelo X11.

attach(fit$series)  # para que o R entenda os nomes dentro de fit$series
teste = varejoms/d11  # conferencia de e18
print(cbind(varejoms, d11, teste, e18, fit$data, d16))
         varejoms       d11     teste       e18 fit$data.final
Jan 2000     35.2  38.94016 0.9039510 0.9039510       38.94016
Feb 2000     35.6  39.52152 0.9007751 0.9007751       39.52152
Mar 2000     39.2  39.48226 0.9928509 0.9928509       39.48226
Apr 2000     40.5  40.27187 1.0056648 1.0056648       40.27187
May 2000     41.6  41.02116 1.0141108 1.0141108       41.02116
Jun 2000     40.4  41.91343 0.9638916 0.9638916       41.91343
Jul 2000     40.8  40.55981 1.0059218 1.0059218       40.55981
Aug 2000     38.7  38.07864 1.0163178 1.0163178       38.07864
Sep 2000     37.3  37.80135 0.9867373 0.9867373       37.80135
         fit$data.seasonal fit$data.seasonaladj fit$data.trend
Jan 2000         0.9160363             38.94016       39.25023
Feb 2000         0.8738743             39.52152       39.62251
Mar 2000         0.9948168             39.48226       39.92326
Apr 2000         1.0001516             40.27187       40.18129
May 2000         1.0208706             41.02116       40.29172
Jun 2000         0.9521191             41.91343       40.11278
Jul 2000         1.0193705             40.55981       39.59129
Aug 2000         1.0085662             38.07864       38.86156
Sep 2000         0.9786149             37.80135       38.13750
         fit$data.irregular fit$data.adjustfac       d16
Jan 2000          0.9921003          0.9039510 0.9039510
Feb 2000          0.9974513          0.9007751 0.9007751
Mar 2000          0.9889540          0.9928509 0.9928509
Apr 2000          1.0022543          1.0056648 1.0056648
May 2000          1.0181039          1.0141108 1.0141108
Jun 2000          1.0448895          0.9638916 0.9638916
Jul 2000          1.0244629          1.0059218 1.0059218
Aug 2000          0.9798536          1.0163178 1.0163178
Sep 2000          0.9911858          0.9867373 0.9867373
 [ reached getOption("max.print") -- omitted 225 rows ]

Pode-se ver acima (conferir) que os valores calculados em teste são iguais aos de e18 e de d16 e de fit$data.adjustfac. Abaixo, pode-se de forma semelhante conferir que a tendência pela decomposição clássica (obtido pelo ‘decompose()’) difere da tendencia obtida pelo x11 em fit$data[,'trend']). Isso ocorre porque o método da dessazonalização do X11 é superior ao da decomposição clássica (e mais moderno que a clássica).

print(cbind(tend, decomposicao.ad$trend, fit$data[, "trend"]))
              tend decomposicao.ad$trend fit$data[, "trend"]
Jan 2000        NA                    NA            39.25023
Feb 2000        NA                    NA            39.62251
Mar 2000        NA                    NA            39.92326
Apr 2000        NA                    NA            40.18129
May 2000        NA                    NA            40.29172
Jun 2000        NA                    NA            40.11278
Jul 2000  39.11667              39.11667            39.59129
Aug 2000  38.93333              38.93333            38.86156
Sep 2000  38.74167              38.74167            38.13750
Oct 2000  38.56667              38.56667            37.59052
Nov 2000  38.32500              38.32500            37.32135
Dec 2000  37.98333              37.98333            37.28906
Jan 2001  37.65833              37.65833            37.39369
Feb 2001  37.62083              37.62083            37.52701
Mar 2001  37.72083              37.72083            37.63034
Apr 2001  37.82917              37.82917            37.75919
May 2001  37.91667              37.91667            37.94367
Jun 2001  37.88750              37.88750            38.19110
Jul 2001  37.93333              37.93333            38.46100
Aug 2001  38.10000              38.10000            38.70456
Sep 2001  38.21667              38.21667            38.90732
Oct 2001  38.27083              38.27083            39.06320
Nov 2001  38.28750              38.28750            39.16051
Dec 2001  38.30417              38.30417            39.20916
Jan 2002  38.26667              38.26667            39.19149
Feb 2002  38.12917              38.12917            39.05001
Mar 2002  37.93333              37.93333            38.76017
Apr 2002  37.78333              37.78333            38.31961
May 2002  37.72500              37.72500            37.82704
Jun 2002  37.68333              37.68333            37.41450
Jul 2002  37.48333              37.48333            37.15470
Aug 2002  37.20833              37.20833            37.02996
Sep 2002  36.95000              36.95000            36.96966
 [ reached getOption("max.print") -- omitted 201 rows ]

Agora então faço o gráfico das série da decomposição X11 para visualização.

autoplot(varejoms, series = "Data") + autolayer(trendcycle(fit), series = "Trend") + 
    autolayer(seasadj(fit), series = "Seasonally Adjusted") + xlab("Ano") + ylab("Index") + 
    ggtitle("Índice de volume de vendas no varejo Total de Mato Grosso do Sul") + 
    scale_colour_manual(values = c("gray", "blue", "red"), breaks = c("Data", "Seasonally Adjusted", 
        "Trend"))

Referências

FERREIRA, Pedro Costa; SPERANZA, Talitha; COSTA, Jonatha (2018). BETS: Brazilian Economic Time Series. R package version 0.4.9. Disponível em: https://CRAN.R-project.org/package=BETS.

HYNDMAN, Rob. (2018). fpp2: Data for “Forecasting: Principles and Practice” (2nd Edition). R package version 2.3. Disponível em: https://CRAN.R-project.org/package=fpp2.

SAX C.; EDDELBUETTEL, D. (2018). “Seasonal Adjustment by X-13ARIMA-SEATS in R.” Journal of Statistical Software, 87(11), 1-17. doi: 10.18637/jss.v087.i11 (URL: https://doi.org/10.18637/jss.v087.i11).

US BUREAU OF THE CENSUS (2013). X-13ARIMA-SEATS Reference Manual Accessible HTML Output Version. Staff Statistical Research Division, US Bureau of the Census, disponível em: http://www.census.gov/ts/x13as/docX13ASHTML.pdf.

LS0tDQp0aXRsZTogIlPDqXJpZXMgVGVtcG9yYWlzOiBkZWNvbXBvc2nDp8OjbyBjbMOhc3NpY2EgZSBhIGFib3JkYWdlbSBYMTEiDQphdXRob3I6ICJBZHJpYW5vIE1hcmNvcyBSb2RyaWd1ZXMgRmlndWVpcmVkbywgKmUtbWFpbDogYWRyaWFuby5maWd1ZWlyZWRvQHVmbXMuYnIqIg0KbGlua2NvbG9yOiBibHVlDQphYnN0cmFjdDogDQogIFRoaXMgaXMgYW4gdW5kZXJncmFkIHN0dWRlbnQgbGV2ZWwgaW5zdHJ1Y3Rpb24gZm9yIGNsYXNzIHVzZS4gIA0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJWQgJUIgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiBkZWZhdWx0DQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IG5vDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgZmlnX2NhcHRpb246IHRydWUNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiA3Mg0KLS0tDQoNCmBgYHtyIGtuaXRyX2luaXQsIGVjaG89RkFMU0UsIGNhY2hlPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkocm1hcmtkb3duKQ0KbGlicmFyeShybWRmb3JtYXRzKQ0KDQojIyBHbG9iYWwgb3B0aW9ucw0Kb3B0aW9ucyhtYXgucHJpbnQ9IjEwMCIpDQpvcHRzX2NodW5rJHNldChlY2hvPVRSVUUsDQoJICAgICAgICAgICAgIGNhY2hlPUYsDQogICAgICAgICAgICAgICBwcm9tcHQ9RkFMU0UsDQogICAgICAgICAgICAgICB0aWR5PVRSVUUsDQogICAgICAgICAgICAgICBjb21tZW50PU5BLA0KICAgICAgICAgICAgICAgbWVzc2FnZT1GQUxTRSwNCiAgICAgICAgICAgICAgIHdhcm5pbmc9RkFMU0UpDQpvcHRzX2tuaXQkc2V0KHdpZHRoPTEwMCkNCmBgYA0KDQojIExpY2Vuw6dhIHsjTGljZW7Dp2EgLnVubnVtYmVyZWR9DQoNClRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlDQo0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiBUbyB2aWV3IGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHZpc2l0DQo8aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLz4gb3Igc2VuZCBhIGxldHRlciB0bw0KQ3JlYXRpdmUgQ29tbW9ucywgUE8gQm94IDE4NjYsIE1vdW50YWluIFZpZXcsIENBIDk0MDQyLCBVU0EuDQoNCiFbTGljZW5zZTogQ0MgQlktU0ENCjQuMF0oaHR0cHM6Ly9taXJyb3JzLmNyZWF0aXZlY29tbW9ucy5vcmcvcHJlc3NraXQvYnV0dG9ucy84OHgzMS9wbmcvYnktc2EucG5nKXt3aWR0aD0iMjUlIn0NCg0KIyBDaXRhw6fDo28geyNDaXRhw6fDo28gLnVubnVtYmVyZWR9DQoNClN1Z2VzdMOjbyBkZSBjaXRhw6fDo286IEZJR1VFSVJFRE8sIEFkcmlhbm8gTWFyY29zIFJvZHJpZ3Vlcy4gU8Opcmllcw0KVGVtcG9yYWlzOiBkZWNvbXBvc2nDp8OjbyBjbMOhc3NpY2EgZSBhIGFib3JkYWdlbSBYMTEuIENhbXBvDQpHcmFuZGUtTVMsQnJhc2lsOiBSU3R1ZGlvL1JwdWJzLCAyMDE5LiBEaXNwb27DrXZlbCBlbQ0KPGh0dHA6Ly9ycHVicy5jb20vYW1yb2ZpL2RlY29tcG9zZV94MTFfdmFyZWpvbXM+Lg0KDQojIEludHJvZHXDp8Ojbw0KDQpOZXN0ZSBhcnF1aXZvIHV0aWxpem8gYSBzw6lyaWUgZG8gw41uZGljZSBkZSB2b2x1bWUgZGUgdmVuZGFzIG5vIHZhcmVqbw0KVG90YWwgZGUgTWF0byBHcm9zc28gZG8gU3VsLCBzw6lyaWUgbWVuc2FsIGEgcGFydGlyIGRlIGphbi8yMDAwIGF0w6kNCmp1bi8yMDE5IG9idGlkYSBjb20gbyBwYWNvdGUgYEJFVFNgIGUgaW1wb3J0YWRhIGRvIEJhbmNvIENlbnRyYWwgZG8NCkJyYXNpbC4gUG9ydGFudG8sIHPDo28gMjM0IG9ic2VydmHDp8O1ZXMgbWVuc2Fpcy5cDQrDiSB1bSBleGVyY8OtY2lvIHLDoXBpZG8gZGUgZGVjb21wb3Npw6fDo28gY2zDoXNzaWNhIG5vcyBjb21wb25lbnRlcyBkZQ0KdGVuZMOqbmNpYSwgc2F6b25hbGlkYWRlIGUgaXJyZWd1bGFyaWRhZGVzLiBPIG1vZGVsbyBhZGl0aXZvIMOpIGRlc2NyaXRvDQpjb21vICQkDQpZID0gVCArIFMgKyBJICANCiQkIGUgbyBtdWx0aXBsaWNhdGl2byAkJA0KWSA9IFQgKiBTICogSSANCiQkIGVtIHF1ZSAkWSQgw6kgYSBzw6lyaWUgYW5hbGlzYWRhOyAkVCQgw6kgYSB0ZW5kw6puY2lhICgqKnJvbGxpbmcgbWVhbioqDQpkZSAxMiBtZXNlcyk7ICRTJCDDqSBhIHNhem9uYWxpZGFkZTsgZSAkSSQgw6kgYSBpcnJlZ3VsYXJpZGFkZS5cDQpTdWdlcmltb3MgYXNzaXN0aXIsIHBhcmEgbWFpb3JlcyBlc2NsYXJlY2ltZW50b3MgYWNlcmNhIGRvcyBhc3BlY3Rvcw0KdGVvcmljb3MgZG8gbW9kZWxvIGRlIGRlY29tcG9zacOnw6NvLCBhbyB2w61kZW8gW0RlY29tcG9zacOnw6NvIGRlIHPDqXJpZXMNCnRlbXBvcmFpc10oaHR0cHM6Ly95b3V0dS5iZS9QUHVtSERXQkNjQSAiU8OJUklFUyBURU1QT1JBSVMgLVBQR0NDLTIwMjEuMTogMDNCIERlY29tcG9zacOnw6NvIGRlIHPDqXJpZXMgdGVtcG9yYWlzIiksDQpkZSBub3NzYSBhdXRvcmlhLg0KDQojIERhZG9zDQoNCkZhcmVpIGRlIGR1YXMgZm9ybWFzIHBhcmEgbyBsZWl0b3IuIFVtYSBjYXJyZWdhIGRpcmV0byBkbyBzaXRlIGRvIEJhbmNvDQpDZW50cmFsIGRvIEJyYXNpbCBjb20gbyBwYWNvdGUgYEJFVFNgIChGRVJSRUlSQSwgU1BFUkFOWkEgZSBDT1NUQSwgMjAxOCkNCmUgYSBvdXRyYSBldSBnZXJlaSBhIGVzdHJ1dHVyYSBpZMOqbnRpY2EgcGVsYSBmdW7Dp8OjbyBgZHB1dCgpYCBwYXJhIG9zDQpsZWl0b3JlcyBxdWUgbsOjbyBjb25zZWd1aXJlbSBwb3IgcXVhbHF1ZXIgbW90aXZvIG8gYWNlc3NvIGFvIHNpdGUgZG8NCkJhbmNvIENlbnRyYWwgKGFzIHZlemVzIHZlam8gaXNzbyBvY29ycmVyIGRlcGVuZGVuZG8gZG9zIGJsb3F1ZWlvcyBkYQ0Kc3VhIHJlZGUgZGUgaW50ZXJuZXQpLiBBIGZvcm1hIHBlbG8gZHB1dCBhc3N1bWUgbyBub21lIHZhcmVqb21zMg0KZW5xdWFudG8gYSBleHRyYcOtZGEgcGVsbyBCRVRTIHRlbSBub21lIHZhcmVqb21zLiBFc2NsYXJlw6dvIGFvIGxlaXRvciBxdWUNCmFww7NzIGJhaXhhciBhIHPDqXJpZSBwZWxvIEJFVFMsIGZpeiBvIGRwdXQgZSBhIHBhcnRpciBkZSBlbnTDo28sIHJlbm9tZWVpDQphIHPDqXJpZSBkZSB0cmFiYWxobyB2YXJlam9tczIgY29tbyB2YXJlam9tcyBlIGRlc2FiaWxpdGVpIG8gYmxvY28NCihgQ2h1bmtgKSBxdWUgYWNlc3NhIG8gQkVUUyBhcGVuYXMgcGFyYSBhZ2lsaXphciBvcyBjw6FsY3Vsb3MuDQoNCiAgICBsaWJyYXJ5KEJFVFMpDQogICAgIyBQZWdhbmRvIGFzIHPDqXJpZXMgYSBwYXJ0aXIgZG8gc2l0ZSBkbyBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbA0KICAgICMgw41uZGljZSBkZSB2b2x1bWUgZGUgdmVuZGFzIG5vIHZhcmVqbyBUb3RhbCBkZSBNYXRvIEdyb3NzbyBkbyBTdWwNCiAgICAjIG1lbnNhbCBhIHBhcnRpciBkZSBqYW4vMjAwMCBhdMOpIGp1bmhvMjAxOSANCiAgICAjIDIzNCBvYnNlcnZhw6fDtWVzIG1lbnNhaXMNCiAgICB2YXJlam9tcyA8LSBCRVRTZ2V0KDE0NzkpIA0KICAgIHByaW50KHZhcmVqb21zKQ0KICAgIGNsYXNzKHZhcmVqb21zKQ0KICAgIGRwdXQodmFyZWpvbXMpICAjIG9ww6fDo28gcGFyYSB0ZXIgb3MgZGFkb3MgY29tbyBuYSBzdHJ1Y3R1cmUgYWJhaXhvDQoNCmBgYHtyfQ0KIyB1c28gYSBvcMOnw6NvIGFiYWl4byBwYXJhIHF1YW5kbyBhIGludGVybmV0IHBvciBhbGd1bSBtb3Rpdm8gZmFsaGENCnZhcmVqb21zIDwtIHN0cnVjdHVyZShjKDM1LjIsIDM1LjYsIDM5LjIsIDQwLjUsIDQxLjYsIDQwLjQsIDQwLjgsIDM4LjcsIDM3LjMsIA0KMzcuNiwgMzUuNiwgNDcuNCwgMzQuMiwgMzIuMiwgMzgsIDM3LjUsIDM4LjgsIDM1LCAzOC40LCA0MC4yLCANCjM4LjIsIDM5LjMsIDM2LCA0Ni4zLCAzNi40LCAzNCwgMzksIDM3LjgsIDM4LjksIDM1LjMsIDM3LjIsIDM4LjEsIA0KMzUuNiwgMzguMywgMzUuNiwgNDUuNywgMzIuMiwgMzEuNiwgMzUuMiwgMzYuOCwgMzcuNSwgMzQuOCwgMzguNCwgDQozOC4xLCAzNywgMzksIDM3LjMsIDQ5LCAzNS44LCAzNS4zLCA0MC4yLCA0MS4zLCA0My45LCA0MS42LCA0NS45LCANCjQyLjMsIDQyLjIsIDQ0LCA0MS4zLCA1Ni45LCAzOC41LCAzOC41LCA0NS4zLCA0My42LCA0Ni4yLCA0NC4zLCANCjQ3LjUsIDQ2LjUsIDQ2LjQsIDQ2LCA0NC4xLCA2MSwgNDIsIDQwLjIsIDQ0LjYsIDQ0LjUsIDQ3LjgsIDQ1LjMsIA0KNDYuNSwgNDguNSwgNDcuNywgNTAuMiwgNDkuMywgNjQuNSwgNDcsIDQ2LjgsIDUxLCA1MC41LCA1NSwgNTEuMywgDQo1Mi44LCA1NS4zLCA1NC44LCA1NS42LCA1NS4zLCA3Mi4yLCA1NC41LCA1Mi4xLCA1Ni4yLCA1Ny4yLCA2MC44LCANCjU2LjEsIDYxLjgsIDYxLjYsIDU5LjgsIDYzLjMsIDU3LjcsIDc3LjQsIDYxLjQsIDUxLjksIDU3LjMsIDU3LjksIA0KNjEuOSwgNTcuMywgNjEuMSwgNjEuMSwgNjAuNiwgNjUuNiwgNjMuNSwgODMuMSwgNjQuMSwgNjAuMiwgNjcuOCwgDQo2Ny4xLCA3Mi44LCA2OC41LCA3MS4xLCA2OS4zLCA2OS45LCA3MS4xLCA2Ny45LCA5Mi43LCA2Ny41LCA2NC44LCANCjY5LjEsIDY5LjQsIDc5LjYsIDcwLjIsIDczLjgsIDcyLjUsIDcxLjMsIDc1LjYsIDc0LjcsIDEwMC44LCANCjc5LjUsIDc1LjcsIDgyLjQsIDc4LCA4NC44LCA4My4yLCA4NC44LCA4OC41LCA4Ni4zLCA5MS43LCA5Mi44LCANCjExMS40LCA5Mi44LCA4My43LCA5Mi41LCA4OC4zLCA5My45LCA4OC44LCA5NiwgOTUuOSwgOTMuMiwgOTguMywgDQoxMDAuNSwgMTI4LjgsIDk3LjIsIDkwLjIsIDk0LjMsIDk0LjQsIDEwMS4xLCA5MiwgOTYuNCwgOTguMiwgDQo5Ny42LCAxMDUuOCwgMTAzLjEsIDEyOS42LCA5OS42LCA4Ny44LCA5NywgOTQuOCwgOTguNiwgOTMuNCwgDQo5OC40LCA5Ni40LCA5Mi41LCAxMDAuNiwgOTcuMiwgMTI0LjUsIDkxLjUsIDg1LjEsIDkxLjYsIDg4LjUsIA0KOTIuMiwgODcuNCwgOTAuNSwgODguMSwgODUuMiwgODkuNCwgOTMuNCwgMTE2LjksIDkwLjgsIDg0LCA4OS43LCANCjg2LjMsIDkwLCA4Ny4zLCA5MC44LCA5My41LCA5My43LCA5MS40LCA5My41LCAxMTQuMSwgODcuOCwgODEuMSwgDQo5NC41LCA4My4yLCA4OS45LCA4OC44LCA4OS4zLCA5My43LCA5My41LCA5Ni4zLCAxMDEuMywgMTE4LjMsIA0KOTMuOCwgODUuMiwgOTAsIDg2LjYsIDkwLCA4NC41KSwgLlRzcCA9IGMoMjAwMCwgMjAxOS40MTY2NjY2NjY2NywgDQoxMiksIGNsYXNzID0gInRzIikNCmNsYXNzKHZhcmVqb21zKQ0KYGBgDQoNCiMgUHJpbWVpcmFzIGFuw6FsaXNlcw0KDQpJbmljaWFsbWVudGUgb2xoYXJlaSBhcyBlc3RhdMOtc3RpY2FzIGRlc2NyaXRpdmFzIGRhIHPDqXJpZS4gRW0gc2VndWlkYQ0KZmFyZWkgdW0gcGxvdCBiw6FzaWNvIGRhIHPDqXJpZSBlIG8gcGxvdCBwZWxvIHBhY290ZSBgZHlncmFwaHNgLCDDunRpbCBwYXJhDQp2ZXIgb3MgcG9udG9zIGRlIHBpY29zIGUgbW9tZW50b3MgZXNwZWPDrWZpY29zLg0KDQpgYGB7cn0NCiMgZXN0YXRpc3RpY2FzIGJhc2ljYXMNCnN1bW1hcnkodmFyZWpvbXMpDQojIE1pbi4gMXN0IFF1LiAgTWVkaWFuICAgIE1lYW4gM3JkIFF1LiAgICBNYXguIA0KIyAzMS42MCAgIDQ0LjAyICAgNjQuMzAgICA2Ny4xNyAgIDkwLjAwICAxMjkuNjAgDQoNCiMgcGxvdCBiYXNpY28NCiMgbGVtYnJhciBxdWUgZW0gY2xhc3MoKSwgZWxlIGrDoSBpbmRpY291IHF1ZSBlcmEgdHMgPSBzZXJpZSB0ZW1wb3JhbA0KcGxvdCh2YXJlam9tcykgDQojIHBlbG8gcGFjb3RlIGR5Z3JhcGggZMOhIG1haXMgb3DDp8O1ZXMNCmxpYnJhcnkoZHlncmFwaHMpDQpkeWdyYXBoKHZhcmVqb21zKQ0KYGBgDQoNCsOJIHBvc3NpdmVsIHZpc3VhbGl6YXIgbm9zIHBsb3RzIGFjaW1hOiBzYXpvbmFsaWRhZGUgKHBvciBleGVtcGxvLCBwaWNvcw0KZW0gZGV6ZW1icm8gZGUgY2FkYSBhbm8pOyBhIHRlbmTDqm5jaWEgYXBhcmVudGVtZW50ZSBjcmVzY2VudGUgYXTDqSAyMDE0IGUNCmRlY3Jlc2NlIGNvbSBhICJjcmlzZSIgYnJhc2lsZWlyYTsgZSB1bWEgYXBhcmVudGUgbsOjby1lc3RhY2lvbmFyaWVkYWRlDQoobcOpZGlhIGUgdmFyacOibmNpYSBtdWRhbSBubyB0ZW1wbykuIEVtIG91dHJhIHBvc3RhZ2VtIGFwbGljYXJlaSBvIHRlc3RlDQpkZSByYWl6IHVuaXTDoXJpYSBuYSBzw6lyaWUgcGFyYSBhdmFsaWFyIGEgZXN0YWNpb25hcmllZGFkZSBkZSBtb2RvIG1haXMNCmV4cGzDrWNpdG8uDQoNCiMgRGVjb21wb3Npw6fDo28gZGEgc8OpcmllDQoNCkZhcmVpIGFzIGRlY29tcG9zaWNvZXMgYWRpdGl2YSBlIG11bHRpcGxpY2F0aXZhIHBlbGEgZnVuw6fDo28gYGRlY29tcG9zZWAuDQpFbGEgYXBsaWNhIHVtYSBgcm9sbGluZyBtZWFuYCBuYSBmcmVxdcOqbmNpYSBkYSBzw6lyaWUgKG1lbnNhbCBzZXLDoSBpZ3VhbA0KYSAxMiBtZXNlcykgb2J0ZW5kbyBhIHRlbmTDqm5jaWEgKCp0cmVuZCopLCBvIGZhdG9yIHNhem9uYWwgbcOpZGlvIChxdWUNCnNlcsOhIGEgY29tcG9uZW50ZSBkYSBzYXpvbmFsaWRhZGUpIGUgbyBjb21wb25lbnRlIGRlIGlycmVndWxhcmlkYWRlLiBOb3MNCm9iamV0b3MgZGVjb21wb3NpY2FvLmFkIGUgZGVjb21wb3NpY2FvLm11bHQgZXN0YXLDo28gb3MgdsOhcmlvcw0KY29tcG9uZW50ZXMgY2FsY3VsYWRvcyBlIHF1ZSBwb2RlbSBzZXIgcGxvdGFkb3MuDQoNCmBgYHtyfQ0KZGVjb21wb3NpY2FvLmFkPC1kZWNvbXBvc2UodmFyZWpvbXMpICAgIyBhZGl0aXZhDQpkZWNvbXBvc2ljYW8ubXVsdDwtZGVjb21wb3NlKHZhcmVqb21zLHR5cGUgPSAibXVsdGlwbGljYXRpdmUiKSAgICMgbXVsdGlwbGljYXRpdmENCg0KIyBncmFmaWNvIGRhIGRlY29tcG9zaWNhbyBhZGl0aXZhDQpwbG90KGRlY29tcG9zaWNhby5hZCkNCg0KIyBncmFmaWNvIGRhIGRlY29tcG9zaWNhbyBtdWx0aXBsaWNhdGl2YQ0KcGxvdChkZWNvbXBvc2ljYW8ubXVsdCkNCmBgYA0KDQojIyBUZW5kw6puY2lhDQoNClBvZGVtb3MgdmVyaWZpY2FyIHF1ZSBhIHPDqXJpZSBgdHJlbmRgIGZvaSBvYnRpZGEgZGEgbWVzbWEgZm9ybWEgcXVlIHVtYQ0KKnJvbGxpbmcgbWVhbiogZGUgMTIgbWVzZXMgY29tbyBvIGPDs2RpZ28gYWJhaXhvIGFwcmVzZW50YS4gTyBsZWl0b3IgcG9kZQ0KdmVyaWZpY2FyIHF1ZSDDqSBhIG1lc21hIGluZGVwZW5kZW50ZSBkZSBzZXIgYWRpdGl2YSBvdSBtdWx0aXBsaWNhdGl2YS4NCg0KYGBge3J9DQojIG9idGVuZG8gYSB0ZW5kZW5jaWENCmxpYnJhcnkoZnBwMikNCnRlbmQ8LW1hKHZhcmVqb21zLCAxMikNCnByaW50KGNiaW5kKHRlbmQsZGVjb21wb3NpY2FvLmFkJHRyZW5kLGRlY29tcG9zaWNhby5tdWx0JHRyZW5kKSkNCg0KIyBwbG90IGNvbmp1bnRvIGNvbSBmdW7Dp8OjbyBhdXRvcGxvdCBkbyBmcHAyDQphdXRvcGxvdCh2YXJlam9tcywgc2VyaWVzPSJEYWRvcyIpICsNCiAgYXV0b2xheWVyKHRlbmQsIHNlcmllcz0idGVuZCIpICsNCiAgeGxhYigiQW5vIikgKyB5bGFiKCLDjW5kaWNlIikgKw0KICBnZ3RpdGxlKCLDjW5kaWNlIGRlIHZvbHVtZSBkZSB2ZW5kYXMgbm8gdmFyZWpvIFRvdGFsIA0KICAgICAgICAgIGRlIE1hdG8gR3Jvc3NvIGRvIFN1bCIpICsNCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9YygiRGFkb3MiPSJncmV5NTAiLCJ0ZW5kIj0icmVkIiksDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWtzPWMoIkRhZG9zIiwidGVuZCIpKQ0KYGBgDQoNCiMjIERlY29tcG9zacOnw6NvIFgxMQ0KDQpVbSBtw6l0b2RvIG1haXMgY29tdW0gKG1haXMgYXR1YWwsIHBvaXMgbyBkZSBkZWNvbXBvc2nDp8OjbyBjbMOhc3NpY28gw6kgZG9zDQphbm9zIDE5MjApIMOpIHBvciBtZWlvIGRhIG1ldG9kb2xvZ2lhIGRvIENlbnN1cyBCdXJlYXUgZG9zIEVzdGFkb3MgVW5pZG9zDQpkYSBBbcOpcmljYSwgZSBjaGFtYWRvIGRlIFgxMSAoVVMgQlVSRUFVIE9GIFRIRSBDRU5TVVMsIDIwMTMpLiBFbSBvdXRyYQ0KcG9zdGFnZW0gZmFyZWkgdW0gZXhlbXBsbyBkZSBhbsOhbGlzZSBkbyBtw6l0b2RvIFgxMy1BUklNQSBTRUFUUywgYSB2ZXJzw6NvDQptYWlzIHJlY2VudGUgcXVlIHV0aWxpemEgb3V0cmFzIGFib3JkYWdlbnMgYWzDqW0gZG8gWDExLlwNCk8gcHJpbWVpcm8gcGFzc28gw6kgY2hhbWFyIG8gcGFjb3RlIGBzZWFzb25hbGAgKFNBWCBlIEVEREVMQlVFVFRFTCwNCjIwMTgpLiBDcmlvIG8gb2JqZXRvIGZpdCBxdWUgY29udMOpbSBhcyBzYcOtZGFzIGRhIGZ1bsOnw6NvIGBzZWFzKHgxMT0iIilgDQpjb20gYSBvcMOnw6NvIFgxMSBhcGxpY2FkYSBzb2JyZSBhIHPDqXJpZSB2YXJlam9tcy4gTmEgc2VxdcOqbmNpYSwgZmHDp28gbw0KcGxvdCBwZWxhIGZ1bsOnw6NvIGBhdXRvcGxvdGAgZG8gcGFjb3RlIGBmcHAyYCAoSFlORE1BTiwgMjAxOCkuDQoNCmBgYHtyfQ0KIyBkZWNvbXBvc2nDp8OjbyBwZWxvIFgxMSBkbyBDZW5zdXMgQnVyZWF1DQpsaWJyYXJ5KHNlYXNvbmFsKQ0KZml0PC0gc2Vhcyh2YXJlam9tcyx4MTE9IiIpDQojdmFyZWpvbXMgJT4lIHNlYXMoeDExPSIiKSAtPiBmaXQgICAjIHVzbyBhIHNlcmllICd2YXJlam9tcycsIGFwbGljbyBvICdzZWFzJyB4MTEgZSBnZXJvICdmaXQnDQpsaWJyYXJ5KGZwcDIpDQphdXRvcGxvdChmaXQpICsNCiAgZ2d0aXRsZSgiRGVjb21wb3Npw6fDo28gWDExIGRlIE1hdG8gR3Jvc3NvIGRvIFN1bA0KICBkbyDDjW5kaWNlIGRlIHZvbHVtZSBkZSB2ZW5kYXMgbm8gdmFyZWpvIHRvdGFsIikNCm5hbWVzKGZpdCkgICAjIHBhcmEgZW50ZW5kZXIgbyBxdWUgZXN0YSBkZW50cm8gZGUgZml0DQpgYGANCg0KRGVudHJvIGRvIG9iamV0byBmaXQsIGV4aXN0ZSBvIGxvY2FsIGVtIHF1ZSBlc3TDo28gYXMgc8Opcmllcw0KKGBmaXQkc2VyaWVzYCkgZSBkYWRvcyAoYGZpdCRkYXRhYCwgcXVlIGdlcmFyw6NvIG9zIGdyw6FmaWNvcykuIFVtIHByaW50DQpkYSBwYXJ0ZSBhcm1hemVuYWRhIGVtIGBmaXQkc2VyaWVzYCBtb3N0cmFyw6EgYXMgdsOhcmlhcyBzw6lyaWVzIGVtIHN1YQ0Kbm9tZW5jbGF0dXJhIGNvbW8gY29uc3RhIG5vIGRvY3VtZW50byBvcmlnaW5hbCBkbyBVUyBDZW5zdXMgQnVyZWF1LiBQYXJhDQptZWxob3IgZW50ZW5kZXIgYXMgbGVnZW5kYXMgZG8gWDExLCByZWNvbWVuZG8gdXNhciBvIG1hbnVhbCBkZQ0KcmVmZXLDqm5jaWEgZG8gWDEzLUFSSU1BIFNFQVRTIChVUyBCVVJFQVUgT0YgVEhFIENFTlNVUywgMjAxMykuIERlc2NyZXZvDQphYmFpeG8gYXBlbmFzIG9zIGPDs2RpZ29zIHF1ZSBhcGFyZWNlbSBuYXMgc2HDrWRhcyBkbyBgc2Vhc2AuDQoNCioqTGVnZW5kYXMgZG8gWDExKioNCg0KICAgICMgZml0JGRhdGFbLCdmaW5hbCddIMOpIGEgZml0JGRhdGFbLCdzZWFzb25hbGFkaiddICDDiSBBIFPDiVJJRSBDT00gQUpVU1RFIFNBWk9OQUwNCiAgICAjIGZpbmFsID0gc8OpcmllIGNvbSBhanVzdGUgc2F6b25hbCA9IGRlc3Nhem9uYWxpemFkYQ0KICAgICMgZDEwID0gc2Vhc29uYWwgICAgICAgIMOJIE8gQ09NUE9ORU5URSBTQVpPTkFMIC0gZmF0b3Igc2F6b25hbA0KICAgICMgZDExID0gc2Vhc29uYWxhZGogICAgIMOJIEEgU8OJUklFIERFU1NBWk9OQUxJWkFEQQ0KICAgICMgZDEyID0gdHJlbmQgICAgICAgICAgIMOJIEEgVEVORMOKTkNJQSA9IFJPTExJTkcgTUVBTg0KICAgICMgZDEzID0gaXJyZWd1bGFyICAgICAgIMOJIEEgSVJSRUdVTEFSSURBREUNCiAgICAjIGQxNiA9IGFkanVzdGZhYyAgICAgICDDiSBPIEZBVE9SIFNBWk9OQUwgQUpVU1RBRE8gUEFSQSBTQVpPTkFMSURBREUgRSBUUkFESU5HIERBWVMNCiAgICAjIGUxOCA9IGZpbmFsIGFkanVzdG1lbnQgcmF0aW9zIChvcmlnaW5hbCBzZXJpZXMgLyBzZWFzb25hbGx5IGFkanVzdGVkIHNlcmllcykNCiAgICAjIGQxNiA9IGUxOCAocGFyZWNlIHF1ZSBzaW0pDQogICAgIyByc2QgPSByZXNpZHVvcyBlc3RpbWFkb3MNCg0KYGBge3J9DQpwcmludChmaXQkc2VyaWVzKQ0KYGBgDQoNClByaW1laXJvIGFwbGljbyBvIGBhdHRhY2hgIHBhcmEgcXVlIG8gUiBlbnRlbmRhIG9zIG5vbWVzIGRlbnRybyBkbw0Kb2JqZXRvIGNyaWFkbyBgZml0JHNlcmllc2AgKGQxMSwgZDE2LCBlMTggZXRjKS4gRGVwb2lzIGZhw6dvIHVtIHRlc3RlDQpwYXJhIHZlcmlmaWNhciBzZSBhIHPDqXJpZSBlMTggcG9kZSBzZXIgZGFkYSBwZWxhIGbDs3JtdWxhIChlMTggPSAnc8OpcmllDQpvcmlnaW5hbCcgLyAnc8OpcmllIGFqdXN0YWRhIHBhcmEgc2F6b25hbGlkYWRlJykuIEZhw6dvIG9zIHByaW50cyBwYXJhIHZlcg0KcXVlIG9zIHZhbG9yZXMgY2FsY3VsYWRvcyBjb25mZXJlbSBlIHZlciBxdWUgYSB0w6puZGVuY2lhIG9idGlkYSBwZWxhDQoqcm9sbGluZyBtZWFuKiBkaWZlcmUgZGEgdGVuZMOqbmNpYSBvYnRpZGEgcGVsbyBYMTEuDQoNCmBgYHtyfQ0KYXR0YWNoKGZpdCRzZXJpZXMpICAgICMgcGFyYSBxdWUgbyBSIGVudGVuZGEgb3Mgbm9tZXMgZGVudHJvIGRlIGZpdCRzZXJpZXMNCnRlc3RlID0gdmFyZWpvbXMgLyBkMTEgICAjIGNvbmZlcmVuY2lhIGRlIGUxOA0KcHJpbnQoY2JpbmQodmFyZWpvbXMsZDExLHRlc3RlLGUxOCxmaXQkZGF0YSxkMTYpKQ0KYGBgDQoNClBvZGUtc2UgdmVyIGFjaW1hIChjb25mZXJpcikgcXVlIG9zIHZhbG9yZXMgY2FsY3VsYWRvcyBlbSB0ZXN0ZSBzw6NvDQppZ3VhaXMgYW9zIGRlIGUxOCBlIGRlIGQxNiBlIGRlIGBmaXQkZGF0YS5hZGp1c3RmYWNgLiBBYmFpeG8sIHBvZGUtc2UgZGUNCmZvcm1hIHNlbWVsaGFudGUgY29uZmVyaXIgcXVlIGEgdGVuZMOqbmNpYSBwZWxhIGRlY29tcG9zacOnw6NvIGNsw6Fzc2ljYQ0KKG9idGlkbyBwZWxvICdkZWNvbXBvc2UoKScpIGRpZmVyZSBkYSB0ZW5kZW5jaWEgb2J0aWRhIHBlbG8geDExIGVtDQpgZml0JGRhdGFbLCd0cmVuZCddKWAuIElzc28gb2NvcnJlIHBvcnF1ZSBvIG3DqXRvZG8gZGEgZGVzc2F6b25hbGl6YcOnw6NvDQpkbyBYMTEgw6kgc3VwZXJpb3IgYW8gZGEgZGVjb21wb3Npw6fDo28gY2zDoXNzaWNhIChlIG1haXMgbW9kZXJubyBxdWUgYQ0KY2zDoXNzaWNhKS4NCg0KYGBge3J9DQpwcmludChjYmluZCh0ZW5kLGRlY29tcG9zaWNhby5hZCR0cmVuZCxmaXQkZGF0YVssJ3RyZW5kJ10pKQ0KYGBgDQoNCkFnb3JhIGVudMOjbyBmYcOnbyBvIGdyw6FmaWNvIGRhcyBzw6lyaWUgZGEgZGVjb21wb3Npw6fDo28gWDExIHBhcmENCnZpc3VhbGl6YcOnw6NvLg0KDQpgYGB7cn0NCmF1dG9wbG90KHZhcmVqb21zLCBzZXJpZXM9IkRhdGEiKSArDQogIGF1dG9sYXllcih0cmVuZGN5Y2xlKGZpdCksIHNlcmllcz0iVHJlbmQiKSArDQogIGF1dG9sYXllcihzZWFzYWRqKGZpdCksIHNlcmllcz0iU2Vhc29uYWxseSBBZGp1c3RlZCIpICsNCiAgeGxhYigiQW5vIikgKyB5bGFiKCJJbmRleCIpICsNCiAgZ2d0aXRsZSgiw41uZGljZSBkZSB2b2x1bWUgZGUgdmVuZGFzIG5vIHZhcmVqbyBUb3RhbCBkZSBNYXRvIEdyb3NzbyBkbyBTdWwiKSArDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPWMoImdyYXkiLCJibHVlIiwicmVkIiksDQogICAgICAgICAgICAgYnJlYWtzPWMoIkRhdGEiLCJTZWFzb25hbGx5IEFkanVzdGVkIiwiVHJlbmQiKSkNCmBgYA0KDQojIFJlZmVyw6puY2lhcyB7I1JlZmVyw6puY2lhcyAudW5udW1iZXJlZH0NCg0KRkVSUkVJUkEsIFBlZHJvIENvc3RhOyBTUEVSQU5aQSwgVGFsaXRoYTsgQ09TVEEsIEpvbmF0aGEgKDIwMTgpLiBCRVRTOg0KQnJhemlsaWFuIEVjb25vbWljIFRpbWUgU2VyaWVzLiBSIHBhY2thZ2UgdmVyc2lvbiAwLjQuOS4gRGlzcG9uw612ZWwgZW06DQo8aHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1CRVRTPi4NCg0KSFlORE1BTiwgUm9iLiAoMjAxOCkuIGZwcDI6IERhdGEgZm9yICJGb3JlY2FzdGluZzogUHJpbmNpcGxlcyBhbmQNClByYWN0aWNlIiAoMm5kIEVkaXRpb24pLiBSIHBhY2thZ2UgdmVyc2lvbiAyLjMuIERpc3BvbsOtdmVsIGVtOg0KPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9ZnBwMj4uDQoNClNBWCBDLjsgRURERUxCVUVUVEVMLCBELiAoMjAxOCkuICJTZWFzb25hbCBBZGp1c3RtZW50IGJ5IFgtMTNBUklNQS1TRUFUUw0KaW4gUi4iICpKb3VybmFsIG9mIFN0YXRpc3RpY2FsIFNvZnR3YXJlKiwgKjg3KigxMSksIDEtMTcuIGRvaToNCjEwLjE4NjM3L2pzcy52MDg3LmkxMSAoVVJMOiA8aHR0cHM6Ly9kb2kub3JnLzEwLjE4NjM3L2pzcy52MDg3LmkxMT4pLg0KDQpVUyBCVVJFQVUgT0YgVEhFIENFTlNVUyAoMjAxMykuIFgtMTNBUklNQS1TRUFUUyBSZWZlcmVuY2UgTWFudWFsDQpBY2Nlc3NpYmxlIEhUTUwgT3V0cHV0IFZlcnNpb24uIFN0YWZmIFN0YXRpc3RpY2FsIFJlc2VhcmNoIERpdmlzaW9uLCBVUw0KQnVyZWF1IG9mIHRoZSBDZW5zdXMsIGRpc3BvbsOtdmVsIGVtOg0KPGh0dHA6Ly93d3cuY2Vuc3VzLmdvdi90cy94MTNhcy9kb2NYMTNBU0hUTUwucGRmPi4NCg==