27 jul 2022
4 Curso de Econometría Aplicada en R
1 jul 2022
Modelos GARCH sobre múltiples series financieras
En la siguiente entrada vamos a estimar un modelo de volatilidad condicional para cada una de las variables contenidas en una base de datos, independientemente al numero de variables. Para tal ejemplo usamos la data EuStockMarkets que continente algunos índices financieros. Primero revisamos hemos importado los datos correctamente y realizamos un análisis descriptivo. En este caso no lo hacemos, pero recuerde siempre verificar temas como cambios estructurales, datos perdidos, distribución de los datos, ….
library(tibble)
library(fGarch)
library(ggplot2)
library(stargazer)
library(tidyr)
Time Series:
Start = c(1991, 130)
End = c(1991, 135)
Frequency = 260
DAX SMI CAC FTSE
1991.496 1628.75 1678.1 1772.8 2443.6
1991.500 1613.63 1688.5 1750.5 2460.2
1991.504 1606.51 1678.6 1718.0 2448.2
1991.508 1621.04 1684.1 1708.1 2470.4
1991.512 1618.16 1686.6 1723.1 2484.7
1991.515 1610.61 1671.6 1714.3 2466.8
Posteriormente usamos la función across para obtener la variación de cada serie. Es importante precisar que un análisis formal requeriría un test de estacionariedad sobre las series.
as.tibble() %>%
mutate(
across(everything(),
~((./dplyr::lag(.)-1)*100)
)) %>%
na.omit()
# A tibble: 6 × 4
DAX SMI CAC F+TSE
<dbl> <dbl> <dbl> <dbl>
1 -0.928 0.620 -1.26 0.679
2 -0.441 -0.586 -1.86 -0.488
3 0.904 0.328 -0.576 0.907
4 -0.178 0.148 0.878 0.579
5 -0.467 -0.889 -0.511 -0.720
6 1.25 0.676 1.18 0.855
Ahora, guardamos en una lista el modelo GARCH(1,1) correspondiente a cada una de las columnas de mi base de datos. Cada modelo se guarda en una lista dado que permite posteriormente recuperar todos los elementos de la salida de la función garchFit.
models0[[i]] <- garchFit( ~ garch(1, 1), trace = F, data = data_returns[,i])
}
stargazer(models0, type="text")
===========================================================
Dependent variable:
---------------------------------------
[ [ [ [
(1) (2) (3) (4)
-----------------------------------------------------------
mu 0.070*** 0.106*** 0.049** 0.052***
(0.021) (0.020) (0.025) (0.017)
omega 0.044*** 0.120*** 0.081** 0.009*
(0.012) (0.024) (0.037) (0.005)
alpha1 0.068*** 0.127*** 0.051*** 0.046***
(0.015) (0.024) (0.015) (0.012)
beta1 0.891*** 0.735*** 0.882*** 0.941***
(0.023) (0.043) (0.042) (0.018)
-----------------------------------------------------------
Observations 1,859 1,859 1,859 1,859
Log Likelihood 2,587.920 2,412.241 2,788.477 2,136.479
Akaike Inf. Crit. 2.789 2.600 3.004 2.303
Bayesian Inf. Crit. 2.800 2.611 3.016 2.315
===========================================================
Note: *p<0.1; **p<0.05; ***p<0.01
Otra opción
es recuperar la volatilidad histórica asociada a cada modelo. Para esto utilizamos
la función vectorizada lapply que nos permite repetir una operación/función,
para cada uno de los elementos de una lista, generando una lista de vectores de
volatilidades que convertimos en una matriz a partir de la función do.call.
dataVol <- data.frame(do.call(cbind, vols_models))
colnames(dataVol) <- colnames(EuStockMarkets)
1 1.0281714 0.9246996 1.102485 0.7967414
2 1.0265176 0.8843931 1.114000 0.7901069
3 1.0004172 0.8695389 1.167243 0.7807891
4 0.9915619 0.8258928 1.141444 0.7849713
5 0.9614558 0.7884808 1.125005 0.7754941
6 0.9420005 0.8386133 1.101589 0.7760277
mutate(fecha = 1:nrow(dataVol)) %>%
as.data.frame() %>%
pivot_longer(!fecha, names_to = "var", values_to = "value") %>%
ggplot(aes(x = fecha, y = value)) +
geom_line(aes(color = var))+
facet_wrap(~var, scales='free_y', ncol = 2) +
theme_classic()+
theme(legend.position = "none",
axis.ticks = element_line(colour = "grey70", size = 0.2),
strip.background = element_blank()) +
scale_colour_grey(start = 0.1,end = 0.1)
Creando variables por grupos en dplyr (group_by + mutate)
Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro. # Definir la lista ...
-
Missing Values (NA) in R. En la siguiente entrada se muestran algunas operaciones básicas para la identificación y tratamiento de valor...
-
Las series económicas pueden estar influidas por una serie de procesos no determinista, ni conocidos para el analista y que pueden incidir ...
-
Tablas de frecuencia con condicionales: tabulate Las tablas de frecuencia absoluta nos permiten contabilizar casos que cumplen con d...