1 Biblioteca XTS extensible time-series (xts)

library(xts)
library(dplyr)
library(data.table)
db = fread("../data/dadosFormacaoTimeSeries.csv")
class(db)
## [1] "data.table" "data.frame"
db = as.xts(db)
class(db)
## [1] "xts" "zoo"
head(db)
##            yahoo microsoft citigroup dow_chemical
## 2015-01-02 50.17  44.30501  53.45259     42.48209
## 2015-01-05 49.13  43.89759  51.76803     41.16821
## 2015-01-06 49.21  43.25329  49.94556     40.50662
## 2015-01-07 48.59  43.80284  50.40857     40.44139
## 2015-01-08 50.23  45.09144  51.16711     41.44776
## 2015-01-09 49.72  44.71244  50.02437     41.38253
plot(db$yahoo)

plot.zoo(db$yahoo)

plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l")

plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "h")

plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "blue")

plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "p", col = "blue")
lines(as.zoo(db$yahoo),  col = "red")

plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "h")
lines(as.zoo(db$yahoo),  col = "red")

par(mfrow = c(2, 1))
plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "blue")
plot.zoo(db$microsoft, main = "Microsoft", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "red")

par(mfrow = c(2, 1), mex = 0.6, cex = 0.8)
plot.zoo(db$yahoo, main = "Yahoo", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "blue")
plot.zoo(db$microsoft, main = "Microsoft", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "red")

par(mfrow = c(1, 1))
plot.zoo(db$microsoft, main = "Comparativo de Ações", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "red")
lines(as.zoo(db$citigroup), col = "Blue")
axis(side = 4, at = pretty(db$citigroup))
legend(x = "topleft", legend = c("Microsoft", "Citigroup"), col = c("red", "blue"), lty = c(1,1))
abline(v = TRUE)

par(mfrow = c(1, 1))
plot.zoo(db$microsoft, main = "Comparativo de Ações", sub = "subtitulo",xlab = "aaa", ylab = "nnn", type = "l", col = "red")
lines(as.zoo(db$citigroup), col = "Blue")
lines(as.zoo(db$dow_chemical), col = "green")
legend(x = "topleft", legend = c("Microsoft", "Citigroup", "Dow Chemical"), col = c("red", "blue", "green"), lty = c(1,1))
abline(v = TRUE)

plot(db$microsoft)

plot(db$citigroup)

plot(db$dow_chemical)
abline(v = as.Date("2016-10-05"), col="red", lwd=3, lty=2)

plot.zoo(db$dow_chemical, main = "Dow Chemical")
abline(v = index(db$dow_chemical)[which(index(db$dow_chemical) == as.Date("2016-07-08"))], col = "red")
abline(h = mean(db$dow_chemical), col = "green")

2 Biblioteca Technical Trading Rules (TTR)

library(TTR)
db = fread("../data/appleAcoes.csv")
head(db)
db$Index = as.Date(db$Index)
db = as.xts(db)
class(db)
## [1] "xts" "zoo"
plot.zoo(db, main = "Cotacão Apple")

2.0.1 ROC

Rate of Change / Momentum Description Calculate the (rate of) change of a series over n periods.

retorno = ROC(db)
head(retorno)
##                    Apple
## 2015-01-02            NA
## 2015-01-05 -0.0285760403
## 2015-01-06  0.0000941282
## 2015-01-07  0.0139247906
## 2015-01-08  0.0377025087
## 2015-01-09  0.0010719293
retorno = na.omit(retorno)
plot.zoo(retorno, main = "Rate of Change / Momentum")

par(mfrow = c(1, 2))
plot(db$Apple, main = "Cotacão Apple")
plot.zoo(retorno, main = "Retorno Apple")

par(mfrow = c(1, 1))
hist(retorno, col = "green")
abline(v = mean(retorno), col = "red")
lines(density(retorno), col = "blue")

par(mfrow = c(1, 1))
hist(retorno, col = "green", probability = T, main = "Resultados Apple")
abline(v = mean(retorno), col = "red")
lines(density(retorno), col = "orange", lwd = 3)

boxplot(as.numeric(retorno$Apple))

par(mfrow = c(2, 1))
boxplot(as.numeric(retorno$Apple), horizontal = 1)
boxplot(as.numeric(rnorm(1000)), horizontal = 1)

par(mfrow = c(1, 1))
acf(retorno, main = "Autocorrelação de Valores Apple")

acf(retorno, main = "Autocorrelação de Valores Apple", lag.max = 10)

qqnorm(retorno, main = "Verificação de Normalidade")
qqline(retorno, col = "green")

par(mfrow = c(2,2))
hist(retorno, probability = 1, col = "green")
lines(density(retorno), col = "blue")

