Está en la página 1de 78

Econometría Financiera

Clase 2. Modelos de volatilidad condicional

Nerys Ramírez Mordán

Instituto Tecnologico de Santo Domingo (INTEC)

26 mayo de 2022

Clase 2 Econometría Financiera 26 mayo de 2022 1 / 78


Tabla de contenido

1 Persistencia en volatilidad
2 Modelos de volatilidad condicional
3 Comparando estrategias
4 GARCH asimétricos
5 GARCH no gaussianos
6 Validación del modelo
7 Forecast volatilidades
8 Referencias

Clase 2 Econometría Financiera 26 mayo de 2022 2 / 78


Introducción

Section 1

Introducción

Clase 2 Econometría Financiera 26 mayo de 2022 3 / 78


Introducción

Introducción

Hasta ahora, hemos tratado la autocorrelación de las series a partir de


la especificación de un modelo ARIMA (1976), cuya innovación sería
un proceso ruido blanco, con varianza constante en el tiempo
(Novales, 2016).
No obstante, aparte de esta autocorrelación, se puede producir
dependencia temporal en segundos momentos como la varianza, al
observarse heterocedásticidad. Por lo que, es preciso modelizar la
evolución de la varianza.

Clase 2 Econometría Financiera 26 mayo de 2022 4 / 78


Introducción

La varianza como medida de riesgo

Según Bahi (2007), la volatilidad es una medida de la intensidad de


los cambios aleatorios impredecibles.
Según Hull (2009, p.274), la varianza es una medida de nuestra
incertidumbre sobre una serie, y se define a partir de la desviación
estándar.
Esta volatilidad se estima a partir de datos históricos, donde
yt = ln Pt − ln Pt−1 :

N N

N
!2 
1 X 1 X 1 X
σ2 = (yi − ȳ )2 = yi2 − yi 
n − 1 i=1 n − 1 i=1 n i=1

Clase 2 Econometría Financiera 26 mayo de 2022 5 / 78


Introducción

La varianza como medida de riesgo


La clásica visión de la volatilidad como una mera constante de la
función de distribución de los rendimientos de ‘una serie de tiempo’
quedó obsoleta hace ya mucho tiempo (Bahi, 2007).
En la gestión de riesgo, que pretende minimizar los efectos adversos
derivados de la incertidumbre asociada a ciertos eventos, no podemos
suponer que los activos se comporte de forma constante en el tiempo
(Díaz, 2014).

0.014
8.6

0.04

0.012
8.4

0.02

0.010
diff(x)

vol_x
x

8.2

0.00

0.008
8.0

−0.02

0.006
7.8

−0.04

1992 1994 1996 1998 1992 1994 1996 1998 1992 1994 1996 1998
Clase 2 Econometría Financiera 26 mayo de 2022 6 / 78
Introducción

La varianza como medida de riesgo

La varianza computa como riesgo cambios de nivel o efectos


estadisticos como la tendencia o ciclos.
La volatilidad presenta cluster y persistencia.
La volatilidad presenta efectos asimétricos.
Se calcula sobre datos históricos y no sobre datos futuros.
Todas las observaciones pesan iguales.

Clase 2 Econometría Financiera 26 mayo de 2022 7 / 78


Efecto ARCH

Section 2

Efecto ARCH

Clase 2 Econometría Financiera 26 mayo de 2022 8 / 78


Efecto ARCH

Análisis preliminar

Ahora la idea es, cuando yt carece de autocorrelación:

yt = t σt2

q
X q
X
σt2 = ω + 2
αi yt−i , ω > 0, αi > 0, αi < 1
i=1 i=1

- Si yt presenta alguna estructura, de otras variables o su pasado, la


varianza se obtiene a partir del residuo de ese modelo.

Ahora la σt2 depende del tiempo.

Clase 2 Econometría Financiera 26 mayo de 2022 9 / 78


Efecto ARCH

Análisis preliminar

El primer paso es siempre estudiar las características de las series,


dado que los momentos solo están definidos sobre series estacionarias.
Características de series económicas y financieras de alta frecuencia
(Novales, 2013; Ruíz, 1994):

– Ausencia de estructura regular dinámica en la media.


– Exceso de curtosis y simétricas.
– Agrupamientos de volatilidad.
– Persistencia en volatilidad.
– Apalancamiento en volatilidad.

Clase 2 Econometría Financiera 26 mayo de 2022 10 / 78


Efecto ARCH

Análisis preliminar

La inspección visual de la serie, muestra claramente que esta no se


comportan I(0). Por tanto, se procede a diferenciar el log de la serie,
para intentar obtener una representación estacionaria de la misma.

# Códigos bases continuan de la clase 1


ggarrange(a, b, ncol = 1, nrow = 2)

xt
1500
precio

1000
500
1995 2000 2005 2010 2015
fecha

dif(xt)
50
0
.

−50
−100
−150
1995 2000 2005 2010 2015
Index

Clase 2 Econometría Financiera 26 mayo de 2022 11 / 78


Efecto ARCH

Transformación logarítmica

Transformación logarítmica para estabilizar la varianza.

# Códigos bases continuan de la clase 1


ggarrange(a, b, c, d, ncol = 2, nrow = 2)

