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).
Esta aula está disponível no RPubs e no GitHub.
Para pleno andamento da atividade, os discentes deverão verificar e, se necessário, verificar a necessidade de instalação dos seguintes pacotes:
ggfortify;ggplot2.
Em um momento final, haverá, também, uma breve introdução para aplicação do pacote dygraphs.
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.
No presente estudo prático, analisaremos apenas aspectos visuais de ts.
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.
Contudo, perceba que se solicitado o print no console, há informação “oculta” no objeto.
print(AirPassengers)
## 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
Estatística básicas podem ser extraídas
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.
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.
decomposeAP1 <- stats::decompose(AirPassengers, "multiplicative")
autoplot(decomposeAP1)
decomposeAP2 <- stats::decompose(AirPassengers, "additive")
autoplot(decomposeAP2)
EXTRA!! E se desejado utilizar o ggplot2? Neste caso podemos utilizar o pacote zoo para facilitar a programação.
library(ggplot2)
library(zoo)
df <- data.frame(Passageiros = as.matrix(AirPassengers),
Data = zoo::as.yearmon(time(AirPassengers)))
ggplot(df) +
geom_line(aes(x = Data, y = Passageiros)) +
theme(axis.text.x = element_text(angle = 90))
Para maiores aplicações de ggplot2 a ts, deixo como sugestão este link.
E o dygraphs?
library(dygraphs)
dygraphs::dygraph(AirPassengers)
ldeaths), homens (mdeaths) e mulheres (fdeaths).df2 <- cbind(mdeaths, fdeaths)
dygraphs::dygraph(df2)
library(dplyr)
dygraphs::dygraph(df2) %>% dygraphs::dyRangeSelector()
df3 <- cbind(mdeaths, fdeaths, ldeaths)
dygraphs::dygraph(df3)
dygraphs::dygraph(df2) %>%
dygraphs::dySeries("mdeaths", label = "Maculino") %>%
dygraphs::dySeries("fdeaths", label = "Feminino") %>%
dygraphs::dyOptions(stackedGraph = TRUE) %>%
dygraphs::dyRangeSelector(height = 20)