InĀ [1]:
options(OutDec = ",") 
#==============================================================================
# Descricao
#==============================================================================
# Os dados a seguir correspondem aos indices diarios da BOVESPA de 3 de
# janeiro de 2011 a 10 de setembro de 2021.
#
# Os dados foram obtidos do sitio http://br.financas.yahoo.com/ 
# 
# Concentraremos nos indices (precos) de fechamento ("Close")
#
#==============================================================================
# Carregando pacotes
#==============================================================================
silence <- suppressPackageStartupMessages # Para omitir mensagens de alertas
silence(library(tseries))      # Teste de Jarque-Bera: 'jarque.bera.test'
silence(library(psych))        # Estatistica descritiva: 'describe'
silence(library(latticeExtra)) # Para construir dois graficos em um so'
silence(library(fGarch))       # Para os modelos ARCH e GARCH
InĀ [2]:
#==============================================================================
# Lendo os dados do arquivo BVSP.csv
#==============================================================================
BVSP  <- read.csv("../dados/BVSP.csv",header=TRUE,sep=",")
print(head(BVSP))

# Copiando os indices de fechamento como a serie de precos
preco <- BVSP$Close 
dias  <- as.Date(BVSP$Date) # Dias
n     <- length(preco)      # Numero de observacoes
        Date  Open  High   Low Close Adj.Close  Volume
1 2011-01-03 69310 70471 69305 69962     69962 1862400
2 2011-01-04 69962 70318 69560 70318     70318 2427200
3 2011-01-05 70311 71173 69802 71091     71091 2309200
4 2011-01-06 71093 71167 70469 70579     70579 2546000
5 2011-01-07 70580 70783 69718 70057     70057 1761000
6 2011-01-10 70056 70133 69666 70127     70127 1610800
InĀ [3]:
#==============================================================================
# Grafico da serie de precos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(15,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
plot(dias,preco/1000,lwd=2,type="l",col="black",main="",xlab="Dias",
    ylab="PreƧo (milhares)",ylim=c(20,140),
    xlim=c(as.Date("2011-01-01"),as.Date("2021-12-31")))