xt dif(xt)
50
1500
precio

.
1000 −50
500 −100
−150
1995 2000 2005 2010 2015 1995 2000 2005 2010 2015
fecha Index

log(xt) Dif(log(xt))
7.5
log(precio)

0.05
7.0
0.00
6.5
.

6.0 −0.05
5.5 −0.10
1995 2000 2005 2010 2015 1995 2000 2005 2010 2015
fecha Index

Clase 2 Econometría Financiera 26 mayo de 2022 12 / 78


Efecto ARCH

Persistencia de la volatilidad

La representación yt2 :

diff(log(xts_precio), differences=1)^2 %>%


autoplot() +
theme_minimal()

0.0100

0.0075
.

0.0050

0.0025

0.0000
1995 2000 2005 2010 2015
Index

Clase 2 Econometría Financiera 26 mayo de 2022 13 / 78


Efecto ARCH

Persistencia de la volatilidad
Un histograma de frecuencia sobre la primera diferencia de las
rentabilidades al cuadrado, brinda usualmente una primera
aproximación de la persistencia en volatilidad.
g1 <- data.frame(roro) %>%
ggplot(aes(x=roro)) + geom_histogram(fill="steelblue")

g2 <- data.frame(roro) %>%


ggplot(aes(x=roro^2)) + geom_histogram(fill="steelblue")

ggarrange(g1, g2, ncol = 2, nrow = 1)

2500

2000
4000

1500
count

count

1000
2000

500

0 0
Clase 2 Econometría Financiera 26 mayo de 2022 14 / 78
Efecto ARCH

Persistencia de la volatilidad
Taylor (1982) demostró que el test ARMA sobre yt2 , es equivalente a
identificar la estructura ARCH. Por lo que, la presencia de clusters de
volatilidad o dependencia de orden no lineal en yt , puede testearse
por medio de los correlogramas de yt2 .
roro2 <- roro^2

library(astsa)
acf2(roro2, plot=T, main=" ")
−0.05 0.25
ACF

0 20 40 60 80
LAG
−0.05 0.25
PACF

0 20 40 60 80
LAG
Clase 2 Econometría Financiera 26 mayo de 2022 15 / 78
Efecto ARCH

ARCH Engle’s Test For Residual Heteroscedasticity

Engle (1982) propuso un test de estructura ARCH(q) a partir de la


estructura autoregresiva del cuadrado de las innovaciones de un
modelo AR(q) (2 ):

yt = β0 + β1 Xt−q + t

Donde, la varianza del error depende del término de error cuadrado


retrasado un período t ∼ N(0, β0 + β1 2t ).
Ho : ρ1 = ρ2 = ... = ρm = 0.

Clase 2 Econometría Financiera 26 mayo de 2022 16 / 78


Efecto ARCH

Persistencia de la volatilidad

Ho : ρ1 = ρ2 = ... = ρm = 0
Box.test(roro^2, lag = 12, type = "Ljung")

##
## Box-Ljung test
##
## data: roro^2
## X-squared = 966.43, df = 12, p-value < 2.2e-16

FinTS::ArchTest(roro^2, lags=1, demean=TRUE)

##
## ARCH LM-test; Null hypothesis: no ARCH effects
##
## data: roro^2
## Chi-squared = 11.714, df = 1, p-value = 0.0006204

Clase 2 Econometría Financiera 26 mayo de 2022 17 / 78


Efecto ARCH

ARCH Engle’s Test For Residual Heteroscedasticity

library(tseries)
mod1<-arima(roro,order = c(1,0,0))
e<-mod1$residuals^2

library(forecast)
ggtsdisplay(e, main="")

0.0100
0.0075
0.0050
0.0025
0.0000
0 1000 2000 3000 4000 5000 6000

0.15 0.15
PACF

0.10 0.10
ACF

0.05 0.05
0.00 0.00

0 10 20 30 0 10 20 30
Lag Lag

Clase 2 Econometría Financiera 26 mayo de 2022 18 / 78


Efecto ARCH

ARCH Engle’s Test For Residual Heteroscedasticity

# FinTS::ArchTest
archtest <- aTSA::arch.test(mod1, output = F)
archtest

## order PQ p.value LM p.value


## [1,] 4 420.6793 0 8873.183 0
## [2,] 8 737.2578 0 3870.418 0
## [3,] 12 959.0246 0 2461.751 0
## [4,] 16 1182.0183 0 1760.872 0
## [5,] 20 1455.6165 0 1357.784 0
## [6,] 24 1753.1410 0 1093.151 0

Clase 2 Econometría Financiera 26 mayo de 2022 19 / 78


Efecto ARCH

Agregación de volatilidad
Dependiendo de la frecuencia de los datos, obtendremos medidas de
volatilidad en esas mismas frecuencias, sin embargo, es frecuente
utilizar la volatilidad anual para presentar
√ una medida de la volatilidad
de un activo/serie, multiplicado por t:


σano = σdia 252
sqrt(252)*sd(roro)

## [1] 0.1573411

# Usando la indexación date de la clase 1


roro_xts <- diff(xts_precio, differences=1)
sqrt(252) * sd(roro_xts["2010"]) #xts permite indexar series temporales

