Aula 3
Brenner Silva
22/08/2019
ENGD 02
Plano de Aula
O presente material apresentado contempla a segunda aula prática de Estatística Descritiva, contemplando uma breve introdução a séries
temporais (time series).
Para tal, será utilizado o dataset AirPassengers , que tem funcionalidade similar ao iris , porém estrutura de classe diferente ( ts ).
ggfortify ;
ggplot2 .
Em um momento final, haverá, também, uma breve introdução para aplicação do pacote dygraphs .
Série Temporal
Série temporal são nada mais que a colocação de observações, de modo sequencial, ao longo do tempo. As ts (time series) podem ser uni ou
multivariadas, e apresentar influência de fatores inerentes (covariáveis).
Este tipo de informação requer uma atenção a mais em relação ao df , pois, normalmente, é necessário verificar a adequação de classe ( class )
dos dados tabulados.
HANDS-ON
Inicialmente iremos carregar nosso dataset AirPassengers e verificar sua classe.
data("AirPassengers")
View(AirPassengers)
class(AirPassengers)
## [1] "ts"
Observe também que a estrutura visual do objeto AirPassengers apresentada no Ambiente de Trabalho é diferente do modelo convencional de
dataframe .
print(AirPassengers)
rpubs.com/brennerbiasi/intro_ts 1/7
14/09/2019 Aula 3
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949 112 118 132 129 121 135 148 148 136 119 104 118
## 1950 115 126 141 135 125 149 170 170 158 133 114 140
## 1951 145 150 178 163 172 178 199 199 184 162 146 166
## 1952 171 180 193 181 183 218 230 242 209 191 172 194
## 1953 196 196 236 235 229 243 264 272 237 211 180 201
## 1954 204 188 235 227 234 264 302 293 259 229 203 229
## 1955 242 233 267 269 270 315 364 347 312 274 237 278
## 1956 284 277 317 313 318 374 413 405 355 306 271 306
## 1957 315 301 356 348 355 422 465 467 404 347 305 336
## 1958 340 318 362 348 363 435 491 505 404 359 310 337
## 1959 360 342 406 396 420 472 548 559 463 407 362 405
## 1960 417 391 419 461 472 535 622 606 508 461 390 432
ôpa! Agora é possível entender um pouco melhor sobre esses dados. Os dados históricos são os totais mensais de passageiros (uni variado) da
companhia aérea Box & Jenkins, entre 1949 a 1960.
Mas, mesmo com outra classe é possível extrair informação? Sim, é possível. Entretanto é aconselhável o uso de pacotes específicos para ts
ou que seja feito manipulação de dados. Por ora utilizaremos funções residentes no R, através do pacote stats e base .
Em ts , uma análise inicial essencial é a verificação de gaps/missing data (dados faltantes - NA ), e isto pode ser verificado, de maneira genérica,
utilizando a função residente is.na() , onde contaremos (somaremos) a quantidade de observações que "é NA).
sum(is.na(AirPassengers))
## [1] 0
A frequência de observações (meses), bem como a ordem dos meses, podem ser facilmente verificadas, respectivamente, com as funções
frequency e cycle .
stats::frequency(AirPassengers)
## [1] 12
stats::cycle(AirPassengers)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949 1 2 3 4 5 6 7 8 9 10 11 12
## 1950 1 2 3 4 5 6 7 8 9 10 11 12
## 1951 1 2 3 4 5 6 7 8 9 10 11 12
## 1952 1 2 3 4 5 6 7 8 9 10 11 12
## 1953 1 2 3 4 5 6 7 8 9 10 11 12
## 1954 1 2 3 4 5 6 7 8 9 10 11 12
## 1955 1 2 3 4 5 6 7 8 9 10 11 12
## 1956 1 2 3 4 5 6 7 8 9 10 11 12
## 1957 1 2 3 4 5 6 7 8 9 10 11 12
## 1958 1 2 3 4 5 6 7 8 9 10 11 12
## 1959 1 2 3 4 5 6 7 8 9 10 11 12
## 1960 1 2 3 4 5 6 7 8 9 10 11 12
Nessa aula utilizaremos, nesse momento, os pacotes ggfortify (que pode ser entendido como uma extensão do ggplot2 , porém com
simplificações) e o pacote tseries .
O pacote ggfortify proporciona o uso da função autoplot , que permite realizar plots com boa estética e de modo bastante simplificado.
rpubs.com/brennerbiasi/intro_ts 2/7
14/09/2019 Aula 3
library(ggfortify)
autoplot(AirPassengers)
autoplot(AirPassengers) +
labs(x = "Data", y = "Número de Passageiros (1000's)",
title = "Passageiros de 1949 a 1961")
Perceba a simplicidade para realização deste plot, e também que ele aceita os mesmos comandos do pacote ggplot2 .
Entre os diversos tipos de estudos que podem ser concebidos utilizando a abordagem de séries temporais, podemos destacar as análises de
sazonalidade, tendência, estacionariedade, ciclicidade e autocorrelação como os mais simples e essenciais. Contudo, nesta aula, abordaremos
apenas a análise de sazonalidade e de tendências de modo visual.
Para tal, será necessário decompor a série original, que pode ser feita de modo multiplicativo ou aditivo (https://anomaly.io/seasonal-trend-
decomposition-in-r/index.html).
rpubs.com/brennerbiasi/intro_ts 3/7
14/09/2019 Aula 3
EXTRA!! E se desejado utilizar o ggplot2 ? Neste caso podemos utilizar o pacote zoo para facilitar a programação.
library(ggplot2)
library(zoo)
ggplot(df) +
geom_line(aes(x = Data, y = Passageiros)) +
theme(axis.text.x = element_text(angle = 90))
rpubs.com/brennerbiasi/intro_ts 4/7
14/09/2019 Aula 3
Para maiores aplicações de ggplot2 a ts , deixo como sugestão este link (http://www.sthda.com/english/articles/32-r-graphics-essentials/128-
plot-time-series-data-using-ggplot/).
E o dygraphs ?
library(dygraphs)
dygraphs::dygraph(AirPassengers)
650
600
550
500
450
400
350
300
250
200
150
100
1950 1960
mdeaths fdeaths
2800
rpubs.com/brennerbiasi/intro_ts 5/7
14/09/2019 Aula 3
2600
2400
2200
2000
1800
1600
1400
1200
1000
800
600
400
200
Jan 1974 Jan 1975 Jan 1976 Jan 1977 Jan 1978 Jan 1979
library(dplyr)
dygraphs::dygraph(df2) %>% dygraphs::dyRangeSelector()
mdeaths fdeaths
2500
2000
1500
1000
500
Jan 1974 Jan 1975 Jan 1976 Jan 1977 Jan 1978 Jan 1979
3500
3000
2500
2000
rpubs.com/brennerbiasi/intro_ts 6/7
14/09/2019 Aula 3
1500
1000
500
0
Jan 1974 Jan 1975 Jan 1976 Jan 1977 Jan 1978 Jan 1979
dygraphs::dygraph(df2) %>%
dygraphs::dySeries("mdeaths", label = "Maculino") %>%
dygraphs::dySeries("fdeaths", label = "Feminino") %>%
dygraphs::dyOptions(stackedGraph = TRUE) %>%
dygraphs::dyRangeSelector(height = 20)
Maculino Feminino
4000
3500
3000
2500
2000
1500
1000
500
0
Jan 1974 Jan 1975 Jan 1976 Jan 1977 Jan 1978 Jan 1979
rpubs.com/brennerbiasi/intro_ts 7/7