Ajuste Modelo ARIMA

library(ggplot2)
library(dplyr)
library(forecast)
library(tseries)
library(readxl)
IMPORTAÇÃO E PREPARAÇÃO DOS DADOS
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
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 
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 para a série log-transformada
modelo_log <- auto.arima(dados$LogValor)
summary(modelo_log)  # Mostra parâmetros e critérios de ajuste
Series: 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)  
Warning 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)")