## [1] 197.9166
Clase 2 Econometría Financiera 26 mayo de 2022 20 / 78
Modelos de volatildiad condicional

Section 3

Modelos de volatildiad condicional

Clase 2 Econometría Financiera 26 mayo de 2022 21 / 78


Modelos de volatildiad condicional

Ventanas de volatilidad

(Rolling volatility estimation) rota las observaciones, agregando la


más reciente y eliminando la más distante, para calcular la volatilidad
sobre sobre esta ventana.

T
1 X
σt2 = e2
T i=1 t−i

Clase 2 Econometría Financiera 26 mayo de 2022 22 / 78


Modelos de volatildiad condicional

Ventanas de volatilidad

apply es una familia de funciones vectorizadas en R, para trabajar


loops.
rollapply en R.

vol_vm_oro <- rollapply(roro, width=66, FUN=sd)


plot(vol_vm_oro)

vol_vm_oro 1991−04−05 / 2014−09−09

0.025 0.025

0.020 0.020

0.015 0.015

0.010 0.010

0.005 0.005

abr. 05 1991 ene. 03 1994 ene. 01 1997 ene. 03 2000 ene. 01 2003 ene. 02 2006 ene. 01 2009 ene. 02 2012 sep. 09 2014

Clase 2 Econometría Financiera 26 mayo de 2022 23 / 78


Modelos de volatildiad condicional

Ventanas de volatilidad

library(PerformanceAnalytics)

chart.RollingPerformance(R = roro,
width = 22, #ventana
scale = 252,
FUN = "sd.annualized")

Rolling 22−day sd.annualized 1991−04−05 / 2014−09−09


0.5

0.4

0.3

0.2

0.1

abr. 05 1991 ene. 03 1994 ene. 01 1997 ene. 03 2000 ene. 01 2003 ene. 02 2006 ene. 01 2009 ene. 02 2012 sep. 09 2014

Clase 2 Econometría Financiera 26 mayo de 2022 24 / 78


Modelos de volatildiad condicional

Ventanas de volatilidad: n?

par(mfrow = c(1, 3))


