library(ggplot2)
library(dplyr)
library(forecast)
library(tseries)
library(readxl)Ajuste Modelo ARIMA
IMPORTAÇÃO E PREPARAÇÃO DOS DADOS
# Importa a planilha com os dados mensais do Ibovespa
dados <- read_excel("Evolucao_Mensal.xlsx")
# Cria série temporal com frequência mensal, começando em janeiro de 2014
serie_temporal <- ts(dados$Valor, start = c(2014, 1), frequency = 12)
# Combina colunas "Ano" e "Mês" para criar um campo de data (tipo Date)
dados$Data <- as.Date(paste(dados$Ano, dados$Mês, "01", sep = "-"))
# Aplica transformação logarítmica ao valor para estabilizar a variância
dados$LogValor <- log(dados$Valor)VISUALIZAÇÃO DA SÉRIE TEMPORAL
# Gráfico da série temporal original (base R)
plot(serie_temporal,
main = "Série Temporal do Ibovespa (Original)",
xlab = "Período",
ylab = "Valor",
col = "blue",
type = "l")# Gráfico da série log-transformada com ggplot2
ggplot(dados, aes(x = Data, y = LogValor)) +
geom_line(color = "#3273e3", size = 1.2) +
scale_x_date(date_breaks = "2 year", date_labels = "%Y") +
labs(title = "Série Log do Ibovespa", x = "Período", y = "log(Ibovespa)") +
theme_minimal()Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
# ACF da série original
acf(serie_temporal,
main = "Função de Autocorrelação - Série Original",
lag.max = 36)TESTE DE ESTACIONARIEDADE - ADF
# Teste de Dickey-Fuller aumentado para verificar estacionariedade
adf.test(serie_temporal) # Esperado: não estacionária
Augmented Dickey-Fuller Test
data: serie_temporal
Dickey-Fuller = -2.4503, Lag order = 5, p-value = 0.3892
alternative hypothesis: stationary
AJUSTE DO MODELO ARIMA
# Ajusta modelo ARIMA automaticamente para a série log-transformada
modelo_log <- auto.arima(dados$LogValor)
summary(modelo_log) # Mostra parâmetros e critérios de ajusteSeries: dados$LogValor
ARIMA(0,1,0)
sigma^2 = 0.004292: log likelihood = 172.47
AIC=-342.95 AICc=-342.92 BIC=-340.06
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.007003591 0.06526966 0.04823927 0.06074202 0.427299 0.9941503
ACF1
Training set 0.06027964
# Diagnóstico do modelo (resíduos, normalidade, autocorrelação)
checkresiduals(modelo_log)
Ljung-Box test
data: Residuals from ARIMA(0,1,0)
Q* = 14.163, df = 10, p-value = 0.1657
Model df: 0. Total lags used: 10
# Previsão para os próximos 12 períodos (meses)
#previsao <- forecast(modelo_log, h = 12)
#autoplot(previsao) +
# labs(title = "Previsão ARIMA(0,1,0) - Log Ibovespa", y = "log(Ibovespa)")
# ACF dos resíduos ao quadrado (verificação de heterocedasticidade)
residuos <- residuals(modelo_log)
acf(residuos^2,
main = "ACF dos Resíduos ao Quadrado")DIFERENCIAÇÃO DA SÉRIE
# Diferenciação da série log para tornar estacionária
serie_dif <- diff(dados$LogValor)
plot(serie_dif,
main = "Série Log Diferenciada",
ylab = "Δlog(Ibovespa)",
xlab = "Tempo",
col = "darkred",
type = "l")# Teste de estacionariedade após diferenciação
adf.test(serie_dif) # Esperado: estacionáriaWarning in adf.test(serie_dif): p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: serie_dif
Dickey-Fuller = -5.2286, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
# ACF e PACF da série diferenciada
acf(serie_dif, main = "ACF - Série Log Diferenciada")pacf(serie_dif, main = "PACF - Série Log Diferenciada")# Verificação adicional de heterocedasticidade nos resíduos do modelo
acf(residuals(modelo_log)^2,
main = "ACF dos Resíduos ao Quadrado (Modelo ARIMA)")