Conjunto de observações ordenadas no tempo:
* Um possível trajetória de um processo aleatório
* Realização de um processo estocástico
Um TS pode ser contínua ou discreta. * Discreta: vendas diárias
* Contínua: Registro de venda de acordo com o instante que ocorre
Uma série é discreta quando se faz referencia ao tempo entre as observações e não à escala da variável. Tais séries contínuas podem ser discretizadas. Via de regra TS são apresentadas como eventos discretos equi-espaçados.
A principal característica de séries temporais é a existência de alguma forma de dependência entre dados observados em tempos diferentes. O que limita a utilização de modelos estatísticos convencionais desenvolvidos para dados i.i.d.. Estes modelos podem ser utilizados para entender quais são os componentes envolvidos na série para assim tentar estimar valores futuros.
Do ponto de vista teórico, uma TS é a realização de um processo estocástico. Dado um espaço de probabilidade \((\Omega, A, P)\), um processo estocástico seráa coleçãos de variáveis aleatórias no espaço amostral \(\Omega\), indexadas por um conjunto \(T\), denotado como:
\[\{x(t, \omega), t\in T\ e\ \omega \in \Omega\}\] Note que, entre todas as possibilidades, apenas observamos uma realização de tal processo estocástico.
Uma análise se TS visa:
Observar o mecanismo gerador da TS
Fazer previsões futuras de série (corto e longo prazo)
Descrever o comportamento da TS:
Graficos, diagramas de fispersão e histpgramas, verificar tendências, ciclos e variabilidade sazonal.
Entender componentes constituintes:
Tendência: comportamento principal
Sazonalidade: padrão de repetiçõs por períodos diários, mensais, anuais, etc.
library(dplyr)
plot(AirPassengers)
ruído: diferença aleatória desacoplada de observações anteriores, da tandência e sazonalidade (média zero e comportamento estacionário - não correlacionado a x).
Algumas séries podem mudar sua tendenciaao longo do tempo, por exemplo deixando de ser linear para se tornar exponencial.
Simulação de um processo determinístico \(X_t = 1000 + 0.1t\)
n = 300
x = 1000+0.1*(1:n)
plot.ts(x)
Simulação de um processo de periodicidade 12 \(S_t = 20 sin((2\pi/12)t)\)
s = 20*sin(2*pi/12*(1:n))
plot.ts(s)
Somando termnos \(X_t + S_t\)
plot.ts(x+s)
Simulação de ruído branco $E_t N(0, 25) $
e = rnorm(n, 0.5)
plot.ts(e)
Somando termos \(X_t + S_t + E_t\)
z = x+s+e
plot.ts(z)
Decomposição
z = ts(z, start = 1990, frequency = 12)
plot(decompose(z))
Previsão
h = 30
dec = decompose(z)
trend = dec$trend
sea = dec$seasonal
e = dec$random
tempo = 1:n
trend.lm = lm(trend~tempo)
trend.forec = trend.lm$coefficients[[1]] + trend.lm$coefficients[[2]]*((n+1):(n+h))
c(trend, trend.forec) %>%ts(start=end(trend)+c(0,1), frequency = 12) %>%
plot.ts()
Snave
library(forecast)
sazonal = snaive(sea, h= h)$mean
cbind(sea, sazonal) %>% plot.ts(plot.type = 's', col=c(1,2))
previsao = trend.forec + sazonal
cbind(z, previsao) %>% plot.ts(plot.type = 's', col=c(1,2))
Simulação de 100 pontos \(x_t = 5 + 0.35x_{t-1} + 0.6x_{t-6} + \epsilon_t\) com $ i.i.d.N(0,4) $
n = 100
x = numeric(100)
x[1:6] = c(58.9,60.0,59.8,59.2,58.9,58.7)
for (i in 7:n) {
x[i] = 5+0.35*x[i-1]+0.6*x[i-6]+rnorm(1,0,2)
}
x = ts(x, start = 2000, frequency = 6)
plot(x)
x.obs = window(x, end=time(x)[90])
x.teste =window(x, start=time(x)[91])
plot(x.obs)
plot(x.teste)
Bootstrap
n_sim = 200
x_matriz = matrix(NA, nrow = n, ncol = n_sim)
Observados
for (a in 1:n_sim) {
x_matriz[1:90, a] = x.obs
}
Dados Simulados
for (b in 91:100) {
x_matriz[b, ] = 5+0.35*x_matriz[b-1,]+0.6*x_matriz[b-6,]+rnorm(n_sim,0,2)
}
x_matriz = ts(x_matriz, start = 2000, frequency = 6)
plot(x_matriz, plot.type = 'single')
LI = LS = Pontual = numeric(10)
for (i in 1:10) {
LI[i] = quantile(x_matriz[90+i, ], prob=0.025)
LS[i] = quantile(x_matriz[90+i, ], prob=0.975)
Pontual[i] = mean(x_matriz[90+i,])
}
prev_mat = cbind(LI, Pontual, LS)
colnames(prev_mat) = c("LI95", "Pontual", "LS95")
prev_mat = ts(prev_mat, start = time(x)[91], frequency = 6)
plot(x, ylim = c(55, 100))
points(prev_mat[, 1], col=3, type = 'l')
points(prev_mat[, 2], col=2, type = 'l')
points(prev_mat[, 3], col=3, type = 'l')
A decomposição de uma TS pode ser de forma aditiva ou multiplicativa
\[X_t = T_t + S_t + E_t \\ X_t = T_t * S_t * E_t \\\] Tal decomposição visa antes de tudo decompor a TS em componentes mais simples de serem modelados. para obter uma TS sem tendência ou sem sazonalidade basta subrimir o termo correspondente.
Sem Tendência \[Z_t = X_t -T_t \\ X_t = X_t / T_t \\\] Sem Sazonalidade \[T_t = X_t - S_t \\Y_t = X_t / S_t \\\]
plot(decompose(AirPassengers, type = "a"))
plot(decompose(AirPassengers, type = "m"))
A decomposição parte da remoção de tendência.
Como visto pode possuir tendência linear ou polinomial, se TS aditiva ou multiplicativa. Dessa forma a tendência pode ser removida a removendo essa componente de linearidade ou polinomial.
ts = AirPassengers
tempo = time(ts)
fit = lm(ts~tempo)
plot(ts)
lines(x = tempo, y=fit$fitted.values, type = 'l', col="blue")
ts = Nile
time = as.numeric(time(ts))
out2 = lm(ts~poly(time, 2))
out6 = lm(ts~poly(time, 6))
plot(ts)
lines(x = time, y=out2$fitted.values, type = 'l', col="blue")
lines(x = time, y=out6$fitted.values, type = 'b', pch=18, col="red", lty=2)
legend(1880, 600, legend=c("Polinômio de dois Termos", "Polinômio de seis Termos"),
col=c("blue", "red"), lty=1:2, cex=0.8)
A maneira mais corriqueira de remoção de tendência é por meio do uso de filtros de suavização.
Dentre eles um bastante comum é o filtro de médias móveis de valores do passado filter com sides = 1, que como será visto é um componente de modelos ARMA.
\[SMA_T = \frac{1}{q} \sum_{i = 0}^{q} X_{t-i}\] Quando maior o número de períodos da média móvel, mas suave será a linha de tendência.
ts = AirPassengers
SMA6 = stats::filter(ts, rep(1/6, 6), sides = 1)
SMA12 = stats::filter(ts, rep(1/12, 12), sides = 1)
time = as.numeric(time(ts))
plot(ts)
lines(x = time, y=SMA6, type = 'l', col="blue")
lines(x = time, y=SMA12, type = 'b', pch=18, col="red", lty=2)
legend(1950, 500, legend=c("Média Móvel de 6 períodos", "Média Móvel de 12 períodos"),
col=c("blue", "red"), lty=1:2, cex=0.8)
Também é possível realizar médias móveis simétricas em que são utilizados valores antes a após o ponto de medida, penalizando valores no inínio e ao fim da série.
Quando esta for simétrica e q impar: \[MM_T = \frac{1}{q}\sum_{i=-s}^{s} X_{t+1},\ onde\ s = (q-1)/2\]
Quando esta for simétrica e q par: \[MM_T = \frac{1}{q}\sum_{i=-s+1}^{s} X_{t+1},\ onde\ s = q/2\] Tomando uma média móvem simétrica de ordem 3: \[MM_T = \frac{1}{3}(X_{t-1}+X_{t}+X_{t+1})\] Tomando uma média móvem simétrica de ordem 4: Nesse caso por não ser simétrica ao redor de t o algoritmo utiliza um ponto a mais a frente (futuro). \[MM_T = \frac{1}{3}(X_{t-1}+X_{t}+X_{t+1}+X_{t+2})\]
MMS3 = stats::filter(ts, rep(1/3, 3), sides = 2)
MMS4 = stats::filter(ts, rep(1/4, 4), sides = 2)
plot(ts)
lines(x = time, y=MMS3, type = 'l', col="blue")
lines(x = time, y=MMS4, type = 'l', pch=18, col="red", lty=1)
legend(1950, 500, legend=c("Média Móvel de ordem 3", "Média Móvel de ordem 4"),
col=c("blue", "red"), lty=1, cex=0.8)
MMR5 = stats::filter(ts, rep(1/5, 5), sides = 1)
MMS5 = stats::filter(ts, rep(1/5, 5), sides = 2)
plot(ts)
lines(x = time, y=MMR5, type = 'l', col="blue")
lines(x = time, y=MMS5, type = 'l', pch=18, col="red", lty=1)
legend(1950, 500, legend=c("Média Móvel Retroativa de ordem 5", "Média Móvel Simétrica de ordem 5"),
col=c("blue", "red"), lty=1, cex=0.8)
Nesse caso utilizando tewrmos (p, q) com coeficientes \(a_i\) como pesos que somados devem ser \(\sum a = 1\).
\[MM_l = \sum_{i=-p}^{q} a_iX_{t+i}\] Assim: \[MM_L = 0.2X_{t-i}+0.6X_{t}+0.2X_{t+i}\] Fornece:
MMl3 = stats::filter(ts, c(0.2, 0.6, 0.2), sides = 2)
MMl5 = stats::filter(ts, c(0.018, 0.2, 0.6, 0.2, 0.098), sides = 2)
plot(ts)
lines(x = time, y=MMl3, type = 'l', col="blue")
lines(x = time, y=MMl5, type = 'l', col="red")
legend(1950, 500, legend=c("Média Móvel de Filtro Linear de 3 termos", "Média Móvel de Filtro Linear de 5 termos"),
col=c("blue", "red"), lty=1, cex=0.8)
Supondo a decomposição de tendência aditiva por meio de \(TS_t = T_t + S_t + E+t\) a TS com tendência ajustada será dada por meio de:
\[Z_t = X_t-T_t = S_t+E_t\] Se a ordem de MA for 13 o ajuste é dados por uma MA simétrica de ordem 13 para considerar seis instantes antes a após o ponto de estimação:
ts = AirPassengers
autoplot(ts)
tendencia = stats::filter(ts, rep(1/13, 13), sides = 2)
z = ts-tendencia # TS sem tendência
plot(ts, main="TS Original", plot.type = "m", lwd=2)
plot(tendencia, main="Componente de Tendência", plot.type = "m", lwd=2)
plot(z, main="Modelo Ajustado sem Tendência", plot.type = "m", lwd=2)
Feito o ajuste de tendência (z) um novo processo de suavização é aplicado para extração da componente de sazonalidade. Nesse exeplo o processo consistirá em avaliar as médias de meses correspondentes onde S de janeiro corresponde à média dos Z dos mezes de janeiro de que se tem registro; o mesmo sendo aplicado aos demais meses.
ts = AirPassengers
ciclos = length(ts)/12
MediasSs = t(matrix(data = z, nrow = 12))
Ss = colMeans(MediasSs, na.rm = T)
Ss = ts(rep(Ss, ciclos), start=start(ts), frequency = frequency(ts))
plot(decompose(Ss, type = 'm'))
## Warning in plot.window(...): relative range of values ( 29 * EPS) is small (axis
## 2)
erro = ts - tendencia - z
plot(cbind(ts, tendencia, z, erro), main="Modelo", plot.type = "m", lwd=2)
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")
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")
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)
nn <- 100
tt1 <- sin(2 * pi * seq(nn)/12) - seq(nn)/50
tt2 <- cos(2 * pi * seq(nn)/12) - seq(nn)/10
plot(tt1, tt2)
t1 = rnorm(100, 5, 1)
t3 = t1*pi*runif(1, -25.0, 100)+runif(1, -25.0, 100)
plot(t1, t3)
cor(t1, t3)
## [1] 1
plot(t1, tt1)
cor(t1, tt1)
## [1] -0.06207016
tt <- seq(nn)
acf(tt)
plot.acf <- function(ACFobj) {
rr <- ACFobj$acf[-1]
kk <- length(rr)
nn <- ACFobj$n.used
plot(seq(kk), rr, type = "h", lwd = 2, yaxs = "i", xaxs = "i",
ylim = c(floor(min(rr)), 1), xlim = c(0, kk + 1), xlab = "Lag",
ylab = "Correlation", las = 1)
abline(h = -1/nn + c(-2, 2)/sqrt(nn), lty = "dashed", col = "blue")
abline(h = 0)
}
nn <- 100
tt <- seq(nn)
par(mfrow = c(1, 2))
plot.ts(tt, ylab = expression(italic(x[t])))
line.acf <- acf(tt, plot = FALSE)
plot.acf(line.acf)
tt <- sin(2 * pi * seq(nn)/12)
par(mfrow = c(1, 2))
plot.ts(tt, ylab = expression(italic(x[t])))
sine_acf <- acf(tt, plot = FALSE)
plot.acf(sine_acf)
tt <- sin(2 * pi * seq(nn)/12) - seq(nn)/100
par(mfrow = c(1, 2))
plot.ts(tt, ylab = expression(italic(x[t])))
sili_acf <- acf(tt, plot = FALSE)
plot.acf(sili_acf)
tt <- sin(2 * pi * seq(nn)/12) - seq(nn)/50
par(mfrow = c(1, 2))
plot.ts(tt, ylab = expression(italic(x[t])))
sili_acf <- acf(tt, plot = FALSE)
plot.acf(sili_acf)
tt <- sin(2 * pi * seq(nn)/12) - seq(nn)/10
par(mfrow = c(1, 2))
plot.ts(tt, ylab = expression(italic(x[t])))
sili_acf <- acf(tt, plot = FALSE)
plot.acf(sili_acf)
tt <- sin(2 * pi * seq(nn)/12) - seq(nn)/2
par(mfrow = c(1, 2))
plot.ts(tt, ylab = expression(italic(x[t])))
sili_acf <- acf(tt, plot = FALSE)
plot.acf(sili_acf)
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")
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))
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")
?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)
## Time Series:
## Start = 1871
## End = 1876
## Frequency = 1
## [1] 1120 1160 963 1210 1160 1160
RioNilo = Nile
tail(RioNilo)
## Time Series:
## Start = 1965
## End = 1970
## Frequency = 1
## [1] 912 746 919 718 714 740
length(RioNilo)
## [1] 100
plot(RioNilo)
plot(RioNilo, type = "b", col = "green")
log(): Linearização diff(): Remoção de tendência linear
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")
### Ruído branco:
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.0115
## s.e. 0.1255
##
## sigma^2 estimated as 0.788: log likelihood = -64.99, aic = 133.98
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
## -0.7471
## s.e. 0.2228
##
## sigma^2 estimated as 2.531: log likelihood = -96.05, aic = 196.1
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.0135
## s.e. 0.1335
##
## sigma^2 estimated as 0.8907: log likelihood = -68.05, aic = 140.1