No description has been provided for this image
InĀ [4]:
#==============================================================================
# Calculando o retorno de capitalizacao continua, ou simplesmente log-retorno
#==============================================================================
rt <- diff(log(preco))  # Calcula a primeira diferenca
InĀ [5]:
#==============================================================================
# Grafico da serie de log retornos: r_t = log(1+R_t) = log(P_t)-log(P_{t-1})
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.4,lab=c(15,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
plot(dias[2:n],rt,lwd=2,col="black",main="",xlab="Dias",ylab="Log Retorno",
    type="l",xlim=c(as.Date("2011-01-01"),as.Date("2021-12-31")),
    ylim=c(-0.16,0.16))
No description has been provided for this image
InĀ [6]:
#==============================================================================
# A serie de precos e log retornos em um unico grafico
#==============================================================================
obj1  <- xyplot(rt    ~ dias,type="l",lwd=2,col=1,xlab="Dias",
    ylab="Log Retorno")
obj2  <- xyplot(preco ~ dias,type="l",lwd=2,col="red",ylab="PreƧos")
doubleYScale(obj1,obj2,add.ylab2=TRUE,use.style=FALSE)
No description has been provided for this image
InĀ [7]:
#==============================================================================
# Grafico da serie de log retornos ao quadrado
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(15,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
plot(dias[2:n],rt^2,lwd=2,col=1,main="",xlab="Dias",
    ylab="Log Retorno ao Quadrado",type="l",
    xlim=c(as.Date("2011-01-01"),as.Date("2021-12-31")))
No description has been provided for this image
InĀ [8]:
#==============================================================================
# ACF dos log retornos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
     mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
acf(rt,lwd=2,col=1,lag.max=16,xlab="Defasagem",main="",ylim=c(-0.2,1))
No description has been provided for this image
InĀ [9]:
#==============================================================================
# ACF dos log retornos ao quadrado
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
     mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
acf(rt^2,lwd=2,col=1,lag.max=16,xlab="Defasagem",main="",ylim=c(-0.2,1))
No description has been provided for this image
InĀ [10]:
#==============================================================================
# Calculando varios momentos amostrais
#==============================================================================
options(digits=4)
r.describe      <- describe(rt)
r.media         <- r.describe[,3]
r.desvpad       <- r.describe[,4]
r.mediana       <- r.describe[,5]
r.assimetria    <- r.describe[,11]
r.exc.curtose   <- r.describe[,12]
STATS           <- cbind(r.media,r.desvpad,r.mediana,r.assimetria,
                       r.exc.curtose)
colnames(STATS) <- c("media","desvpad","mediana","assimetria","exc.curt")                       
rownames(STATS) <- "IBOVESPA"
print(STATS)
             media desvpad   mediana assimetria exc.curt
IBOVESPA 0,0001878 0,01616 0,0003192    -0,8946    12,23
InĀ [11]:
#==============================================================================
# Histograma dos log retornos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(12,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
hist(rt,lwd=2,col=0,main="",xlab="Log Retornos",ylab="Densidade",prob=T,
    nclass=50,xlim=c(-0.17,0.17))
xseq <- seq(r.media-7*r.desvpad,r.media+7*r.desvpad,length=1000)
yseq <- dnorm(xseq,r.media,r.desvpad)
lines(xseq,yseq,lwd=3,col="red")
text(-0.09,25,"Certamente não normal",cex=1.2)
No description has been provided for this image
InĀ [12]:
#==============================================================================
# Boxplot dos log retornos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
boxplot(rt,lwd=2,col="red",main="",ylab="Log Retornos",pch=16,
    ylim=c(-0.2,0.2))
No description has been provided for this image
InĀ [13]:
#==============================================================================
# Normal QQ-plot dos log retornos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
qqnorm(rt,lwd=2,col="red",main="",xlab="Quantis teóricos",
    ylab="Quantis amostrais",pch=16,xlim=c(-4,4),ylim=c(-0.2,0.2))
qqline(rt,lwd=2,col="black",xlim=c(-4,4),xpd=F)
No description has been provided for this image
InĀ [14]:
#==============================================================================
# Testando a hipotese de distribuicao normal para os log retornos
#==============================================================================
# Lembre-se de verificar de novo a assimetria e a curtose 
print(STATS[1,4:5])
print("========================")

# Nivel de significancia dos testes
alpha <- 0.05
N     <- length(rt) # Tamanho da serie de log retornos

# Testando a assimetria zero
print("Teste de assimetria")
tSr      <- STATS[1,4]/sqrt(6/N)   # Razao t-Student
print(abs(tSr) > qnorm(1-alpha/2)) # Testanto (TRUE=Rejeitar, FALSE=Nao rejeitar) 
valorpSr <- 2*(1-pnorm(abs(tSr)))  # Valor p 
print(valorpSr)
print("========================")

# Testando a excesso de curtose zero
print("Teste de curtose")
tKr      <- STATS[1,5]/sqrt(24/N)  # Razao t-Student
print(abs(tKr) > qnorm(1-alpha/2)) # Testanto (TRUE=Rejeitar, FALSE=Nao rejeitar)
valorpKr <- 2*(1-pnorm(abs(tKr)))  # Valor p 
print(valorpKr)
print("========================")

# Testando a normalidade - teste de Jarque Bera
print("Teste de Jarque-Bera: normalidade")
JB    <- tSr^2 + tKr^2
print(JB  >  qchisq(1-alpha,2)) # Testanto (TRUE=Rejeitar, FALSE=Nao rejeitar)
print(jarque.bera.test(rt))     # Verificar o valor p (mesma conclusao)
assimetria   exc.curt 
   -0,8946    12,2347 
[1] "========================"
[1] "Teste de assimetria"
[1] TRUE
[1] 0
[1] "========================"
[1] "Teste de curtose"
[1] TRUE
[1] 0
[1] "========================"
[1] "Teste de Jarque-Bera: normalidade"
[1] TRUE

	Jarque Bera Test

data:  rt
X-squared = 16677, df = 2, p-value <2e-16

InĀ [15]:
#==============================================================================
# Teste para efeitos ARCH 
#==============================================================================
# Passo 1 em nossa analise
#==============================================================================
# Vimos pela ACF dos retornos uma coorelacao serial fraca. 
# Teste de Ljung-Box para os retornos
# Lembre-se da hipotese nula (H_0): independencia dos retornos 

ell <- floor(log(N)) # ell =~ log(N) como valor mais pratico
print(ell)
for(i in 1:ell) 
    print(Box.test(rt, lag = i, type = "Ljung-Box"))

# Conclusao: rejeitamos a hipotese nula de independencia dos retornos.
# Precisamos modelar a media. Utilizaremos um modelo AR.
[1] 7

	Box-Ljung test

data:  rt
X-squared = 26, df = 1, p-value = 4e-07


	Box-Ljung test

data:  rt
X-squared = 31, df = 2, p-value = 2e-07


	Box-Ljung test

data:  rt
X-squared = 31, df = 3, p-value = 7e-07


	Box-Ljung test

data:  rt
X-squared = 32, df = 4, p-value = 2e-06


	Box-Ljung test

data:  rt
X-squared = 41, df = 5, p-value = 8e-08


	Box-Ljung test

data:  rt
X-squared = 55, df = 6, p-value = 4e-10


	Box-Ljung test

data:  rt
X-squared = 75, df = 7, p-value = 1e-13

InĀ [16]:
#==============================================================================
# Passo 2 em nossa analise
#==============================================================================
# Ajuste de um modelo AR

r.ar <- ar.mle(rt)
p    <- r.ar$order
a    <- r.ar$res[(p+1):N] # residuos nao padronizados
n2   <- length(a)    
print(r.ar) # O melhor modelo foi um AR(10) segundo o AIC
Call:
ar.mle(x = rt)

Coefficients:
     1       2       3       4       5       6       7       8       9      10  
-0,085   0,032   0,006  -0,013   0,045  -0,054   0,069  -0,026   0,025   0,041  

Order selected 10  sigma^2 estimated as  0,000254
InĀ [17]:
#==============================================================================
# Verificando a ACF dos log retornos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
     mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
acf(a,xlab="Defasagem",main="",lwd=2,col=1,lag.max=15,ylim=c(-0.2,1))
No description has been provided for this image
InĀ [18]:
#==============================================================================
# Calculando varios momentos amostrais dos residuos padronizados 
# do modelo AR(10)
#==============================================================================
options(digits=4)
sigma2          <- r.ar$var        # variancia do erro estimada
sigma           <- sqrt(sigma2)    # desvio padrao do erro estimado
resid           <- a/sigma         # residuos padronizados
r.describe      <- describe(resid)
r.media         <- r.describe[,3]
r.desvpad       <- r.describe[,4]
r.mediana       <- r.describe[,5]
r.assimetria    <- r.describe[,11]
r.exc.curtose   <- r.describe[,12]
STATS           <- cbind(r.media,r.desvpad,r.mediana,r.assimetria,
                       r.exc.curtose)
colnames(STATS) <- c("media","desvpad","mediana","assimetria","exc.curt")
rownames(STATS) <- "IBOVESPA"  
print(STATS)

# Se os erros forem normais, entao os residuos devem ter
# media e mediana 0 (zero), desvio padrao 1 (um), 
# assimetria 0 (zero) e excesso de curtose 0 (zero).
# Possivelmente a presenca de nao normalidade.
              media desvpad   mediana assimetria exc.curt
IBOVESPA -0,0002323   1,002 0,0007451    -0,7339    10,34
InĀ [19]:
#==============================================================================
# Passo 3 em nossa analise
#==============================================================================
# Teste de Ljung-Box para os residuos (resid) do modelo AR(10)
# Lembre-se da hipotese nula (H_0): independencia dos residuos

for(i in (p+1):(p+ell+1)) 
    print(Box.test(resid, lag = i, type = "Ljung-Box",fitdf = p))

# Agora, os p-valores sao todos grandes. 
# Conclusao: nao rejeitamos a hipotese nula de independencia dos residuos
	Box-Ljung test

data:  resid
X-squared = 1,4, df = 1, p-value = 0,2


	Box-Ljung test

data:  resid
X-squared = 1,5, df = 2, p-value = 0,5


	Box-Ljung test

data:  resid
X-squared = 5,1, df = 3, p-value = 0,2


	Box-Ljung test

data:  resid
X-squared = 7,2, df = 4, p-value = 0,1


	Box-Ljung test

data:  resid
X-squared = 7,3, df = 5, p-value = 0,2


	Box-Ljung test

data:  resid
X-squared = 10, df = 6, p-value = 0,1


	Box-Ljung test

data:  resid
X-squared = 10, df = 7, p-value = 0,2


	Box-Ljung test

data:  resid
X-squared = 13, df = 8, p-value = 0,1

InĀ [20]:
#==============================================================================
# Passo 4 em nossa analise
#==============================================================================
# Teste para efeitos ARCH
# Teste de Ljung-Box para os residuos ao quadrado do modelo AR(10)
# Lembre-se da hipotese nula (H_0): independencia dos residuos ao quadrado

resid2 <- resid^2
for(i in 1:ell)
    print(Box.test(resid2, lag = i, type = "Ljung-Box"))

# Os p-valores sao todos pequenos.
# Conclusao: rejeitamos a hipotese nula de independencia dos residuos 
# ao quadrado.
	Box-Ljung test

data:  resid2
X-squared = 424, df = 1, p-value <2e-16


	Box-Ljung test

data:  resid2
X-squared = 882, df = 2, p-value <2e-16


	Box-Ljung test

data:  resid2
X-squared = 1159, df = 3, p-value <2e-16


	Box-Ljung test

data:  resid2
X-squared = 1351, df = 4, p-value <2e-16


	Box-Ljung test

data:  resid2
X-squared = 1504, df = 5, p-value <2e-16


	Box-Ljung test

data:  resid2
X-squared = 1530, df = 6, p-value <2e-16


	Box-Ljung test

data:  resid2
X-squared = 1738, df = 7, p-value <2e-16

InĀ [21]:
#==============================================================================
# Verificando a ACF dos retornos ao quadrado
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
     mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
acf(resid2,xlab="Defasagem",main="",lwd=2,col=1,lag.max=16,ylim=c(-0.2,1))
No description has been provided for this image
InĀ [22]:
#==============================================================================
# PACF dos quadrados dos retornos
#==============================================================================
# Verificando a ACF dos retornos ao quadrado
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
    mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
pacf(resid2,xlab="Defasagem",main="",lwd=2,col=1,lag.max=16,ylab="PACF",
    xlim=c(0,16),ylim=c(-0.2,0.5))
No description has been provided for this image
InĀ [23]:
#==============================================================================
# Se o modelo for um AR(p) para os residuos ao quadrado
#==============================================================================
ar.mle(resid2,order.max=20)
Call:
ar.mle(x = resid2, order.max = 20)

Coefficients:
     1       2       3       4       5       6       7       8       9      10  
 0,262   0,240   0,091   0,057  -0,007  -0,164   0,195   0,009   0,065   0,035  
    11      12      13      14  
-0,040   0,072  -0,063  -0,049  

Order selected 14  sigma^2 estimated as  8,53
InĀ [24]:
#==============================================================================
# Ajuste de modelos ARCH (na verdade modelos GARCH)
#==============================================================================
defaultW <- getOption("warn")
options(warn = -1)
ajuste1  <- garchFit(rt~arma(2,0)+garch(1,0), data=rt,trace=F) #AR(2)+ARCH(1)
ajuste2  <- garchFit(rt~arma(2,0)+garch(2,0), data=rt,trace=F) #AR(2)+ARCH(2)
ajuste3  <- garchFit(rt~arma(2,0)+garch(3,0), data=rt,trace=F) #AR(2)+ARCH(3)
ajuste4  <- garchFit(rt~arma(2,0)+garch(4,0), data=rt,trace=F) #AR(2)+ARCH(4)
ajuste5  <- garchFit(rt~arma(2,0)+garch(5,0), data=rt,trace=F) #AR(2)+ARCH(5)
ajuste6  <- garchFit(rt~arma(2,0)+garch(6,0), data=rt,trace=F) #AR(2)+ARCH(6)
ajuste7  <- garchFit(rt~arma(2,0)+garch(7,0), data=rt,trace=F) #AR(2)+ARCH(7)
ajuste8  <- garchFit(rt~arma(2,0)+garch(8,0), data=rt,trace=F) #AR(2)+ARCH(8)
ajuste9  <- garchFit(rt~arma(2,0)+garch(9,0), data=rt,trace=F) #AR(2)+ARCH(9)
ajuste10 <- garchFit(rt~arma(2,0)+garch(10,0),data=rt,trace=F) #AR(2)+ARCH(10)
ajuste11 <- garchFit(rt~arma(2,0)+garch(11,0),data=rt,trace=F) #AR(2)+ARCH(11)
options(warn = defaultW)
InĀ [25]:
#==============================================================================
# Selecao de modelos via BIC
#==============================================================================
# ajuste1@fit$llh # log verossimilhanca

options(digits=6)
ajuste1@fit$ics[2]  
ajuste2@fit$ics[2]
ajuste3@fit$ics[2]
ajuste4@fit$ics[2]
ajuste5@fit$ics[2]
ajuste6@fit$ics[2]
ajuste7@fit$ics[2]   
ajuste8@fit$ics[2]
ajuste9@fit$ics[2]
ajuste10@fit$ics[2]  # Menor valor, melhor ajuste
ajuste11@fit$ics[2]

# O modelo AR(2) + ARCH(10) tem o melhor ajuste pelo BIC=-5.62297784
# Note que alguns coeficientes AR sao estatisticamente nao significativos

summary(ajuste10)    # Ver testes de Ljung-Box para R, R^2 e teste LM
BIC: -5,55722821508121
BIC: -5,60535357281339
BIC: -5,60751272042737
BIC: -5,6089010802718
BIC: -5,6128670833882
BIC: -5,61735140758828
BIC: -5,622728437947
BIC: -5,62004809871382
BIC: -5,61861169799691
BIC: -5,62297784988305
BIC: -5,61996239580215
Title:
 GARCH Modelling 

Call:
 garchFit(formula = rt ~ arma(2, 0) + garch(10, 0), data = rt, 
    trace = F) 

Mean and Variance Equation:
 data ~ arma(2, 0) + garch(10, 0)
<environment: 0x55adcfe6dd70>
 [data = rt]

Conditional Distribution:
 norm 

Coefficient(s):
         mu          ar1          ar2        omega       alpha1       alpha2  
 5,3869e-04  -3,8397e-02   3,6123e-03   9,4649e-05   5,2388e-02   1,5404e-01  
     alpha3       alpha4       alpha5       alpha6       alpha7       alpha8  
 2,0343e-02   2,1830e-02   4,9147e-02   7,1816e-02   6,9982e-02   1,0000e-08  
     alpha9      alpha10  
 3,1894e-02   1,1208e-01  

Std. Errors:
 based on Hessian 

Error Analysis:
          Estimate  Std. Error  t value Pr(>|t|)    
mu       5,387e-04   2,620e-04    2,056 0,039745 *  
ar1     -3,840e-02   2,038e-02   -1,884 0,059549 .  
ar2      3,612e-03   2,124e-02    0,170 0,864942    
omega    9,465e-05   8,306e-06   11,395  < 2e-16 ***
alpha1   5,239e-02   1,978e-02    2,648 0,008094 ** 
alpha2   1,540e-01   2,675e-02    5,759 8,45e-09 ***
alpha3   2,034e-02   1,810e-02    1,124 0,261009    
alpha4   2,183e-02   1,979e-02    1,103 0,270099    
alpha5   4,915e-02   2,043e-02    2,406 0,016147 *  
alpha6   7,182e-02   2,443e-02    2,940 0,003284 ** 
alpha7   6,998e-02   2,132e-02    3,283 0,001029 ** 
alpha8   1,000e-08   2,470e-02    0,000 1,000000    
alpha9   3,189e-02   1,869e-02    1,706 0,087981 .  
alpha10  1,121e-01   2,978e-02    3,764 0,000167 ***
---
Signif. codes:  0 ā€˜***’ 0,001 ā€˜**’ 0,01 ā€˜*’ 0,05 ā€˜.’ 0,1 ā€˜ ’ 1

Log Likelihood:
 7401,5    normalized:  2,83257 

Description:
 Wed Sep 17 19:37:58 2025 by user: ralph 


Standardised Residuals Tests:
                                 Statistic     p-Value
 Jarque-Bera Test   R    Chi^2  566,733408 0,00000e+00
 Shapiro-Wilk Test  R    W        0,985446 1,02074e-15
 Ljung-Box Test     R    Q(10)    6,945799 7,30552e-01
 Ljung-Box Test     R    Q(15)   11,795279 6,94454e-01
 Ljung-Box Test     R    Q(20)   21,416331 3,73002e-01
 Ljung-Box Test     R^2  Q(10)    6,435658 7,77430e-01
 Ljung-Box Test     R^2  Q(15)    7,427226 9,44693e-01
 Ljung-Box Test     R^2  Q(20)    9,506107 9,76270e-01
 LM Arch Test       R    TR^2     7,107423 8,50434e-01

Information Criterion Statistics:
     AIC      BIC      SIC     HQIC 
-5,65442 -5,62298 -5,65448 -5,64303 

InĀ [26]:
#==============================================================================
# Reduzindo a parte AR
#==============================================================================
defaultW <- getOption("warn")
options(warn = -1)
ajuste10a  <- garchFit(rt ~           garch(10,0),data=rt,trace=F)
ajuste10b  <- garchFit(rt ~ arma(1,0)+garch(10,0),data=rt,trace=F)
ajuste10c  <- ajuste10
options(warn = defaultW)
InĀ [27]:
#==============================================================================
# Selecao de modelos via BIC
#==============================================================================
options(digits=6)
ajuste10a@fit$ics[2] # Menor BIC 
ajuste10b@fit$ics[2] 
ajuste10c@fit$ics[2]

summary(ajuste10a)
BIC: -5,62740835182572
BIC: -5,62580291166039
BIC: -5,62297784988305
Title:
 GARCH Modelling 

Call:
 garchFit(formula = rt ~ garch(10, 0), data = rt, trace = F) 

Mean and Variance Equation:
 data ~ garch(10, 0)
<environment: 0x55adcd7c6e58>
 [data = rt]

Conditional Distribution:
 norm 

Coefficient(s):
        mu       omega      alpha1      alpha2      alpha3      alpha4  
5,3518e-04  9,5124e-05  5,8519e-02  1,5762e-01  1,6817e-02  2,1772e-02  
    alpha5      alpha6      alpha7      alpha8      alpha9     alpha10  
4,9101e-02  6,8923e-02  6,7717e-02  1,0000e-08  3,2807e-02  1,0856e-01  

Std. Errors:
 based on Hessian 

Error Analysis:
         Estimate  Std. Error  t value Pr(>|t|)    
mu      5,352e-04   2,612e-04    2,049 0,040472 *  
omega   9,512e-05   8,322e-06   11,431  < 2e-16 ***
alpha1  5,852e-02   1,977e-02    2,959 0,003082 ** 
alpha2  1,576e-01   2,688e-02    5,863 4,53e-09 ***
alpha3  1,682e-02   1,767e-02    0,952 0,341319    
alpha4  2,177e-02   1,999e-02    1,089 0,276209    
alpha5  4,910e-02   2,039e-02    2,408 0,016022 *  
alpha6  6,892e-02   2,416e-02    2,852 0,004340 ** 
alpha7  6,772e-02   2,101e-02    3,223 0,001268 ** 
alpha8  1,000e-08   2,341e-02    0,000 1,000000    
alpha9  3,281e-02   1,876e-02    1,749 0,080289 .  
alpha10 1,086e-01   2,961e-02    3,666 0,000246 ***
---
Signif. codes:  0 ā€˜***’ 0,001 ā€˜**’ 0,01 ā€˜*’ 0,05 ā€˜.’ 0,1 ā€˜ ’ 1

Log Likelihood:
 7399,42    normalized:  2,83177 

Description:
 Wed Sep 17 19:39:46 2025 by user: ralph 


Standardised Residuals Tests:
                                 Statistic     p-Value
 Jarque-Bera Test   R    Chi^2  553,928897 0,00000e+00
 Shapiro-Wilk Test  R    W        0,985649 1,36437e-15
 Ljung-Box Test     R    Q(10)    9,737649 4,63804e-01
 Ljung-Box Test     R    Q(15)   14,362932 4,98201e-01
 Ljung-Box Test     R    Q(20)   24,625342 2,16142e-01
 Ljung-Box Test     R^2  Q(10)    6,120293 8,05057e-01
 Ljung-Box Test     R^2  Q(15)    7,203244 9,51762e-01
 Ljung-Box Test     R^2  Q(20)    9,281258 9,79415e-01
 LM Arch Test       R    TR^2     6,894358 8,64515e-01

Information Criterion Statistics:
     AIC      BIC      SIC     HQIC 
-5,65436 -5,62741 -5,65440 -5,64460 

InĀ [28]:
#==============================================================================
# Refazendo os ajustes de modelos ARCH sem a parte AR(2)
#==============================================================================
defaultW <- getOption("warn")
options(warn = -1)
ajuste1rt  <- garchFit(rt ~ garch(1,0), data=rt,trace=F) #ARCH(1)
ajuste2rt  <- garchFit(rt ~ garch(2,0), data=rt,trace=F) #ARCH(2)
ajuste3rt  <- garchFit(rt ~ garch(3,0), data=rt,trace=F) #ARCH(3)
ajuste4rt  <- garchFit(rt ~ garch(4,0), data=rt,trace=F) #ARCH(4)
ajuste5rt  <- garchFit(rt ~ garch(5,0), data=rt,trace=F) #ARCH(5)
ajuste6rt  <- garchFit(rt ~ garch(6,0), data=rt,trace=F) #ARCH(6)
ajuste7rt  <- garchFit(rt ~ garch(7,0), data=rt,trace=F) #ARCH(7)
ajuste8rt  <- garchFit(rt ~ garch(8,0), data=rt,trace=F) #ARCH(8)
ajuste9rt  <- garchFit(rt ~ garch(9,0), data=rt,trace=F) #ARCH(9)
ajuste10rt <- garchFit(rt ~ garch(10,0),data=rt,trace=F) #ARCH(10)
ajuste11rt <- garchFit(rt ~ garch(11,0),data=rt,trace=F) #ARCH(11)
options(warn = defaultW)
InĀ [29]:
#==============================================================================
# Selecao de modelos via BIC
#==============================================================================
# ajuste1rt@fit$llh # log verossimilhanca

options(digits=6)
ajuste1rt@fit$ics[2]  
ajuste2rt@fit$ics[2]
ajuste3rt@fit$ics[2]
ajuste4rt@fit$ics[2]
ajuste5rt@fit$ics[2]
ajuste6rt@fit$ics[2]
ajuste7rt@fit$ics[2]   
ajuste8rt@fit$ics[2]
ajuste9rt@fit$ics[2]
ajuste10rt@fit$ics[2]  # Menor valor, melhor ajuste
ajuste11rt@fit$ics[2]

summary(ajuste10rt)
BIC: -5,56280326040788
BIC: -5,61099119503456
BIC: -5,6126921877549
BIC: -5,6142396302143
BIC: -5,61834537473096
BIC: -5,62248045952816
BIC: -5,62722084874104
BIC: -5,6247997698545
BIC: -5,62347056198723
BIC: -5,62740835182572
BIC: -5,62464205659441
Title:
 GARCH Modelling 

Call:
 garchFit(formula = rt ~ garch(10, 0), data = rt, trace = F) 

Mean and Variance Equation:
 data ~ garch(10, 0)
<environment: 0x55adcf5aa7d8>
 [data = rt]

Conditional Distribution:
 norm 

Coefficient(s):
        mu       omega      alpha1      alpha2      alpha3      alpha4  
5,3518e-04  9,5124e-05  5,8519e-02  1,5762e-01  1,6817e-02  2,1772e-02  
    alpha5      alpha6      alpha7      alpha8      alpha9     alpha10  
4,9101e-02  6,8923e-02  6,7717e-02  1,0000e-08  3,2807e-02  1,0856e-01  

Std. Errors:
 based on Hessian 

Error Analysis:
         Estimate  Std. Error  t value Pr(>|t|)    
mu      5,352e-04   2,612e-04    2,049 0,040472 *  
omega   9,512e-05   8,322e-06   11,431  < 2e-16 ***
alpha1  5,852e-02   1,977e-02    2,959 0,003082 ** 
alpha2  1,576e-01   2,688e-02    5,863 4,53e-09 ***
alpha3  1,682e-02   1,767e-02    0,952 0,341319    
alpha4  2,177e-02   1,999e-02    1,089 0,276209    
alpha5  4,910e-02   2,039e-02    2,408 0,016022 *  
alpha6  6,892e-02   2,416e-02    2,852 0,004340 ** 
alpha7  6,772e-02   2,101e-02    3,223 0,001268 ** 
alpha8  1,000e-08   2,341e-02    0,000 1,000000    
alpha9  3,281e-02   1,876e-02    1,749 0,080289 .  
alpha10 1,086e-01   2,961e-02    3,666 0,000246 ***
---
Signif. codes:  0 ā€˜***’ 0,001 ā€˜**’ 0,01 ā€˜*’ 0,05 ā€˜.’ 0,1 ā€˜ ’ 1

Log Likelihood:
 7399,42    normalized:  2,83177 

Description:
 Wed Sep 17 19:40:56 2025 by user: ralph 


Standardised Residuals Tests:
                                 Statistic     p-Value
 Jarque-Bera Test   R    Chi^2  553,928897 0,00000e+00
 Shapiro-Wilk Test  R    W        0,985649 1,36437e-15
 Ljung-Box Test     R    Q(10)    9,737649 4,63804e-01
 Ljung-Box Test     R    Q(15)   14,362932 4,98201e-01
 Ljung-Box Test     R    Q(20)   24,625342 2,16142e-01
 Ljung-Box Test     R^2  Q(10)    6,120293 8,05057e-01
 Ljung-Box Test     R^2  Q(15)    7,203244 9,51762e-01
 Ljung-Box Test     R^2  Q(20)    9,281258 9,79415e-01
 LM Arch Test       R    TR^2     6,894358 8,64515e-01

Information Criterion Statistics:
     AIC      BIC      SIC     HQIC 
-5,65436 -5,62741 -5,65440 -5,64460 

InĀ [30]:
#==============================================================================
# Analisando os residuos padronizados deste modelo
# Verificacao das hipoteses
#==============================================================================
# Note que o teste de Ljung-Box nao rejeita a hipotese nula de 
# autocorrelacao para varias escolhar de m

# Por outro lado, note que o teste de Jarque e Bera e o teste de
# Shapiro-Wilk rejeitam a hipotese nula de normalidade

# Calculo dos residuos padronizados
resid <- ajuste10rt@residuals/volatility(ajuste10rt)
InĀ [31]:
#==============================================================================
# ACF dos residuos padronizados
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,8,5),
    mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
acf(resid,xlab="Defasagem",main="",bty="n",lwd=2,ylim=c(-0.2,1))
No description has been provided for this image
InĀ [32]:
#==============================================================================
# Histograma dos residuos padronizados
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,8,5),
    mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
