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
Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Decomposição de séries temporais. Campo Grande-MS, Brasil: RStudio/Rpubs, 2021. Disponível em https://rpubs.com/amrofi/decomposicao_time_series.
Nesta série do GDP per capita brasileiro de 1960 a 2017, é possível ver uma tendência crescente, embora com algumas oscilações no período de 1990 a 2000 e uma queda após 2011.
library(fpp3)
# Brazil
global_economy_br<-global_economy %>%
filter(Country == "Brazil") %>%
autoplot(GDP/Population) +
labs(title= "GDP per capita - Brazil, 1960-2017", y = "USD",
xlab("Ano"))
global_economy_br
Primeiro farei a média móvel da série do GDP per capita do Brasil. Um forma é fazer a média com uma janela temporal de, por exemplo, 5 anos.
bra_5MA <- global_economy %>%
filter(Country == "Brazil") %>%
mutate(
`5-MA` = slider::slide_dbl(GDP/Population, mean,
.before = 2, .after = 2, .complete = TRUE)
)
bra_3MA <- global_economy %>%
filter(Country == "Brazil") %>%
mutate(
`3-MA` = slider::slide_dbl(GDP/Population, mean,
.before = 1, .after = 1, .complete = TRUE)
)
O gráfico pode ser visualizado.
bra_5MA %>%
fabletools::autoplot(GDP/Population) +
geom_line(aes(y = `5-MA`), color = "#D55E00") +
geom_line(data = bra_3MA,aes(y=`3-MA`), color = "green")+
labs(y = "USD",
title = "GDP per capita do Brasil e Médias Móveis de 3 e 5 anos") +
guides(colour = guide_legend(title = "series"))+
theme(legend.position = "bottom")
Observe que o ciclo de tendência (em laranja) é mais suave do que a série original e captura o movimento principal da série temporal sem todas as flutuações menores. A ordem da média móvel determina a suavidade da estimativa do ciclo de tendência. Em geral, um período maior significa uma curva mais suave - compare a curva verde (3 anos) com a laranja (5 anos, mais suave).
Os dados vem do livro de Morettin e Toloi, Análise de Séries Temporais (https://www.ime.usp.br/~pam/ST.html), consumo no varejo de São Paulo, mensais de Jan/1984 a Out/1996, em https://www.ime.usp.br/~pam/CONSUMO.XLS.
Um exemplo semelhante consta em https://rpubs.com/amrofi/time_series_rstudio_intro, Figueiredo (2019), feito na época sem o tsibble.
library(fpp3)
dados <-structure(list(obs = structure(c(441763200, 444441600, 446947200,
449625600, 452217600, 454896000, 457488000, 460166400, 462844800,
465436800, 468115200, 470707200, 473385600, 476064000, 478483200,
481161600, 483753600, 486432000, 489024000, 491702400, 494380800,
496972800, 499651200, 502243200, 504921600, 507600000, 510019200,
512697600, 515289600, 517968000, 520560000, 523238400, 525916800,
528508800, 531187200, 533779200, 536457600, 539136000, 541555200,
544233600, 546825600, 549504000, 552096000, 554774400, 557452800,
560044800, 562723200, 565315200, 567993600, 570672000, 573177600,
575856000, 578448000, 581126400, 583718400, 586396800, 589075200,
591667200, 594345600, 596937600, 599616000, 602294400, 604713600,
607392000, 609984000, 612662400, 615254400, 617932800, 620611200,
623203200, 625881600, 628473600, 631152000, 633830400, 636249600,
638928000, 641520000, 644198400, 646790400, 649468800, 652147200,
654739200, 657417600, 660009600, 662688000, 665366400, 667785600,
670464000, 673056000, 675734400, 678326400, 681004800, 683683200,
686275200, 688953600, 691545600, 694224000, 696902400, 699408000,
702086400, 704678400, 707356800, 709948800, 712627200, 715305600,
717897600, 720576000, 723168000, 725846400, 728524800, 730944000,
733622400, 736214400, 738892800, 741484800, 744163200, 746841600,
749433600, 752112000, 754704000, 757382400, 760060800, 762480000,
765158400, 767750400, 770428800, 773020800, 775699200, 778377600,
780969600, 783648000, 786240000, 788918400, 791596800, 794016000,
796694400, 799286400, 801964800, 804556800, 807235200, 809913600,
812505600, 815184000, 817776000, 820454400, 823132800, 825638400,
828316800, 830908800, 833587200, 836179200, 838857600, 841536000,
844128000), class = c("POSIXct", "POSIXt"), tzone = "UTC"), t = c(1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
152, 153, 154), consumo = c(114.13, 110.79, 116.46, 111.57, 120.66,
121.15, 121.27, 127.02, 129.04, 133.3, 130.6, 179.39, 120.64,
114.05, 130.6, 118.26, 145.54, 135.13, 153.35, 159.95, 150.01,
164.93, 170.37, 220.96, 134.26, 133.11, 147.84, 164.46, 181.86,
170.44, 186.64, 174.21, 181.62, 194.16, 181.9, 232.01, 140.16,
130.78, 119.04, 120.73, 129.81, 111.04, 122.75, 133.95, 125.41,
132.05, 129.54, 176.37, 110.09, 113.25, 124.03, 110.63, 116.72,
124.63, 124.38, 130.27, 119.87, 115.75, 122.44, 162.43, 105.89,
115.59, 147, 131.7, 131.32, 136.66, 126.43, 134.88, 128.26, 125.32,
124.61, 166.11, 116.25, 96.93, 89.27, 101.87, 125.57, 113.31,
109.39, 127.33, 120.56, 117.73, 113.81, 147.25, 100.15, 95.11,
112.26, 109.39, 114.2, 113.8, 126.47, 128.36, 115.71, 116.09,
99.53, 127.27, 87.08, 85.67, 82.02, 98.2, 96.44, 90.23, 97.15,
95.08, 94, 93, 96.09, 129.21, 75.39, 77.7, 97.34, 84.97, 87.55,
86.64, 90.52, 95.4, 95.2, 95.8, 101.23, 128.49, 85.63, 82.77,
96.55, 81.33, 96.91, 83.76, 90.19, 114.84, 108.4, 106.05, 109.71,
143.86, 99.12, 99.28, 114.75, 106.13, 110.02, 108.07, 112.52,
113.87, 107.84, 112.12, 112.03, 139.37, 92.24, 93.56, 107.37,
102.89, 114.78, 102.88, 118.41, 119.23, 117.36, 122.06)), row.names = c(NA,
-154L), class = c("tbl_df", "tbl", "data.frame"))
Primeiro, converterei para tsibble.
dados_tsbl <- as_tsibble(dados, key = t, index = obs)
Farei as médias móveis de 12 meses em fim de período e de 3 meses centrada.
dados_MA <- dados_tsbl %>%
mutate(
`3-MA` = slider::slide_dbl(consumo, mean,
.before = 1, .after = 1, .complete = TRUE)
)
dados_MA <- dados_MA %>%
mutate(
`12-MA` = slider::slide_dbl(consumo, mean,
.before = 11, .complete = TRUE)
)
attach(dados_MA)
dados_MA[3:5] %>%
plot.ts(main="Consumo de Morettin e Toloi, Médias Móveis de 3 e 12 meses")
# calculo manual do IE
# multiplicativo
# farei com a série em formato ts
consumo.ts<-ts(dados_MA$consumo,start = c(1984,1),frequency = 12)
cons12.ma<-forecast::ma(consumo.ts,12)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
S<-100*consumo.ts/cons12.ma
View(S)
# tapply(S, cycle(S), mean) #fazendo assim eu nao consigo todos os meses
# farei uma janela para 1984,7 a 1996,4
Sw<-window(S, start=c(1984,7),end=c(1996,4))
IEM<-tapply(Sw, cycle(Sw), mean) # IE medio mensal
# agora somo todos os IEM e faço o IE
IEM.total<-sum(IEM)
IE<-12*IEM/IEM.total
IE
## 1 2 3 4 5 6 7 8
## 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457 1.0562029
## 9 10 11 12
## 1.0136767 1.0299569 1.0224863 1.3389367
plot(IE, type = "o")
# pelo stats::decompose, multiplicative
# decompose(x, type = c("additive","multiplicative"), filter = NULL)
cons.components<- decompose(consumo.ts, type=c("multiplicative"))
cons.components
## $x
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct
## 1984 114.13 110.79 116.46 111.57 120.66 121.15 121.27 127.02 129.04 133.30
## 1985 120.64 114.05 130.60 118.26 145.54 135.13 153.35 159.95 150.01 164.93
## 1986 134.26 133.11 147.84 164.46 181.86 170.44 186.64 174.21 181.62 194.16
## 1987 140.16 130.78 119.04 120.73 129.81 111.04 122.75 133.95 125.41 132.05
## 1988 110.09 113.25 124.03 110.63 116.72 124.63 124.38 130.27 119.87 115.75
## 1989 105.89 115.59 147.00 131.70 131.32 136.66 126.43 134.88 128.26 125.32
## 1990 116.25 96.93 89.27 101.87 125.57 113.31 109.39 127.33 120.56 117.73
## 1991 100.15 95.11 112.26 109.39 114.20 113.80 126.47 128.36 115.71 116.09
## 1992 87.08 85.67 82.02 98.20 96.44 90.23 97.15 95.08 94.00 93.00
## 1993 75.39 77.70 97.34 84.97 87.55 86.64 90.52 95.40 95.20 95.80
## 1994 85.63 82.77 96.55 81.33 96.91 83.76 90.19 114.84 108.40 106.05
## 1995 99.12 99.28 114.75 106.13 110.02 108.07 112.52 113.87 107.84 112.12
## 1996 92.24 93.56 107.37 102.89 114.78 102.88 118.41 119.23 117.36 122.06
## Nov Dec
## 1984 130.60 179.39
## 1985 170.37 220.96
## 1986 181.90 232.01
## 1987 129.54 176.37
## 1988 122.44 162.43
## 1989 124.61 166.11
## 1990 113.81 147.25
## 1991 99.53 127.27
## 1992 96.09 129.21
## 1993 101.23 128.49
## 1994 109.71 143.86
## 1995 112.03 139.37
## 1996
##
## $seasonal
## Jan Feb Mar Apr May Jun Jul
## 1984 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1985 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1986 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1987 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1988 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1989 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1990 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1991 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1992 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1993 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1994 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1995 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## 1996 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## Aug Sep Oct Nov Dec
## 1984 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1985 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1986 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1987 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1988 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1989 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1990 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1991 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1992 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1993 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1994 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1995 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
## 1996 1.0562029 1.0136767 1.0299569
##
## $trend
## Jan Feb Mar Apr May Jun Jul
## 1984 NA NA NA NA NA NA 126.55292
## 1985 133.40667 136.11542 138.36125 140.55292 143.52792 146.91708 149.21667
## 1986 164.01542 165.99667 167.90792 170.44292 172.14125 173.08208 173.78833
## 1987 155.84625 151.50667 147.48708 142.55708 137.78750 133.28750 129.71625
## 1988 126.68625 126.60083 126.21667 125.30667 124.33167 123.45500 122.69917
## 1989 128.69375 128.97125 129.51292 130.26125 130.75042 130.99417 131.57917
## 1990 120.02417 118.99958 118.36417 117.72708 116.96083 115.72500 114.26833
## 1991 115.79333 116.54792 116.38875 116.11833 115.45500 114.02750 112.65042
## 1992 103.20083 100.59250 98.30125 96.43458 95.32917 95.26667 94.86042
## 1993 92.56708 92.30417 92.36750 92.53417 92.86500 93.04917 93.44583
## 1994 94.45208 95.24833 96.60833 97.58542 98.36583 99.35958 100.56208
## 1995 110.13208 111.02208 110.95833 111.18792 111.53750 111.44708 110.97333
## 1996 109.53458 110.00333 110.62333 111.43417 NA NA NA
## Aug Sep Oct Nov Dec
## 1984 126.96000 127.68500 128.55292 129.86833 131.48750
## 1985 150.57833 152.09083 154.73417 158.17250 161.15708
## 1986 173.93708 172.64000 169.61792 165.62708 160.98333
## 1987 127.73292 127.21042 126.99750 126.03125 126.05208
## 1988 122.62167 123.67625 125.51125 126.99750 128.10708
## 1989 131.23333 128.05042 124.40208 122.91958 121.70708
## 1990 113.52167 114.40375 115.67500 115.51458 115.06125
## 1991 111.71250 110.05917 108.33292 107.12667 105.40458
## 1992 94.04125 94.34750 94.43458 93.51292 92.99292
## 1993 94.08375 94.26208 94.07750 94.31583 94.58583
## 1994 101.81208 103.25833 105.05000 106.62958 108.18875
## 1995 110.44833 109.90250 109.46000 109.52333 109.50542
## 1996 NA NA NA
##
## $random
## Jan Feb Mar Apr May Jun Jul
## 1984 NA NA NA NA NA NA 0.9598431
## 1985 1.0366261 0.9814219 0.9957447 0.9164827 1.0178221 0.9661237 1.0294031
## 1986 0.9383618 0.9392454 0.9288382 1.0510118 1.0604205 1.0343623 1.0757297
## 1987 1.0309464 1.0110610 0.8514482 0.9224709 0.9456365 0.8750710 0.9478643
## 1988 0.9961546 1.0477783 1.0366433 0.9616677 0.9423005 1.0603938 1.0153785
## 1989 0.9432045 1.0497723 1.1973567 1.1012776 1.0081234 1.0958289 0.9624586
## 1990 1.1102803 0.9540707 0.7956180 0.9425322 1.0776341 1.0284764 0.9588944
## 1991 0.9914613 0.9558493 1.0174974 1.0261317 0.9928399 1.0483008 1.1245370
## 1992 0.9672608 0.9975414 0.8801973 1.1091875 1.0154471 0.9948630 1.0258334
## 1993 0.9336101 0.9859786 1.1117098 1.0002067 0.9463025 0.9780459 0.9702947
## 1994 1.0392565 1.0178490 1.0542825 0.9078041 0.9888950 0.8854829 0.8983450
## 1995 1.0317056 1.0474183 1.0909681 1.0396971 0.9900944 1.0185673 1.0156174
## 1996 0.9653313 0.9962129 1.0238952 1.0057292 NA NA NA
## Aug Sep Oct Nov Dec
## 1984 0.9472352 0.9969767 1.0067674 0.9835182 1.0189520
## 1985 1.0057138 0.9730109 1.0348905 1.0534275 1.0240100
## 1986 0.9482733 1.0378218 1.1113964 1.0740979 1.0763803
## 1987 0.9928703 0.9725457 1.0095415 1.0052363 1.0449960
## 1988 1.0058422 0.9561471 0.8954045 0.9429109 0.9469631
## 1989 0.9730968 0.9881225 0.9780784 0.9914580 1.0193419
## 1990 1.0619513 1.0395934 0.9881630 0.9635763 0.9557981
## 1991 1.0878790 1.0371587 1.0404359 0.9086548 0.9017923
## 1992 0.9572457 0.9828743 0.9561650 1.0049608 1.0377344
## 1993 0.9600335 0.9963237 0.9886912 1.0497047 1.0145727
## 1994 1.0679391 1.0356302 0.9801568 1.0062619 0.9931113
## 1995 0.9761191 0.9679944 0.9945087 1.0003920 0.9505471
## 1996 NA NA NA
##
## $figure
## [1] 0.8723518 0.8537530 0.9479397 0.9180656 0.9962633 0.9520214 0.9983457
## [8] 1.0562029 1.0136767 1.0299569 1.0224863 1.3389367
##
## $type
## [1] "multiplicative"
##
## attr(,"class")
## [1] "decomposed.ts"
# pega os valores estimados do componente sazonal
cons.saz<-cons.components$seasonal
knitr::kable(cbind(IE=IE,CONS.SAZ=unique(cons.saz)))
IE | CONS.SAZ |
---|---|
0.8723518 | 0.8723518 |
0.8537530 | 0.8537530 |
0.9479397 | 0.9479397 |
0.9180656 | 0.9180656 |
0.9962633 | 0.9962633 |
0.9520214 | 0.9520214 |
0.9983457 | 0.9983457 |
1.0562029 | 1.0562029 |
1.0136767 | 1.0136767 |
1.0299569 | 1.0299569 |
1.0224863 | 1.0224863 |
1.3389367 | 1.3389367 |
plot(cons.components$figure, type = "o")
FIGUEIREDO, A.M.R. Apresentação das Séries Temporais com R. Campo Grande-MS, Brasil: RStudio/Rpubs, 2019. Disponível em: https://rpubs.com/amrofi/time_series_rstudio_intro. Accessed on March, 31st, 2021.
HYNDMAN, Rob. fpp3: Data for “Forecasting: Principles and Practice” (3rd Edition). R package version 0.4.0. 2021. Accessed on March, 31st, 2021.https://CRAN.R-project.org/package=fpp3
HYNDMAN, R.J.; ATHANASOPOULOS, G. Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. 2021. <OTexts.com/fpp3>. Accessed on March, 31st, 2021.
MORETTIN, Pedro A.; TOLOI, Clélia M.C. Análise de Séries Temporais. São Paulo: Edgard Blucher/ABE, 2006.