library(tidyverse) # Data science.
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.6
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.1 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.2.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(forecast) # Previsão de séries temporais no R.
Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
library(sidrar) # Raspagem de dados do SIDRA-IBGE.
library(zoo) # Tratamento de séries temporais no R.
Anexando pacote: 'zoo'
Os seguintes objetos são mascarados por 'package:base':
as.Date, as.Date.numeric
library(quantmod) # Dados financeiros em R.
Carregando pacotes exigidos: xts
######################### Warning from 'xts' package ##########################
# #
# The dplyr lag() function breaks how base R's lag() function is supposed to #
# work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
# source() into this session won't work correctly. #
# #
# Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
# conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
# dplyr from breaking base R's lag() function. #
# #
# Code in packages is not affected. It's protected by R's namespace mechanism #
# Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
# #
###############################################################################
Anexando pacote: 'xts'
Os seguintes objetos são mascarados por 'package:dplyr':
first, last
Carregando pacotes exigidos: TTR
library(tseries) # Pacote para tratar séries temporais.
library(lmtest) # Realiza testes com os modelos estimados.
Previsão modelo ARIMA
AR - Auto regressão (p) -> como uma série se comporta a partir de seus valores passados.
I - Integração (d) ou diferenciação -> quando a série é estacionária, ou seja, constante. A autocoraviância não depende de valores passados, somente do tempo presente.
MA - Média Móvel (q) -> processo de suavização de uma série temporal e/ou uma estimativa de erros utilizada pelo modelo arima.
# simulação de um processo AR(1)
set.seed(123) # valor aleatório, mas fixo
phi <- 0.8 # coeficiente autoregressivo
n <- 100 # tamanho da série
y <- arima.sim(model = list(ar = phi), n = n)
# plotar a série simulada
plot(y, type = "l", col = "green", lwd = 2, main = paste("Série AR(1) Simulada (@ =", phi, ")"), xlab = "Tempo", ylab = expression (y[t]))
grid()
set.seed(123)
n <- 100
# três séries com diferentes níveis de autoregressão
y1 <- arima.sim(model = list(ar = 0.2), n = n )
y2 <- arima.sim(model = list(ar = 0.8), n = n)
y3 <- arima.sim(model = list(ar = -0.8), n = n)
par(mfrow = c(3,1))
plot(y1, type = "l", col = "red", lwd = 2, main = "AR(1) com 2 = 0.2 (fraca dependência)", xlab = "Tempo", ylab = expression (y[t]))
grid()
plot(y2, type = "l", col = "blue", lwd = 2, main = "AR(2) com @ = 0.8 (forte dependência postiva)", xlab = "Tempo", ylab = expression (y[t]))
grid()
plot(y3, type = "l", col = "darkgreen", lwd = 2, main = "AR(3) com @ = -0.8 (forte dependência negativa)", xlab = "Tempo", ylab = expression (y[t]))
grid()
Média móvel com os erros sendo usados como parâmetro de previsão
set.seed(123)
n <- 100
y1 <- arima.sim(model = list(ma = 0.8), n = n)
y2 <- arima.sim(model = list(ma = -0.8), n = n)
par(mfrow = c(2,1))
plot(y1, type = "l", col = "blue", lwd = 2, main = "MA(1) com 0 = 0.8", xlab = "Tempo", ylab = expression (y[t]))
grid()
plot(y2, type = "l", col = "red", lwd = 2, main = "MA(2) com 0 = -0.8", xlab = "Tempo", ylab = expression (y[t]))
grid()
0 = 0.8 reforça o erro atual
0 = -0.8 corrige o erro atual
Modelo arma (AR + MA)
set.seed(123)
phi <- 0.6
theta <- 0.8
n <- 100
y <- arima.sim(model = list(ar = phi, ma = theta), n = n)
plot(y, type = "l", col = "blue", lwd = 2, main = "Série ARMA com @ = 0.6 e 0 = 0.8", xlab = "Tempo", ylab = expression (y[t]))
grid()
Comparando os três modelos: AR, MA e ARMA
set.seed(123)
phi <- 0.6
theta <- 0.8
n <- 100
par(mfrow = c(3,1))
y_ar <- arima.sim(model = list(ar = phi), n = n)
plot(y_ar, type = "l", col = "green", lwd = 2, main = "AR(1) com @ = 0.6", xlab = "Tempo", ylab = expression (y[t]))
y_ma <- arima.sim(model = list(ma = theta), n = n)
plot(y_ma, type = "l", col = "orange", lwd = 2, main = "MA(1) com 0 = 0.8", xlab = "Tempo", ylab = expression (y[t]))
y_arma <- arima.sim(model = list(ar = phi, ma = theta), n = n)
plot(y_arma, type = "l", col = "purple", lwd = 2, main = "ARMA(1,1) com @ = 0.6 3 0 = 0.8", xlab = "Tempo", ylab = expression (y[t]))
Ruído branco -> média igual a 0, valores nao sofrem choques nem para cima, nem para baixo. permanece tudo constante. o modelo nao guarda memoria nem informaçoes de valores passados, nao posso prever o valor de amanha com o valor de hoje.
set.seed(123)
x <- rnorm(100)
plot(x, type = "l", col = "pink", lwd = 2, main = "Série estacionária: (Ruído Branco)")
Passeio aleatório -> o valor de hoje é um valor de ontem + um choque aleatório(ruído branco), memória infinita e variância explosiva.
set.seed(123)
y <- cumsum(rnorm(100))
plot(y, type = "l", col = "darkorange", lwd = 2, main = "Série não estacionária(passeio aleatório)")