hist(resid,xlab="ResĆ­duos",main="",prob=T,ylab="Densidade",col="orange",lwd=2)
No description has been provided for this image
InĀ [33]:
#==============================================================================
# Boxplot dos residuos padronizados
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,8,5),
    mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
boxplot(resid,ylab="ResĆ­duos",col="lightblue",ylim=c(-8,4))
No description has been provided for this image
InĀ [34]:
#==============================================================================
# QQ-Norm dos residuos padronizados
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,8,5),
    mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
qqnorm(resid,main="",xlab="Percentis teóricos",xlim=c(-4,4),ylim=c(-4,4),
       ylab="Percentis amostrais",col="red",pch=15)
qqline(resid,lwd=2)
No description has been provided for this image
InĀ [35]:
#==============================================================================
# Calculando varios momentos amostrais
#==============================================================================
options(digits=6)
r.describe      <- describe(resid)
r.media         <- r.describe[,3]
r.desvpad       <- r.describe[,4]
r.mediana       <- r.describe[,5]
r.assimetria    <- r.describe[,11]
r.exc.curtose   <- r.describe[,12]
STATS           <- cbind(r.media,r.desvpad,r.mediana,r.assimetria,
                       r.exc.curtose)
colnames(STATS) <- c("media","desvpad","mediana","assimetria","exc.curt")
rownames(STATS) <- "IBOVESPA"                         
print(STATS)