boxplot(as.numeric(retorno$Apple), horizontal = 1)

acf(retorno, main = "Autocorrelação de Valores Apple")

qqnorm(retorno, main = "Verificação de Normalidade")
qqline(retorno, col = "green")

3 Multivariados

dados = fread("../data/timeSeriesMultivar.csv")
glimpse(dados)
## Rows: 503
## Columns: 7
## $ Index       <date> 2015-01-05, 2015-01-06, 2015-01-07, 2015-01-08, 2015-01-0…
## $ sp500       <dbl> -0.0277431513, -0.0053304213, 0.0100815421, 0.0165076412, …
## $ citigroup   <dbl> -0.032022201, -0.035839143, 0.009227448, 0.014935802, -0.0…
## $ microsoft   <dbl> -0.0092383657, -0.0147861081, 0.0126252978, 0.0289937264, …
## $ apple       <dbl> -0.0285760376, 0.0000941334, 0.0139247880, 0.0377025087, 0…
## $ dowchemical <dbl> -0.0314161915, -0.0162011345, -0.0016116027, 0.0245801707,…
## $ yahoo       <dbl> -0.0209473321, 0.0016269680, -0.0126790861, 0.0331947093, …
dados$Index = as.Date(dados$Index)
glimpse(dados)
## Rows: 503
## Columns: 7
## $ Index       <date> 2015-01-05, 2015-01-06, 2015-01-07, 2015-01-08, 2015-01-0…
## $ sp500       <dbl> -0.0277431513, -0.0053304213, 0.0100815421, 0.0165076412, …
## $ citigroup   <dbl> -0.032022201, -0.035839143, 0.009227448, 0.014935802, -0.0…
## $ microsoft   <dbl> -0.0092383657, -0.0147861081, 0.0126252978, 0.0289937264, …
## $ apple       <dbl> -0.0285760376, 0.0000941334, 0.0139247880, 0.0377025087, 0…
## $ dowchemical <dbl> -0.0314161915, -0.0162011345, -0.0016116027, 0.0245801707,…
## $ yahoo       <dbl> -0.0209473321, 0.0016269680, -0.0126790861, 0.0331947093, …
dados = as.xts(dados)
class(dados)
## [1] "xts" "zoo"
plot(as.numeric(dados$sp500), as.numeric(dados$apple))
abline(reg = lm(as.numeric(dados$apple) ~as.numeric(dados$sp500)), col = "pink", lwd = 3)
abline(reg = lm(as.numeric(dados$apple) ~as.numeric(dados$apple)), col = "orange", lwd = 3)
abline(reg = lm(as.numeric(dados$apple) ~as.numeric(dados$citigroup)), col = "green", lwd = 3)
abline(reg = lm(as.numeric(dados$apple) ~as.numeric(dados$microsoft)), col = "blue", lwd = 3)
abline(reg = lm(as.numeric(dados$apple) ~as.numeric(dados$dowchemical)), col = "red", lwd = 3)
abline(reg = lm(as.numeric(dados$apple) ~as.numeric(dados$yahoo)), col = "yellow", lwd = 3)

plot(as.numeric(dados$sp500), as.numeric(dados$citigroup))

3.0.0.1 Matriz correlação

Correlação de Pearson: Relação linear entre duas variáveis Correlação de Spearman: Mede a dependencia estatística e a classificação de duas variáveis (não linear - monótona).

cor(dados, method = "pearson")
##                 sp500 citigroup microsoft     apple dowchemical     yahoo
## sp500       1.0000000 0.5097953 0.3743215 0.3576966   0.5217243 0.2900962
## citigroup   0.5097953 1.0000000 0.4841408 0.4291841   0.5085190 0.4029490
## microsoft   0.3743215 0.4841408 1.0000000 0.5133469   0.3954523 0.4329388
## apple       0.3576966 0.4291841 0.5133469 1.0000000   0.3627755 0.3413626
## dowchemical 0.5217243 0.5085190 0.3954523 0.3627755   1.0000000 0.2938749
## yahoo       0.2900962 0.4029490 0.4329388 0.3413626   0.2938749 1.0000000
cor(dados, method = "spearman")
##                 sp500 citigroup microsoft     apple dowchemical     yahoo
## sp500       1.0000000 0.5192579 0.4244237 0.3518853   0.5316235 0.3262037
## citigroup   0.5192579 1.0000000 0.4976477 0.4374850   0.5607511 0.3780730
## microsoft   0.4244237 0.4976477 1.0000000 0.5128477   0.4684114 0.4448179
## apple       0.3518853 0.4374850 0.5128477 1.0000000   0.3681791 0.3680715
## dowchemical 0.5316235 0.5607511 0.4684114 0.3681791   1.0000000 0.3464743
## yahoo       0.3262037 0.3780730 0.4448179 0.3680715   0.3464743 1.0000000
pairs(as.data.frame(dados), lower.panel = NULL, main = "Título", col = "pink")

