7 abr 2022

Ejemplos de funciones de impulso respuesta (ifr) usando VARS y ggplot2 en R

En esta primera parte usamos la función across para calcular las tasas de crecimiento de todas las variables en la base de datos. Usamos los datos de EuStockMarkets disponible en R (data()). Esto se hace porque recuerden que el VAR solo se estima con variables estacionarias, por lo que, un análisis formar requeriría hacer test sobre las variables que usaríamos.

Posteriormente, una vez seleccionada la serie que vamos a utilizar (var_data), usamos el paquete VARS para tres cuestiones puntuales:

 1.  VARselect identifica el orden del VAR, es decir, la cantidad a retardos utilizar en el VAR.

2.  VAR es la función que nos permite estimar el VAR.

3.  Irf nos permite obtener los datos asociados a la función impulso respuesta.

#ifr in R
data <- EuStockMarkets  %>%
  data.frame() %>%
  mutate(across(is.numeric, ~((./dplyr::lag(.)-1)*100))) %>%
  na.omit()
 
# var
var_data <- data.frame(x=EuStockMarkets[,"DAX"],y=EuStockMarkets[,"FTSE"])
 
plag <- VARselect(var_data, lag.max = 8, type = "both")$selection[1]
p1ct <- VAR(var_data, p = plag)
irf1 <- irf(p1ct, impulse = "x", response = "y",
            n.ahead = ifr_lag, boot = TRUE,
            cumulative = F, ortho = TRUE, ci = 0.95)

 Finalmente, solo es necesario utilizar la función plot para graficar la función impulso respuesta asociada.

#Opcion 1
plot(irf1)


Adicionalmente, podemos extraer los coeficientes y los límites de confianzas calculados para obtener las IFR estimadas en el paso anterior. Note que este se guarda en un marco de datos (data frame) que permitiría en lo adelante graficar nuestra función atendiendo los criterios de estéticas que prefiramos y usando ggplot2 del tidyverse.

ifr_lag <- 24
data_ifr <- data.frame(lagifr=1:(ifr_lag+1), irf1$irf, irf1$Lower, irf1$Upper)
names(data_ifr) <- c("retardos","ifr","li","ls")
head(data_ifr)
 
retardos      ifr       li       ls
1        1 20.63704 19.08058 22.93661
2        2 22.23282 19.40226 24.77678
3        3 22.47799 19.47766 25.11293
4        4 22.49421 19.39938 25.11469
5        5 22.47920 19.23570 25.06734
6        6 22.45973 19.07158 25.02734

Debajo se colocan tres ejemplos de ifr usando ggplot2. Note que en estos ejemplos se encuentra comentada la línea de intercepto en el 0. Esto para recortar el eje de las x que estamos usando, en sus ejemplos particulares pueden des comentar esta línea del comando borrando el símbolo de #.

#Opcion 2

data_ifr %>%
  ggplot(aes(x = retardos, y = ifr)) +
  geom_line(size=1)+
  geom_line(aes(x = retardos, y = li),linetype=4) +
  geom_line(aes(x = retardos, y = ls),linetype=4)+
  theme_minimal() +
  #geom_hline(yintercept=0) +
  theme(legend.position = "bottom",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank())

 


#Opcion 3
  ggplot(aes(x = retardos, y = ifr)) +
  geom_line(size=1, color="#21618C")+
  geom_ribbon(aes(x = retardos, ymin = li, ymax = ls), col = 'grey',
              fill = 'grey', alpha = 0.3, linetype=4) +
  theme_minimal() +
  #geom_hline(yintercept=0) +
  theme(legend.position = "bottom",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank()) +
  #scale_y_continuous(expand = c(0, 0), breaks = seq(min(data_ifr$li), max(data_ifr$ls, 2)))+
  scale_x_continuous(expand = c(0, 0), breaks = seq(0, ifr_lag, 2))


#Opcion 4
data_ifr %>%
ggplot(aes(x = retardos, y = ifr, ymin = li, ymax = ls)) +
  geom_line(size=1, color="#21618C")+
  geom_ribbon(aes(x = retardos), col = 'grey',
              fill = 'grey', alpha = 0.3, linetype=4) +
  # geom_hline(yintercept = 0, color="red") +
  geom_ribbon(fill="grey", alpha=0.2) +
  theme_light() +
  xlab("") +
  theme(plot.title = element_text(size = 11, hjust=0.5),
        axis.title.y = element_text(size=11))

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 ...