# Se os erros forem normais, entao os residuos devem ter media e mediana 0, 
# desvio padrao 1, assimetria 0 e excesso de curtose 0.

# Conclusao: a hipotese de normalidade nao vale.
# Como proceder daqui? (Veremos depois.)
              media  desvpad    mediana assimetria exc.curt
IBOVESPA -0,0256564 0,999863 -0,0144858  -0,353383  2,13795
InĀ [36]:
#==============================================================================
# Considere por um momento o modelo ARCH(10) como bem ajustado.
# Previsao 10 passos a frente com intervalo de previsao de 95%
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,8,5),
    mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
previsao <- predict(ajuste10rt,n.ahead=10,plot=T,conf=.95,nx=100)
No description has been provided for this image
InĀ [37]:
print(previsao)
   meanForecast meanError standardDeviation lowerInterval upperInterval
1   0,000535183 0,0154870         0,0154870    -0,0298188     0,0308891
2   0,000535183 0,0145913         0,0145913    -0,0280632     0,0291336
3   0,000535183 0,0155115         0,0155115    -0,0298668     0,0309372
4   0,000535183 0,0170825         0,0170825    -0,0329460     0,0340163
5   0,000535183 0,0186086         0,0186086    -0,0359371     0,0370075
6   0,000535183 0,0144613         0,0144613    -0,0278085     0,0288789
7   0,000535183 0,0161802         0,0161802    -0,0311774     0,0322477
8   0,000535183 0,0193127         0,0193127    -0,0373171     0,0383874
9   0,000535183 0,0157274         0,0157274    -0,0302900     0,0313603
10  0,000535183 0,0157878         0,0157878    -0,0304083     0,0314787