library(corrplot)
corrplot(cor(x = dados, method = "pearson"))

library(corrplot)
corrplot(cor(x = dados, method = "pearson"), type = "upper")

corrplot(cor(x = dados, method = "pearson"), method = "number", type = "upper")

corrplot(cor(x = dados, method = "pearson"), method = "color", type = "upper")

3.0.1 Estacionariedade

?Nile

Nile {datasets} R Documentation Flow of the River Nile Description Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in 10^8 m^3, “with apparent changepoint near 1898” (Cobb(1978), Table 1, p.249).

Usage Nile Format A time series of length 100.

Source Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford University Press. http://www.ssfpack.com/DKbook.html

References Balke, N. S. (1993). Detecting level shifts in time series. Journal of Business and Economic Statistics, 11, 81–92. doi: 10.2307/1391308.

Cobb, G. W. (1978). The problem of the Nile: conditional solution to a change-point problem. Biometrika 65, 243–51. doi: 10.2307/2335202.

head(Nile)
## [1] 1120 1160  963 1210 1160 1160
RioNilo = Nile
tail(RioNilo)
## [1] 912 746 919 718 714 740
length(RioNilo)
## [1] 100
plot(RioNilo)

plot(RioNilo, type = "b", col = "green")

3.0.2 Estacionariedade

\(log()\) : Linearização
\(diff()\) : Remoção de tendência linear

3.0.3 Diferenciação

ASTSA: Applied Statistical Time Series analysis

library(astsa)
temperatura_global = globtemp
plot(temperatura_global, col = "red")

Diferenciação para obter uma série estacionária

plot(diff(temperatura_global))

par(mfrow = c(2,1))
plot(temperatura_global, col = "red")
plot(diff(temperatura_global), col = "blue")

3.0.4 Ruído branco:

  • Média Constante
  • Variância Constante
  • Sem correlacão temporal

Portanto não possui um padrão, sendo completamente aleatório

Simulando ruído branco com componentes autorregressivo, de diferenciação e de média movel (p, d, q) = (0, 0, 0).

whitenoise = arima.sim(model = list(order = c(0, 0, 0)), n = 50)
class(whitenoise)
## [1] "ts"
plot(whitenoise, col = "green", lwd = 2)

arima(whitenoise, order = c(0, 0, 0))
## 
## Call:
## arima(x = whitenoise, order = c(0, 0, 0))
## 
## Coefficients:
##       intercept
##          0.0197
## s.e.     0.1504
## 
## sigma^2 estimated as 1.13:  log likelihood = -74.01,  aic = 152.03

3.0.5 Passeio aleatório

  • Sem variância ou média especificada

  • Dependência ao longo do tempo

  • Mudança ou incremento são ruídos brancos

Cada momento seque um processo aditino em que o instante adial é a adição de algum ruído ao valor do dado anterior.

\[T_{atual} = T_{atual-1} + e_{atual}\\ \Rightarrow T_1 = T_{0} + e_{1}, \,\, t.q.\,\, \overline{x} = 0\] Um segundo modelo de passeio aleatório chamado drift adiciona uma constante ao modelo

\[T_{atual} = c + T_{atual-1} + e_{atual} \\ \Rightarrow c + T_1 = T_{0} + e_{1}, \,\, t.q.\,\, \overline{x} = 0\]

passeioaleat = arima.sim(model = list(order = c(0, 1, 0)), n = 50)
ts.plot(passeioaleat, col = "green", lwd = 2)

arima(passeioaleat, order = c(0, 0, 0))
## 
## Call:
## arima(x = passeioaleat, order = c(0, 0, 0))
## 
## Coefficients:
##       intercept
##          1.2102
## s.e.     0.3327
## 
## sigma^2 estimated as 5.646:  log likelihood = -116.51,  aic = 237.01
passeioaleat = diff(passeioaleat)
ts.plot(passeioaleat, col = "green", lwd = 2)

arima(passeioaleat, order = c(0, 0, 0))
## 
## Call:
## arima(x = passeioaleat, order = c(0, 0, 0))
## 
## Coefficients:
##       intercept
##          0.0359
## s.e.     0.1488
## 
## sigma^2 estimated as 1.108:  log likelihood = -73.5,  aic = 151

4 Modelos ARMA

5 Modelos ARIMA

6 Biblioteca Time Series Analysis and Computational Finance (tseries)