chart.RollingPerformance(R = roro, width = 5, scale = 252, FUN = "sd.annual
chart.RollingPerformance(R = roro, width = 22, scale = 252, FUN = "sd.annua
chart.RollingPerformance(R = roro, width = 66, scale = 252, FUN = "sd.annua

Rolling 5−day sd.annualized


1991−04−05 / 2014−09−09 Rolling 22−day sd.annualized
1991−04−05 / 2014−09−09 Rolling 66−day sd.annualized
1991−04−05 / 2014−09−09
0.5 0.4

0.6 0.4
0.3
0.3
0.4
0.2
0.2
0.2 0.1
0.1

abr. 05 1991 ene. 01 2001 ene. 01 2010 abr. 05 1991 ene. 01 2001 ene. 01 2010 abr. 05 1991 ene. 01 2001 ene. 01 2010

Clase 2 Econometría Financiera 26 mayo de 2022 25 / 78


Modelos de volatildiad condicional

EWMA

La idea de considerar el peso de las observaciones según su posición


temporal, queda capturada en los métodos de suavizado exponencial,
al reponderar las observaciones para que las más reciente reciban
mayor peso.

T
X T
X
σn2 = 2
= αi en−1 , = αi = 1
i=1 i=1

Donde αi es la ponderación asociada a la observación de hace i


periodos, desde t. Siendo αi > αj siempre que i > j.

Clase 2 Econometría Financiera 26 mayo de 2022 26 / 78


Modelos de volatildiad condicional

EWMA Risk metrics

Un método común, es usar potencias de un factor lambda


(0 < λ < 1), que estima las volatilidades diarias a partir de un
promedio ponderado de las volatilidades pasadas, que permite que las
observaciones vayan perdiendo importancia cuanto más se alejan en el
tiempo.

2
σt+1 = λσt2 + (1 − λ)yt2

Clase 2 Econometría Financiera 26 mayo de 2022 27 / 78


Modelos de volatildiad condicional

EWMA en R
r_oro <- diff(log(ts_precios))
tobs <- length(r_oro)
varEWMA<- var(r_oro);
lambda<-0.94

for (i in 2:tobs) {varEWMA[i]<-lambda*varEWMA[i-1]+(1-lambda)*(roro[i-1]^2)

vol_ewma_oro <- sqrt(varEWMA)


plot(vol_ewma_oro, t=’l’)
0.025
vol_ewma_oro

0.015
0.005

0Clase 2 1000 2000 Econometría Financiera


3000 4000 26 mayo de 2022
5000 6000 28 / 78
Modelos de volatildiad condicional

EWMA

Un inconveniente del modelo ponderado es que no incluye una


constante, por lo que el modelo no proporciona un nivel de referencia
para la volatilidad a largo plazo, por lo que, su pronóstico sobre
volatilidad futura es la misma actual (Hurn et al., 2015).

Clase 2 Econometría Financiera 26 mayo de 2022 29 / 78


Modelos de volatildiad condicional

ARCH

El ARCH (AutoRegressive Conditional Heteroskedastic, propuesto por


Engle en 1982) es un modelo discreto, que condiciona la varianza en t
como función de la información en t − 1.

var (yt |Ωt−1 ) = σt2

Siendo la especificación general del modelo ARCH(p):

p
X
σt2 = α1 yt−1
2 2
+ α2 yt−2 2
+ ... + αp yt−p = 2
αi yt−i
i=1

Clase 2 Econometría Financiera 26 mayo de 2022 30 / 78


Modelos de volatildiad condicional

ARCH: estimación en R

T
X
σt2 = ω + 2
αi et−i
i=1

library(fGarch)
fit_arch <- garchFit(~garch(1, 0), trace=FALSE, data = r_oro)
fit_arch@fit$matcoef

## Estimate Std. Error t value Pr(>|t|)


## mu 0.0002559829 1.200298e-04 2.132662 0.03295247
## omega 0.0000805841 1.723464e-06 46.757058 0.00000000
## alpha1 0.1703803270 1.651280e-02 10.318075 0.00000000

Clase 2 Econometría Financiera 26 mayo de 2022 31 / 78


Modelos de volatildiad condicional

ARCH
– Ventana móvil (et2 = yt − y¯t ):

T
1 X
σt2 = e2
T i=1 t−i

– Exponencial:

T
X
σt2 = 2
αi et−i
i=1

– ARCH(p):

T
X
σt2 =ω+ 2
αi et−i
i=1

Clase 2 Econometría Financiera 26 mayo de 2022 32 / 78


Modelos de volatildiad condicional

GARCH(p,q) constante en media


En muchos casos, la especiócación ARCH que recoge la estructura de
autocorrelación en varianza precisa de un elevado número de
parámetros (Novales, 2014, p.13).
Ecuaciones del modelo GARCH (generalized autoregressive
conditional heteroskedasticity, propuesto por Bollerslev en 1986):

yt = µ + et

et ∼ N(0, σt2 )

q
X p
X
σt2 =ω+ 2
αi et−i + 2
βi σt−i
i=1 i=1

Clase 2 Econometría Financiera 26 mayo de 2022 33 / 78


Modelos de volatildiad condicional

GARCH(p,q) constante en media

q
X p
X
σt2 = ω + 2
αi et−i + 2
βi σt−i
i=1 i=1

εi representa una secuencia i.i.d., generalmente distribuida como una


normal 0,1.
ω es la constante del modelo.
α es la sensibilidad de la volatilidad a las innovaciones en el nivel
medio de la serie en diferencia (ARCH).
β es la sensibilidad de la varianza condicional respecto a la varianza
condicional del periodo anterior (persistencia) GARCH.

Clase 2 Econometría Financiera 26 mayo de 2022 34 / 78


Modelos de volatildiad condicional

GARCH(p,q) contraste

Varianza positiva:

ω > 0; α1 , ..., αq−1 ≥ 0; β1 , ..., βq−1 ≥ 0

Estacionario:

(α1 + ... + αq−1 ) + (β1 + ... + βq−1 ) < 1

Clase 2 Econometría Financiera 26 mayo de 2022 35 / 78


Modelos de volatildiad condicional

GARCH: estimación

fit_garch <- garchFit(~garch(1, 1), trace=FALSE, data = r_oro)


fit_garch@fit$matcoef

## Estimate Std. Error t value Pr(>|t|)


## mu -5.352934e-06 8.845196e-05 -0.06051798 9.517431e-01
## omega 2.557172e-07 5.930895e-08 4.31161213 1.620686e-05
## alpha1 5.357227e-02 4.336750e-03 12.35309102 0.000000e+00
## beta1 9.470378e-01 3.990359e-03 237.33149449 0.000000e+00

Clase 2 Econometría Financiera 26 mayo de 2022 36 / 78


Modelos de volatildiad condicional

GARCH: estimación

plot(fit_garch, which = 3)

Series with 2 Conditional SD Superimposed


0.05
0.00
x

−0.05
−0.10

0 1000 2000 3000 4000 5000 6000

Index

Clase 2 Econometría Financiera 26 mayo de 2022 37 / 78


Modelos de volatildiad condicional

GARCH: volatilidad histórica

Serie de volatilidad a partir de un modelo GARCH:

volatility <- volatility(fit_garch, type = "sigma")

autoplot(ts(volatility))

0.03
ts(volatility)

0.02

0.01

0 1000 2000 3000 4000 5000 6000


Time

Clase 2 Econometría Financiera 26 mayo de 2022 38 / 78


GARCH mean

Section 4

GARCH mean

Clase 2 Econometría Financiera 26 mayo de 2022 39 / 78


GARCH mean

GARCH-mean

λ expresa el aumento en el rendimiento esperado por unidad de riesgo


de la varianza:

yt = µ + λσt2

et ∼ N(0, σt2 )
q
X p
X
σt2 =ω+ 2
αi et−i + 2
βi σt−i
i=1 i=1

Clase 2 Econometría Financiera 26 mayo de 2022 40 / 78


GARCH mean

GARCH-mean

Utilizando el paquete rugarch en R:

# garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),


# variance.model = list(model = "gjrGARCH"),
# archm = TRUE, archpow = 2,
# distribution.model = "norm")

Clase 2 Econometría Financiera 26 mayo de 2022 41 / 78


GARCH mean

ARMA-GARCH

En el caso de un ARMA(1,1)+GARCH(1,1) se obtendría la siguiente


representación:

yt = µ + ρt yt−1 + θ1 t−1

et ∼ N(0, σt2 )

q
X p
X
σt2 = ω + 2
αi et−i + 2
βi σt−i
i=1 i=1

Clase 2 Econometría Financiera 26 mayo de 2022 42 / 78


GARCH mean

ARMA-GARCH: fGarch

fit2 <- garchFit(~arma(1,0)+garch(1, 1), trace=FALSE, data = r_oro)


#summary(fit2)
fit2@fit$matcoef

## Estimate Std. Error t value Pr(>|t|)


## mu -4.775217e-06 8.845724e-05 -0.05398334 9.569484e-01
## ar1 1.561567e-04 1.369185e-02 0.01140509 9.909003e-01
## omega 2.556928e-07 5.931592e-08 4.31069376 1.627432e-05
## alpha1 5.357252e-02 4.336858e-03 12.35284104 0.000000e+00
## beta1 9.470394e-01 3.990468e-03 237.32539532 0.000000e+00

Clase 2 Econometría Financiera 26 mayo de 2022 43 / 78


GARCH mean

ARMA-GARCH: rugarch
library(rugarch)
garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
variance.model = list(model = "sGARCH"),
distribution.model = "norm")

fit2_a <- ugarchfit(data = roro, spec = garchspec)


#print(fit2_a)
options("scipen"=100, "digits"=4)
show(fit2_a)

##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution
Clase 2
: norm Econometría Financiera 26 mayo de 2022 44 / 78
Comparando estrategias

Section 5

Comparando estrategias

Clase 2 Econometría Financiera 26 mayo de 2022 45 / 78


Comparando estrategias

Comparando estrategias
models <- list()

models[[1]] <- garchFit(.~ garch(1, 0), trace=F, data=r_oro) # ARC


models[[2]] <- garchFit(.~ garch(1, 1), trace=F, data=r_oro) # GAR
models[[3]] <- garchFit(.~arma(1,0)+garch(1, 1), trace=F, data=r_oro) # ARM

# Representar los modelos en una tabla de regresion


library(stargazer)
stargazer(models, type="text", title="Estimaciones GARCH",
digits=3, out="table1.txt", report=(’vc*s’), single.row =

##
## Estimaciones GARCH
## =======================================================
## Dependent variable:
## -----------------------------------
## r_oro
## (1) (2) (3)
## -------------------------------------------------------
## mu Clase 2
0.0003** -0.00001
Econometría Financiera
-0.00000 26 mayo de 2022 46 / 78
Comparando estrategias

Comparando estrategias
Aqui se extrae el p-valor de cada modelo para posteriormente incluirlo
en la tabla de regresión.
get_pvals <- function(fm) {
fm@fit$matcoef[,4]
}

pvals <- lapply(models, get_pvals)

stargazer(models, type="text", title="Estimaciones GARCH", se = pvals,


digits=3, out="table1.txt", report=(’vc*s’), single.row =

##
## Estimaciones GARCH
## =======================================================
## Dependent variable:
## -----------------------------------
## r_oro
## (1) (2) (3)
## -------------------------------------------------------
Clase 2 Econometría Financiera 26 mayo de 2022 47 / 78
Comparando estrategias

Comparando estrategias
vol_arch_oro <- models[[1]]@sigma.t
vol_garch_oro <- models[[2]]@sigma.t

vol_data <- data.frame(vol_vm_oro,vol_ewma_oro,vol_arch_oro,vol_garch_oro)


mutate(date = as.Date(fechas[-1]))

vol_data %>% gather(id, value, -date) %>%


ggplot(aes(x = date, y = value)) +
geom_line(aes(color = id), size = 1)+
theme_minimal() + theme(legend.position="bottom")+
scale_color_brewer(palette="Dark2")

0.04

0.03
value

0.02

0.01

0.00
1995 2000 2005 2010 2015
date
Clase 2 Econometría Financiera 26 mayo de 2022 48 / 78
Comparando estrategias

Comparando estrategias

vol_data %>%
gather(id, value, -date) %>%
dplyr::filter(id!="vol_arch_oro") %>%
ggplot(aes(x = date, y = value)) +
geom_line(aes(color = id), size = 1)+
theme_minimal() + theme(legend.position="bottom")

0.03

0.02
value

0.01

1995 2000 2005 2010 2015


date

id vol_ewma_oro vol_garch_oro vol_vm_oro

Clase 2 Econometría Financiera 26 mayo de 2022 49 / 78


Comparando estrategias

Comparando estrategias condicionada al contexto


La correlación brinda una idea sobre la asociación entre variables
(pero puede ser engañosa).
vol_data[,1:4] %>% na.omit() %>% cor()

## vol_vm_oro vol_ewma_oro vol_arch_oro vol_garch_oro


## vol_vm_oro 1.0000 0.9331 0.3643 0.9440
## vol_ewma_oro 0.9331 1.0000 0.4593 0.9992
## vol_arch_oro 0.3643 0.4593 1.0000 0.4506
## vol_garch_oro 0.9440 0.9992 0.4506 1.0000

Podemos extender el análisis condicionado al contexto, por ejemplo de alta


volatilidad:

alta_vol <- vol_data$vol_garch_oro >= mean(vol_data$vol_garch_oro)


vol_data[alta_vol,1:4] %>% na.omit() %>% cor()

## vol_vm_oro vol_ewma_oro vol_arch_oro vol_garch_oro


## vol_vm_oro 1.0000 0.8526 0.2266 0.8782
## vol_ewma_oro 0.8526 1.0000 0.3770 0.9984
Clase 2 Econometría Financiera 26 mayo de 2022 50 / 78
Comparando estrategias

Comparando estrategias
Adicionalmente, podemos recuperar el conjunto de volatilidades
directamente de la lista de modelos realizada anteirormente.
vols_models <- map(models,"sigma.t")
vols_models2 <- do.call(cbind, vols_models)

head(vols_models2)

## [,1] [,2] [,3]


## [1,] 0.009865 0.009929 0.009929
## [2,] 0.009174 0.009727 0.009675
## [3,] 0.009817 0.009752 0.009703
## [4,] 0.009548 0.009689 0.009642
## [5,] 0.009062 0.009463 0.009418
## [6,] 0.009041 0.009239 0.009195

cor(vols_models2)

## [,1] [,2] [,3]


## [1,] 1.0000 0.4509 0.4509
Clase 2 Econometría Financiera 26 mayo de 2022 51 / 78
Comparando estrategias

Comparando estrategias: bucles


select_gacrch <- c()
for (iar in 1:3){
for (igar in 1:3){
fit<-garchFit(substitute(~arma(1,0)+garch(p,q),
list(p=iar,q=igar)),data=r_oro,trace=F)

model <- paste("GACRH(",iar,",",igar, ")",sep="")


select_gacrch=rbind(select_gacrch,data.frame(model,fit@fit$ics[1]))
} }

head(select_gacrch)

## model fit.fit.ics.1.
## AIC GACRH(1,1) -6.718
## AIC1 GACRH(1,2) -6.723
## AIC2 GACRH(1,3) -6.725
## AIC3 GACRH(2,1) -6.718
## AIC4 GACRH(2,2) -6.723
## AIC5 GACRH(2,3) -6.725
Clase 2 Econometría Financiera 26 mayo de 2022 52 / 78
GARCH asimétricos

Section 6

GARCH asimétricos

Clase 2 Econometría Financiera 26 mayo de 2022 53 / 78


GARCH asimétricos

GARCH asimétricos: gjr GARCH

Nelson (1991), descubrió que la volatilidad podía responder de forma


asimétrica a errores pasados, en función de su signo. Por ejemplo,
los rendimientos negativos parecían ser predictores de volatilidades
más importantes que los positivos.
Esta asimetría fue modelizada por Glosten, Jagannathan y Runkle
(GJR, 1993), quienes propusieron la ecuación siguiente, conocida
como GJR − GARCH:

q h i p
α1 ε2t−i + γ1 1−
X X
σt2 = ω + 2
(εt ≤0) εt−i +
2
β1 σt−1
I=1 I=1

Clase 2 Econometría Financiera 26 mayo de 2022 54 / 78


GARCH asimétricos

GARCH asimétricos: gjrGARCH garchFit

q h i p
γ1 1−
X X
σt2 =ω+ α1 ε2t−i + 2
(εt ≤0) εt−i + 2
β1 σt−1
I=1 I=1

models[[4]] <- garchFit(.~arma(1,0)+aparch(1, 1), trace=FALSE, data = r_oro


delta = 2, include.delta = F, leverage = TRUE)

coef(models[[4]])

## mu ar1 omega alpha1 gamma1


## 0.0000867946 -0.0007908648 0.0000002634 0.0529208772 -0.1745594053
## beta1
## 0.9464183889

Clase 2 Econometría Financiera 26 mayo de 2022 55 / 78


GARCH asimétricos

GARCH asimétricos: APARCH-GARCH garchFit

σtδ = ω + α [|εt−1 | − γεt−1 ]δ + β1 σt−1


δ

ARCH δ = 2, γ = 0, β = 0.
GARCH δ = 2, γ = 0.
gjr − GARCH δ = 2.

Clase 2 Econometría Financiera 26 mayo de 2022 56 / 78


GARCH asimétricos

GARCH asimétricos: APARCH-GARCH garchFit

models[[4]] <- garchFit(.~arma(1,0)+aparch(1, 1), trace=FALSE, data = r_oro


delta = 1, include.delta = F, leverage = TRUE)

coef(models[[4]])

## mu ar1 omega alpha1 gamma1 beta1


## 0.00016027 -0.00255516 0.00006571 0.06435423 -0.29300125 0.94713681

Clase 2 Econometría Financiera 26 mayo de 2022 57 / 78


GARCH asimétricos

GARCH asimétricos: garchFit


##
## Estimacion de la diversas metodologias GARCH
## ===========================================================
## Dependent variable:
## ---------------------------------------
## r_oro
## (1) (2) (3)
## -----------------------------------------------------------
## mu 0.0003 -0.00001 -0.00000 0.
## (0.033) (0.952) (0.957) (0
##
## ar1 0.0002 -0
## (0.991) (0
##
## omega 0.0001*** 0.00000 0.00000 0.0
## (0.000) (0.00002) (0.00002) (0
Clase 2 Econometría Financiera 26 mayo de 2022 58 / 78
GARCH asimétricos

Threshold ARCH (TARCH)

Clase 2 Econometría Financiera 26 mayo de 2022 59 / 78


GARCH asimétricos

Threshold ARCH (TARCH)


##
## Estimacion de la diversas metodologias GARCH
## ===========================================================
## Dependent variable:
## ---------------------------------------
## r_oro
## (1) (2) (3)
## -----------------------------------------------------------
## mu 0.0003 -0.00001 -0.00000 0.
## (0.033) (0.952) (0.957) (0
##
## ar1 0.0002 -0
## (0.991) (0
##
## omega 0.0001*** 0.00000 0.00000 0.0
## (0.000) (0.00002) (0.00002) (0
Clase 2 Econometría Financiera 26 mayo de 2022 60 / 78
GARCH asimétricos

GARCH asimétricos: ugarchfit

garchspec3 <- ugarchspec(mean.model = list(armaOrder = c(1,0)),


variance.model = list(model = "gjrGARCH"),
distribution.model = "norm")

# garchFit(~garch(1,1),data=roro,delta=2,leverage=T,trace=F,include.mean=F)
fit3_a <- ugarchfit(data = roro, spec = garchspec3)
coef(fit3_a)

## mu ar1 omega alpha1 beta1


## 0.0000690880 -0.0004810135 0.0000003051 0.0701841855 0.9464166694
## gamma1
## -0.0352017841

Clase 2 Econometría Financiera 26 mayo de 2022 61 / 78


GARCH asimétricos

GARCH asimétricos: curva de noticia


# Curva de nuevas noticias
res1 <- models[[2]]@residuals
sigma1 <- models[[2]]@sigma.t

res2 <- models[[4]]@residuals


sigma2 <- models[[4]]@sigma.t

# Curva de impact new -------------


dataCurve <- data.frame(volgarch=sigma1,res1,lagres=dplyr::lag(res1,1),
volgjr=sigma2,res2,lagres2=dplyr::lag(res2,1))
head(dataCurve)

## volgarch res1 lagres volgjr res2 lagres2


## 1 0.009929 -0.004321 NA 0.0001651 0.000000 NA
## 2 0.009727 0.009886 -0.004321 0.0002221 0.009710 0.000000
## 3 0.009752 0.008143 0.009886 0.0010840 0.008002 0.009710
## 4 0.009689 -0.002746 0.008143 0.0017583 -0.002891 0.008002
## 5 0.009463 -0.002339 -0.002746 0.0018625 -0.002512 -0.002891
## 6 0.009239 -0.003868 -0.002339 0.0019441 -0.004040 -0.002512
Clase 2 Econometría Financiera 26 mayo de 2022 62 / 78
GARCH asimétricos

GARCH asimétricos: curva de noticia

ggplot(dataCurve,aes(x=lagres,y=volgarch)) +
geom_smooth(aes(color = "GARCH"),span = 0.9, se=F) +
geom_vline(xintercept = 0, size=0.1) +
labs(x = "Residuo (t-1)", y = "Volatilidad condicional (t)") +
geom_smooth(aes(x=lagres2,y=volgjr, color = "gjr-GARCh"), se=F) +
theme(legend.position="bottom")

0.030
Volatilidad condicional (t)

0.025

0.020

0.015

0.010

−0.10 −0.05 0.00 0.05


Residuo (t−1)

colour GARCH gjr−GARCh

Clase 2 Econometría Financiera 26 mayo de 2022 63 / 78


GARCH no gaussianos

Section 7

GARCH no gaussianos

Clase 2 Econometría Financiera 26 mayo de 2022 64 / 78


GARCH no gaussianos

GARCH no gaussianos: garchFit

el argumento cond.dist de la función garchFit, permite ajustar la


función de distribución asociada al GARCH:

models[[6]] <- garchFit(.~arma(1,0)+aparch(1, 1), trace=FALSE,


cond.dist = "std", delta = 2, include.

coef(models[[6]])

## mu ar1 omega alpha1


## 0.0001394857 -0.0318410328 0.0000001638 0.0585710661 -0.
## beta1 shape
## 0.9478996997 3.6805777847

Clase 2 Econometría Financiera 26 mayo de 2022 65 / 78


GARCH no gaussianos

GARCH no gaussianos: garchFit


##
## Estimacion de la diversas metodologias GARCH
## ===========================================================
## Dependent vari
## ---------------------------------------
## r_oro
## ARCH~n GARCH~n Ar-GARCH~n Ar-
## (1) (2) (3)
## -----------------------------------------------------------
## mu 0.0003 -0.00001 -0.00000 0.
## (0.033) (0.952) (0.957) (0
##
## ar1 0.0002 -0
## (0.991) (0
##
## omega 0.0001*** 0.00000 0.00000 0.0
Clase 2 Econometría Financiera 26 mayo de 2022 66 / 78
GARCH no gaussianos

GARCH no gaussianos: ugarchfit


resid_estd <- residuals(fit2_a, standardize = TRUE)
resid_estd <- (roro - fitted(fit2_a)) / sigma(fit2_a)

# garchFit(~garch(1,1),data=roro,cond.dist="std",trace=F,include.mean=F)
garchspec1 <- ugarchspec(distribution.model = "sstd")

fit3_a <- ugarchfit(data = roro, spec = garchspec1)

show(fit3_a)

##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(1,0,1)
## Distribution
Clase 2
: sstd Econometría Financiera 26 mayo de 2022 67 / 78
forecast volatilidades

Section 8

forecast volatilidades

Clase 2 Econometría Financiera 26 mayo de 2022 68 / 78


forecast volatilidades

ARMA-GARCH: forecast volatilidades


predict.h<-predict(models[[5]],n.ahead=4)

fGarch::predict(models[[5]],n.ahead=50,plot=TRUE)

Prediction with confidence intervals


0.00

^
Xt+h
x

^
Xt+h − 1.96 MSE
^
Xt+h + 1.96 MSE
−0.10

0 500 1000 1500

Index

## meanForecast meanError standardDeviation lowerInterval upperInterval


## 1 0.00008576 0.006525 0.006525 -0.01270 0.01287
## 2 0.00008673 0.006548 0.006548 -0.01275 0.01292
## 3 0.00008673 0.006571 0.006571 -0.01279 0.01297
## 4 0.00008673 0.006594 0.006594 -0.01284 0.01301
## 5 0.00008673
Clase 2 0.006618 Econometría Financiera
0.006618 -0.01288
26 mayo de 2022 0.01306
69 / 78
forecast volatilidades

ARMA-GARCH: forecast volatilidades

sqrt(uncvariance(fit2_a))

## [1] 0.01706

sigma(ugarchforecast(fitORspec = fit2_a, n.ahead = 7))

## 2014-09-09
## T+1 0.006926
## T+2 0.006943
## T+3 0.006961
## T+4 0.006978
## T+5 0.006996
## T+6 0.007013
## T+7 0.007031

Clase 2 Econometría Financiera 26 mayo de 2022 70 / 78


Validación

Section 9

Validación

Clase 2 Econometría Financiera 26 mayo de 2022 71 / 78


Validación

Validación del GARCH

likelihood(fit3_a)

## [1] 20944

infocriteria(fit3_a)

##
## Akaike -6.850
## Bayes -6.841
## Shibata -6.850
## Hannan-Quinn -6.847

Clase 2 Econometría Financiera 26 mayo de 2022 72 / 78


Validación

Validación del GARCH

res = residuals(fit_garch, standardize = T)^2


ggtsdisplay(res)

75
50
25
0
0 1000 2000 3000 4000 5000 6000

0.09 0.09
0.06 0.06
PACF
ACF

0.03 0.03
0.00 0.00
−0.03 −0.03
0 10 20 30 0 10 20 30
Lag Lag

Clase 2 Econometría Financiera 26 mayo de 2022 73 / 78


Validación

Validación del GARCH

plot(fit_garch, which= 13) #13=qqplot which= "all"

qnorm − QQ Plot
10
5
Sample Quantiles

0
−5

−4 −2 0 2 4

Theoretical Quantiles

Clase 2 Econometría Financiera 26 mayo de 2022 74 / 78


Validación

Validación del GARCH


La media del error cuadrático medio:

T
1 X
MSE = (e 2 − σ̂t2 )
T t=1 t
garchresiduo <- residuals(fit2_a)
gjrresiduo <- residuals(fit3_a)

# MSE
mean(garchresiduo^2)

## [1] 0.00009827
# MSE varianza
mean((garchresiduo^2)^2 - sigma(fit2_a)^2)

## [1] -0.000102

mean((gjrresiduo^2 - sigma(fit3_a)^2 )^2)


Clase 2 Econometría Financiera 26 mayo de 2022 75 / 78
Validación

Validación del GARCH

Adicionalmente es necesario validar los supuestos realizados. Dado


h0 : ρi = 0, al 5 de significancia podemos indicar el el gjr-GARCH es
válido:

r_gjrgarch <- residuals(fit3_a, standardize = TRUE)

Box.test(r_gjrgarch, type = "Ljung-Box")

##
## Box-Ljung test
##
## data: r_gjrgarch
## X-squared = 15, df = 1, p-value = 0.00008

Clase 2 Econometría Financiera 26 mayo de 2022 76 / 78


Referencias

Section 10

Referencias

Clase 2 Econometría Financiera 26 mayo de 2022 77 / 78


Referencias

Referencias

Colonescu., C. (2016). Principles of Econometrics with R.


Freitas, Hedibert (2018). Modeling heteroskedasticity: GARCH modeling.
Ghalanos, Alexios (2020). Introduction to the rugarch package.
Kelepouris, D.; Kelepouris, I. (2019). Value at Risk estimation using GARCH
model
Kleiber, C.; Zeileis, A. (2017). Applied Econometrics with R. – Financial
Econometrics.
Kotzé, K. (s.f.d). Volatility Models. Conditional Heteroscedastic Model.
Novales, Alfonso (2013). Modelos de volatilidad. Departamento de Economía
Cuantitativa, UCM. Madrid.
Stehlíková, Beáta. (nd). Modelling volatility - ARCH and GARCH models.

Clase 2 Econometría Financiera 26 mayo de 2022 78 / 78

También podría gustarte