Proposta da Avaliação
Cada aluno deverá escolher uma série temporal diária que apresente indícios de quebra estrutural, motivada por um evento econômico relevante. A escolha da série e do evento deve ser justificada com base em literatura ou fontes de dados confiáveis.
library(lubridate)
Ipea_taxa_cambio <- Ipea_taxa_cambio %>%
mutate(Data = as.Date(Data, format = "%d/%m/%Y")) %>% # Converte a coluna Data para o formato Date
filter(Data >= as.Date('2010-01-01')
& Data <= as.Date('2024-12-31')) %>% # #trabalhar com a série de 2010 para 2024
na.omit() # Remove todas as linhas com NA
str(Ipea_taxa_cambio)
## tibble [3,755 × 2] (S3: tbl_df/tbl/data.frame)
## $ Data : Date[1:3755], format: "2010-01-04" "2010-01-05" ...
## $ valorTaxa: num [1:3755] 1.72 1.72 1.73 1.74 1.74 ...
## - attr(*, "na.action")= 'omit' Named int [1:1724] 1 2 3 9 10 16 17 23 24 30 ...
## ..- attr(*, "names")= chr [1:1724] "1" "2" "3" "9" ...
n1: Período anterior à quebra estrutural.
n2: Período posterior à quebra estrutural.
n = n1 + n2: Série completa, incluindo os períodos antes e depois da quebra.
data_quebra <- as.Date("2015-01-01")
n1 <- Ipea_taxa_cambio%>%
filter(Data < data_quebra) # Período anterior à quebra estrutural.
n2 <- Ipea_taxa_cambio%>%
filter(Data >= data_quebra)# Exemplo: período posterior
plot(Ipea_taxa_cambio$Data, Ipea_taxa_cambio$valorTaxa, type = "l",
main = "Taxa de Câmbio R$/US$", xlab = "Data", ylab = "Valor da Taxa")
summary(n1$valorTaxa)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.534 1.750 1.988 1.981 2.224 2.740
summary(n2$valorTaxa)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.575 3.482 4.182 4.372 5.217 6.199
Mínimo (Min.): 1.534
Este é o valor mais baixo observado na série n1. Indica que, durante o período considerado, a taxa de câmbio chegou a 1.534 R\(/US\).
1º Quartil (1st Qu.): 1.750
Este valor representa o ponto abaixo do qual 25% das observações se encontram. Portanto, 25% dos valores de \(n1\) valorTaxa são inferiores a 1.750 R\(/US\).
Mediana (Median): 1.988
A mediana é o valor que divide a série ao meio. Isso significa que 50% das observações estão abaixo de 1.988 R\(/US\) e 50% estão acima, servindo como uma boa representação do “centro” da série.
Média (Mean): 1.981
A média aritmética dos valores é de 1.981 R\(/US\). Isso sugere que, em média, a taxa de câmbio durante o período foi ligeiramente inferior à mediana, o que pode indicar a presença de valores extremos ou assimetrias na distribuição.
3º Quartil (3rd Qu.): 2.224
Este valor indica que 75% das observações estão abaixo de 2.224 R\(/US\). É um sinal de que a maioria dos valores tende a ficar abaixo deste nível.
Máximo (Max.): 2.740
Este é o valor mais alto observado na série n1. Indica que a taxa de câmbio alcançou um pico de 2.740 R\(/US\) durante o período considerado.
Mínimo (Min.): 2.575
Este é o valor mais baixo observado na série n2. Indica que, durante o período considerado, a taxa de câmbio chegou a 2.575 R\(/US\).
1º Quartil (1st Qu.): 3.482
Este valor representa o ponto abaixo do qual 25% das observações se encontram. Portanto, 25% dos valores de \(n2\) valorTaxa são inferiores a 3.482 R\(/US\).
Mediana (Median): 4.182
A mediana é o valor que divide a série ao meio. Isso significa que 50% das observações estão abaixo de 4.182 R\(/US\) e 50% estão acima, servindo como uma boa representação do “centro” da série.
Média (Mean): 4.372
A média aritmética dos valores é de 4.372 R\(/US\). Isso sugere que, em média, a taxa de câmbio durante o período foi superior à mediana, indicando uma tendência de valores mais altos.
3º Quartil (3rd Qu.): 5.217
Este valor indica que 75% das observações estão abaixo de 5.217 R\(/US\). Isso sugere que a maioria dos valores tende a ficar abaixo deste nível.
Máximo (Max.): 6.199
Este é o valor mais alto observado na série n2. Indica que a taxa de câmbio alcançou um pico de 6.199 R\(/US\) durante o período considerado.
adf.test(n1$valorTaxa)
##
## Augmented Dickey-Fuller Test
##
## data: n1$valorTaxa
## Dickey-Fuller = -2.0699, Lag order = 10, p-value = 0.5487
## alternative hypothesis: stationary
adf.test(n2$valorTaxa)
##
## Augmented Dickey-Fuller Test
##
## data: n2$valorTaxa
## Dickey-Fuller = -2.5682, Lag order = 13, p-value = 0.3378
## alternative hypothesis: stationary
Após rodarmos os testes do teste de Dickey-Fuller Aumentado (ADF) para a série n1 temos os seguintes resultados
Estatística do Dickey-Fuller: -2.0699
Este valor é comparado com os valores críticos para determinar se a série é estacionária ou não.
Lag Order: 10
Esse resultado nos mostra o número de defasagens utilizadas no teste para ajustar o modelo e considerar a autocorrelação nos dados, ou seja, foram defasados 10 períodos atrás de valores passados e availiar se a série é estacionária. Incluir defasagens ajuda a ajustar o modelo para levar em conta o impacto que os valores anteriores têm sobre o valor atual.Sigignifica que o teste está considerando os efeitos dos valores anteriores até 10 períodos atrás. Isso pode ser útil se a série tiver padrões de autocorrelação de longo prazo. Risco de Overfitting, No entanto, usar muitos lags pode resultar em um modelo que se ajusta demais aos dados, tornando difícil generalizar para novos dados.
Como funciona: - No teste ADF, a série é regredida em relação a suas defasagens e a uma constante (e, opcionalmente, uma tendência).
\[ Y_t = \alpha + \beta t + \gamma Y_{t-1} + \sum_{i=1}^{p} \delta_i Y_{t-i} + \epsilon_t \]
Onde:
p-value: 0.5487
O valor p é a probabilidade de observar a estatística do teste sob a hipótese nula (que a série possui uma raiz unitária e, portanto, não é estacionária). Um p-value alto (geralmente acima de 0.05) sugere que não podemos rejeitar a hipótese nula.
Conclusão
Com um p-value de 0.5487, não temos evidências suficientes para rejeitar a hipótese nula de que a série n1 possui uma raiz unitária. Isso indica que n1$valorTaxa não é estacionária e pode apresentar tendências ou sazonalidades. Como a série \(n1\) não estationária nos sugere que antes de modela-la com o ARIMA e outros métodos, temos que aplicar transformações como a diferenciação para torná-la estacionária, para garantir um bom modelo de previsão
Previsibilidade:
Modelos de séries temporais, como ARIMA, pressupõem que a série é estacionária. Se a série não for estacionária, as previsões baseadas em tais modelos podem ser imprecisas.
Consistência Estatística:
Estacionaridade garante que os resultados estatísticos, como testes de hipótese e intervalos de confiança, sejam válidos e confiáveis ao longo do tempo.
Simplicidade do Modelo:
Quando uma série é estacionária, é mais fácil identificar padrões e relacionamentos nas dados, simplificando a modelagem.
Autocorrelação:
Em uma série estacionária, a autocorrelação é constante ao longo do tempo. Isso permite que os modelos capturem a estrutura temporal de forma mais eficaz.
Uma série é considerada não estacionária quando suas propriedades estatísticas mudam ao longo do tempo. Isso pode ocorrer em situações como:
Tendências:
Se a média da série aumenta ou diminui ao longo do tempo.
Sazonalidade:
Se os padrões se repetem em intervalos regulares (como vendas que aumentam durante as festas). Mudanças Estruturais: Se há uma mudança radical na série devido a eventos externos.
Os resultados do teste de Dickey-Fuller Aumentado (ADF) para a série n2 são os seguintes:
Estatística do Dickey-Fuller: -2.5682
Este valor é comparado com os valores críticos para determinar se a série é estacionária ou não.
Lag Order: 13
No teste tivesmo um número de defasagens utilizadas de 13 períodos, isso indica que o teste considera os efeitos dos valores passados até 13 períodos atrás.
p-value: 0.3378
O valor p representa a probabilidade de observar a estatística do teste sob a hipótese nula (que a série possui uma raiz unitária e, portanto, não é estacionária). Um p-value alto (geralmente acima de 0.05) sugere que não podemos rejeitar a hipótese nula.
Conclusão
Com um p-value de 0.3378, não temos evidências suficientes para rejeitar a hipótese nula de que a série n2 possui uma raiz unitária. Isso indica que \(n2\) valorTaxa também não é estacionária e pode apresentar tendências ou sazonalidades.
Como não há estacionaridade da série n2 sugere que, assim como em n1, pode ser necessário aplicar transformações, como diferenciação, antes de modelar a série com abordagens como ARIMA, para garantir que os modelos de previsão sejam válidos e eficazes.
par(mfrow = c(1, 2)) # Configura o gráfico para 2 plots
acf(n1$valorTaxa, main = "ACF - n1") #variável em primeira diferença já corrige no auto.arima
pacf(n1$valorTaxa, main = "PACF - n1")
par(mfrow = c(1,2))
acf(n2$valorTaxa, main ='ACF - n2')
pacf(n2$valorTaxa, main = "PACF - n2")
# Modelagem ARIMA para n1
modelo_n1 <- auto.arima(n1$valorTaxa)
summary(modelo_n1)
## Series: n1$valorTaxa
## ARIMA(2,1,2) with drift
##
## Coefficients:
## ar1 ar2 ma1 ma2 drift
## 1.0175 -0.6417 -0.9114 0.5532 7e-04
## s.e. 0.1718 0.1233 0.1793 0.1419 4e-04
##
## sigma^2 = 0.0002232: log likelihood = 3500.27
## AIC=-6988.53 AICc=-6988.46 BIC=-6957.72
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 3.192732e-06 0.01490312 0.01048375 -0.00611335 0.5241739 0.9940053
## ACF1
## Training set -0.003994898
# Modelagem ARIMA para n2
modelo_n2 <- auto.arima(n2$valorTaxa)
summary(modelo_n2)
## Series: n2$valorTaxa
## ARIMA(0,1,1) with drift
##
## Coefficients:
## ma1 drift
## 0.0614 0.0014
## s.e. 0.0204 0.0009
##
## sigma^2 = 0.001842: log likelihood = 4319.82
## AIC=-8633.64 AICc=-8633.63 BIC=-8616.17
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 1.00798e-06 0.04288889 0.03057907 -0.004430129 0.6939802 0.9978483
## ACF1
## Training set -0.001276037
# Modelagem ARIMA para a série completa
modelo_n <- auto.arima(Ipea_taxa_cambio$valorTaxa) # n = n1 + n2 série completa, incluindo os períodos antes e depois da quebra.
summary(modelo_n)
## Series: Ipea_taxa_cambio$valorTaxa
## ARIMA(0,1,1) with drift
##
## Coefficients:
## ma1 drift
## 0.0643 0.0012
## s.e. 0.0166 0.0006
##
## sigma^2 = 0.0013: log likelihood = 7147.28
## AIC=-14288.57 AICc=-14288.56 BIC=-14269.88
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set 4.551643e-07 0.03604513 0.02387267 -0.008709876 0.6381737
## MASE ACF1
## Training set 0.9979257 -0.001228199
Para identificarmos o modelo ARIMA que se ajusta melhor \(n1\), \(n2\) e a série completa \(n\), devemos considerar o valor do AIC (Critério de Informação de Akaike). Através dessa medida se busca o melhor equilíbrio entre ajuste e simplicidade. Modelos usando AIC com o menor valor de AIC é considerado o melhor.
Comparação dos Modelos
Modelo para n1 :
ARIMA(2,1,2) AIC : -6988,53
Modelo para n2 :
ARIMA(0,1,1) AIC : -8633,64
Modelo para n :
ARIMA(0,1,1) AIC : -14288,57
O modelo para a série completa \(modelo_n\) (ARIMA(0,1,1)) tem o menor AIC de -14288.57 , destacando que é o melhor ajuste entre os três modelos.
Componentes do Modelo ARIMA(p, d, q)
p (Ordem AR) : Representa o número de termos autorregressivos. No caso do modelo_n série completa ARIMA(0,1,1), o valor é 0, o que significa que não há termos autorregressivos no modelo.
d (Diferença) : Indica o número de vezes que a série deve ser diferenciada para se tornar estacionária. No ARIMA(0,1,1), o valor é 1, o que significa que a série foi diferenciada uma vez. Isso é feito para remover tendências e tornar a série estacionária.
q (Ordem MA) : Representa o número de termos de mídia móvel. Com um valor de 1 em ARIMA(0,1,1), o modelo inclui um termo de média móvel. Isso significa que a previsão é influenciada pelo erro da previsão do período anterior.
checkresiduals(modelo_n1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,2) with drift
## Q* = 3.2213, df = 6, p-value = 0.7806
##
## Model df: 4. Total lags used: 10
Resultados do Teste de Ljung-Box
Interpretação Hipóteses do Teste :
Valores do Teste :
Conclusão : Considerando que temos um \(p\) > que 0,05 rejeitamos a hipótese nula os resíduos são independentes, significa que não existe evidências suficientes para afirmar que os resíduos apresentam autocorrelação significativa. É um bom modelo, o resultado do teste de Ljung-Box indicam que o modelo ARIMA foi ajustado para \(n1\) ser protegido. Os resíduos não apresentam padrões significativos, indicando que o modelo é adequado para a previsão.
checkresiduals(modelo_n2)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,1) with drift
## Q* = 8.4179, df = 9, p-value = 0.4926
##
## Model df: 1. Total lags used: 10
Resultados do Teste de Ljung-Box
Interpretação: Hipóteses do Teste :
Valores do Teste :
Conclusão: Também o resultado do teste de Ljung-Box para o modelo ajustado para n2indicar que o modelo é adequado. Os amostras não mostram padrões significativos, indicando que o modelo ARIMA(0,1,1) fornece um bom ajuste para a variação.
checkresiduals(modelo_n)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,1) with drift
## Q* = 11.713, df = 9, p-value = 0.23
##
## Model df: 1. Total lags used: 10
Resultados do Teste de Ljung-Box
Interpretação Hipóteses do Teste :
Valores do Teste :
Conclusão Podemos perceber que a análise dos resíduos e o resultado do teste da Ljung-Box para o modelo ajustado indicam que o modelo é seguro. Os amostras não mostram padrões significativos, indicando que o modelo ARIMA(0,1,1) fornece um bom ajuste para a variação.
residuos_n1 <- residuals(modelo_n1)
residuos_n2 <- residuals(modelo_n2)
residuos_n <- residuals(modelo_n)
lb_test_n1 <- Box.test(residuos_n1, type = "Ljung-Box")
lb_test_n2 <- Box.test(residuos_n2, type = "Ljung-Box")
lb_test_n <- Box.test(residuos_n, type = "Ljung-Box")
# Resultados
lb_test_n1
##
## Box-Ljung test
##
## data: residuos_n1
## X-squared = 0.020109, df = 1, p-value = 0.8872
lb_test_n2
##
## Box-Ljung test
##
## data: residuos_n2
## X-squared = 0.0040723, df = 1, p-value = 0.9491
lb_test_n
##
## Box-Ljung test
##
## data: residuos_n
## X-squared = 0.0056688, df = 1, p-value = 0.94
Interpretação dos Resultados
Hipótese Nula do Teste de Ljung-Box : A hipótese nula afirma que não há autocorrelação significativa nos resíduos do modelo. Em outras palavras, os resíduos são aleatórios e independentes.
Valores de p :
Verificamos que para todos os modelos ( n1, n2e n), os valores de p são muito altos (todos acima de 0,05).
Isso indica que não há evidências suficientes para rejeitar a hipótese nula. Assim, podemos concluir que não há autocorrelação significativa nos resíduos desses modelos.
A ausência de autocorrelação nos resíduos não implica diretamente que não haja heterocedasticidade. Podemos então ter heterocedasticidade, que é a variação não constante da variação dos resíduos ao longo do tempo, logo podemos modeladar usando GARCH.
library(rugarch)
model_garch_n1 <- ugarchspec(variance.model = list(model = "sGARCH"), mean.model = list(armaOrder = c(1, 1)))
fit_garch_n1 <- ugarchfit(model_garch_n1, data = residuos_n1)
fit_garch_n1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(1,0,1)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000319 0.000302 -1.05589 0.291018
## ar1 0.176964 0.545003 0.32470 0.745405
## ma1 -0.211289 0.540444 -0.39096 0.695830
## omega 0.000002 0.000002 1.02953 0.303232
## alpha1 0.107453 0.022321 4.81389 0.000001
## beta1 0.891544 0.021415 41.63227 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000319 0.000350 -0.91321 0.36113
## ar1 0.176964 0.389196 0.45469 0.64933
## ma1 -0.211289 0.393415 -0.53707 0.59122
## omega 0.000002 0.000010 0.22612 0.82111
## alpha1 0.107453 0.067382 1.59468 0.11078
## beta1 0.891544 0.072530 12.29205 0.00000
##
## LogLikelihood : 3656.517
##
## Information Criteria
## ------------------------------------
##
## Akaike -5.8083
## Bayes -5.7838
## Shibata -5.8083
## Hannan-Quinn -5.7991
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 2.342 0.125900
## Lag[2*(p+q)+(p+q)-1][5] 5.222 0.001524
## Lag[4*(p+q)+(p+q)-1][9] 7.979 0.058718
## d.o.f=2
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.9333 0.3340
## Lag[2*(p+q)+(p+q)-1][5] 1.3216 0.7836
## Lag[4*(p+q)+(p+q)-1][9] 1.7056 0.9371
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.1719 0.500 2.000 0.6784
## ARCH Lag[5] 0.6750 1.440 1.667 0.8311
## ARCH Lag[7] 0.8166 2.315 1.543 0.9414
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 8.6255
## Individual Statistics:
## mu 1.7805
## ar1 0.1172
## ma1 0.1111
## omega 3.0009
## alpha1 0.1469
## beta1 0.2659
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.49 1.68 2.12
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 1.21584 0.22427
## Negative Sign Bias 1.46427 0.14337
## Positive Sign Bias 0.09107 0.92745
## Joint Effect 9.08656 0.02816 **
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 52.23 6.115e-05
## 2 30 63.07 2.524e-04
## 3 40 74.20 5.738e-04
## 4 50 85.04 1.075e-03
##
##
## Elapsed time : 0.271112
summary(fit_garch_n1)
## Length Class Mode
## 1 uGARCHfit S4
library(DT)
parametro_n1 <- data.frame(
Parameter = c("mu", "ar1", "ma1", "omega", "alpha1", "beta1"),
Estimate = c(-0.000319, 0.176964, -0.211289, 0.000002, 0.107453, 0.891544),
Std_Error = c(0.000302, 0.545003, 0.540444, 0.000002, 0.022321, 0.021415),
t_value = c(-1.05589, 0.32470, -0.39096, 1.02953, 4.81389, 41.63227),
p_value = c(0.291018, 0.745405, 0.695830, 0.303232, 0.000001, 0.000000)
)
# Adicionando uma coluna de significância
parametro_n1$Significativo <- ifelse(parametro_n1$p_value < 0.05, "Sim", "Não")
# Tabela de parâmetros interativa
datatable(parametro_n1, options = list(pageLength = 10),
caption = 'Parâmetros do Modelo GARCH n1 ')
teste_ljung_box_n1 <- data.frame(
Test = c("Ljung-Box (Lag 1)", "Ljung-Box (Lag 5)", "Ljung-Box (Lag 9)"),
Statistic = c(2.342, 5.222, 7.979),
p_value = c(0.125900, 0.001524, 0.058718),
Significativo = c("Não", "Sim", "Quase")
)
# Tabela do Teste de Ljung-Box interativa
datatable(teste_ljung_box_n1, options = list(pageLength = 10),
caption = "Teste de Ljung-Box")
arch_test_n1 <- data.frame(
Lag = c("Lag 3", "Lag 5", "Lag 7"),
Statistic = c(0.1719, 0.6750, 0.8166),
p_value = c(0.6784, 0.8311, 0.9414),
Significativo = c("Não", "Não", "Não")
)
# Tabela do Teste ARCH interativa
datatable(arch_test_n1, options = list(pageLength = 10),
caption = "Teste ARCH")
model_garch_n2 <- ugarchspec(variance.model = list(model = "sGARCH"), mean.model = list(armaOrder = c(1, 1)))
fit_garch_n2 <- ugarchfit(model_garch_n2, data = residuos_n2)
fit_garch_n2
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(1,0,1)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000036 0.000690 0.051516 0.958915
## ar1 -0.712706 0.291125 -2.448110 0.014361
## ma1 0.736899 0.280301 2.628950 0.008565
## omega 0.000025 0.000007 3.774815 0.000160
## alpha1 0.082333 0.012279 6.705286 0.000000
## beta1 0.907772 0.013116 69.209144 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000036 0.000786 0.045223 0.963929
## ar1 -0.712706 0.292393 -2.437493 0.014790
## ma1 0.736899 0.280813 2.624165 0.008686
## omega 0.000025 0.000017 1.459833 0.144336
## alpha1 0.082333 0.025093 3.281121 0.001034
## beta1 0.907772 0.026666 34.042902 0.000000
##
## LogLikelihood : 4581.899
##
## Information Criteria
## ------------------------------------
##
## Akaike -3.6636
## Bayes -3.6497
## Shibata -3.6637
## Hannan-Quinn -3.6586
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.00455 0.9462
## Lag[2*(p+q)+(p+q)-1][5] 0.21666 1.0000
## Lag[4*(p+q)+(p+q)-1][9] 2.39779 0.9605
## d.o.f=2
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.5382 0.4632
## Lag[2*(p+q)+(p+q)-1][5] 0.5809 0.9445
## Lag[4*(p+q)+(p+q)-1][9] 1.0202 0.9854
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.002263 0.500 2.000 0.9621
## ARCH Lag[5] 0.031825 1.440 1.667 0.9974
## ARCH Lag[7] 0.113708 2.315 1.543 0.9992
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 1.1824
## Individual Statistics:
## mu 0.03293
## ar1 0.12618
## ma1 0.12249
## omega 0.03725
## alpha1 0.05650
## beta1 0.10125
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.49 1.68 2.12
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 2.1417 0.03231 **
## Negative Sign Bias 0.7172 0.47330
## Positive Sign Bias 0.1530 0.87844
## Joint Effect 6.4421 0.09197 *
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 73.34 2.542e-08
## 2 30 93.89 9.069e-09
## 3 40 102.86 1.162e-07
## 4 50 107.52 2.863e-06
##
##
## Elapsed time : 0.554615
summary(fit_garch_n2)
## Length Class Mode
## 1 uGARCHfit S4
parametro_n2 <- data.frame(
Parameter = c("mu", "ar1", "ma1", "omega", "alpha1", "beta1"),
Estimate = c(0.000036, -0.712706, 0.736899, 0.000025, 0.082333, 0.907772),
Std_Error = c(0.000690, 0.291125, 0.280301, 0.000007, 0.012279, 0.013116),
t_value = c(0.051516, -2.448110, 2.628950, 3.774815, 6.705286, 69.209144),
p_value = c(0.958915, 0.014361, 0.008565, 0.000160, 0.000000, 0.000000)
)
# Adicionando uma coluna de significância
parametro_n2$Significativo <- ifelse(parametro_n2$p_value < 0.05, "Sim", "Não")
# Tabela de parâmetros interativa
datatable(parametro_n2, options = list(pageLength = 10),
caption = "Parâmetros do Modelo GARCH para n2")
ljung_box_n2 <- data.frame(
Test = c("Ljung-Box (Lag 1)", "Ljung-Box (Lag 5)", "Ljung-Box (Lag 9)"),
Statistic = c(0.00455, 0.21666, 2.39779),
p_value = c(0.9462, 1.0000, 0.9605)
)
# Tabela do Teste de Ljung-Box interativa
datatable(ljung_box_n2, options = list(pageLength = 10),
caption = "Teste de Ljung-Box em Resíduos Padronizados para n2")
arch_test_n2 <- data.frame(
Lag = c("Lag 3", "Lag 5", "Lag 7"),
Statistic = c(0.002263, 0.031825, 0.113708),
p_value = c(0.9621, 0.9974, 0.9992)
)
# Tabela do Teste ARCH interativa
datatable(arch_test_n2, options = list(pageLength = 10),
caption = "Teste ARCH para n2")
model_garch_n <- ugarchspec(variance.model = list(model = "sGARCH"), mean.model = list(armaOrder = c(1, 1)))
fit_garch_n <- ugarchfit(model_garch_n, data = residuos_n)
fit_garch_n
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(1,0,1)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000046 0.000302 -0.15054 0.88034
## ar1 -0.369145 0.478733 -0.77109 0.44066
## ma1 0.393122 0.473416 0.83039 0.40632
## omega 0.000002 0.000002 1.49967 0.13370
## alpha1 0.079279 0.007554 10.49549 0.00000
## beta1 0.919721 0.007840 117.30846 0.00000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000046 0.000437 -0.10421 0.917007
## ar1 -0.369145 0.449445 -0.82134 0.411455
## ma1 0.393122 0.443653 0.88610 0.375562
## omega 0.000002 0.000007 0.31335 0.754014
## alpha1 0.079279 0.020791 3.81308 0.000137
## beta1 0.919721 0.024246 37.93364 0.000000
##
## LogLikelihood : 8194.22
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.3612
## Bayes -4.3513
## Shibata -4.3612
## Hannan-Quinn -4.3577
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.1978 0.6565
## Lag[2*(p+q)+(p+q)-1][5] 0.2728 1.0000
## Lag[4*(p+q)+(p+q)-1][9] 1.9567 0.9863
## d.o.f=2
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.3288 0.5664
## Lag[2*(p+q)+(p+q)-1][5] 0.4581 0.9639
## Lag[4*(p+q)+(p+q)-1][9] 0.7423 0.9945
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.1515 0.500 2.000 0.6971
## ARCH Lag[5] 0.2069 1.440 1.667 0.9639
## ARCH Lag[7] 0.2803 2.315 1.543 0.9938
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 27.1452
## Individual Statistics:
## mu 5.2274
## ar1 0.1409
## ma1 0.1407
## omega 5.3014
## alpha1 0.6170
## beta1 0.4298
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.49 1.68 2.12
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 2.8062 0.005039 ***
## Negative Sign Bias 0.4544 0.649539
## Positive Sign Bias 0.2807 0.778927
## Joint Effect 11.1105 0.011143 **
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 84.96 2.556e-10
## 2 30 125.66 5.348e-14
## 3 40 136.12 1.102e-12
## 4 50 153.08 1.218e-12
##
##
## Elapsed time : 0.61166
summary(fit_garch_n)
## Length Class Mode
## 1 uGARCHfit S4
parametro_n <- data.frame(
Parameter = c("mu", "ar1", "ma1", "omega", "alpha1", "beta1"),
Estimate = c(-0.000046, -0.369145, 0.393122, 0.000002, 0.079279, 0.919721),
Std_Error = c(0.000302, 0.478733, 0.473416, 0.000002, 0.007554, 0.007840),
t_value = c(-0.15054, -0.77109, 0.83039, 1.49967, 10.49549, 117.30846),
p_value = c(0.88034, 0.44066, 0.40632, 0.13370, 0.00000, 0.00000)
)
# Adicionando uma coluna de significância
parametro_n$Significativo <- ifelse(parametro_n$p_value < 0.05, "Sim", "Não")
# Tabela de parâmetros interativa
datatable(parametro_n, options = list(pageLength = 10),
caption = "Parâmetros do Modelo GARCH para n")
ljung_box_n <- data.frame(
Test = c("Ljung-Box (Lag 1)", "Ljung-Box (Lag 5)", "Ljung-Box (Lag 9)"),
Statistic = c(0.1978, 0.2728, 1.9567),
p_value = c(0.6565, 1.0000, 0.9863)
)
# Tabela do Teste de Ljung-Box interativa
datatable(ljung_box_n, options = list(pageLength = 5),
caption = "Teste de Ljung-Box em Resíduos Padronizados para n")
arch_test_n <- data.frame(
Lag = c("Lag 3", "Lag 5", "Lag 7"),
Statistic = c(0.1515, 0.2069, 0.2803),
p_value = c(0.6971, 0.9639, 0.9938)
)
# Tabela do Teste ARCH interativa
datatable(arch_test_n, options = list(pageLength = 5),
caption = "Teste ARCH para n")
Modelo n1: Os parâmetros alpha1 (0.107453) e beta1 (0.891544) são significativos, indicando que a volatilidade é influenciada por enventos passados e sua persistência, com beta1 próximo de 1 mostrando alta persistência.
Outros parâmetros não são significativos, sugerindo que a média do modelo não é afetada.
Modelo n2: Os parâmetros alpha1 (0.082333) e beta1 (0.907772) também são significativos, confirmando a influência da estrutura GARCH na volatilidade. O parâmetro ar1 é significativo, indicando que os valores passados impactam a média do modelo.
Modelo n: Os parâmetros alpha1 (0.079279) e beta1 (0.919721) são significativos, mostrando uma volatilidade,os parâmetros mu, ar1 e ma1 não são significativos, indicando que a média do modelo não é fortemente influenciada por eles.
Resumindo
os modelos GARCH se mostraram eficazes em capturar a dinâmica da volatilidade nos dados analisados, importantes para a modelagem e previsão de séries temporais financeiras.
aic_valores <- c(AIC(modelo_n1), AIC(modelo_n2), AIC(modelo_n))
bic_valores <- c(BIC(modelo_n1), BIC(modelo_n2), BIC(modelo_n))
comparacao <- data.frame(
Modelo = c("n1", "n2", "n"),
AIC = round(aic_valores,4),
BIC = round(bic_valores,4))
comparacao
## Modelo AIC BIC
## 1 n1 -6988.532 -6957.718
## 2 n2 -8633.638 -8616.170
## 3 n -14288.567 -14269.876
# Tabela do Teste ARCH interativa
datatable(comparacao, options = list(pageLength = 5),
caption = "Comparação dos modelos AIC e BIC ")
Conclusão
Os critérios AIC e BIC sugerem que o modelo n é o melhor entre os três, n possui o menor valor AIC e BIC, indicando que ele se ajusta melhor aos dados em comparação com os modelos n1 e n2