18 mar 2024

Recesión plot en R usando ggplot (recession plot in r)

En el siguiente ejemplo se simular y replica -parcialmente- un ejemplo usado por el FMI para ilustrar la importancia del uso de series de tiempo de alta frecuencia para el análisis de la coyuntura económica. Puntualmente, plantean que las series anuales pueden ocultar dinámicas relevantes para la elaboración de análisis. Resaltar que el código fue creado a partir de preguntas a chatgpt https://chat.openai.com/. 

En este ejemplo simulamos una caminata aleatoria y luego la graficamos en ggplot2.

 1.       Simular la data

 # Definir la función para simular una caminata aleatoria
simular_caminata_aleatoria <- function(n, start, sigma){
  eps <- rnorm(n, mean = 0, sd = sigma)
  camino <- numeric(n)
  camino[1] <- start + eps[1]
  for(i in 2:n){
    camino[i] <- camino[i-1] + eps[i]
  }
  return(camino)
}
 
# Definir los parámetros
set.seed(123)  # Fijar semilla para reproducibilidad
trimestres <- seq(as.Date("2015-01-01"), as.Date("2020-12-31"), by = "3 months")
n_trimestres <- length(trimestres)
sigma <- 1  # Desviación estándar para la caminata aleatoria
 
# Simular datos trimestrales
datos_trimestrales <- simular_caminata_aleatoria(n_trimestres, 100, sigma)
 
# Calcular promedio anual
promedio_anual <- tapply(datos_trimestrales, as.integer(format(trimestres, "%Y")), mean)
 
# Crear dataframe
data <- data.frame(trimestre = trimestres,
                   dato_trimestral = datos_trimestrales,
                   promedio_anual = rep(promedio_anual, each = 4))
 
> data
    trimestre dato_trimestral promedio_anual
1  2015-01-01        99.43952       100.0639
2  2015-04-01        99.20935       100.0639
3  2015-07-01       100.76806       100.0639
4  2015-10-01       100.83856       100.0639
5  2016-01-01       100.96785       102.1683
6  2016-04-01       102.68292       102.1683

 2.       Graficar en ggplot

Posteriormente, se indican las fechas de inicio y fin para los periodos que deseamos resaltar, en el eje x se colocan las fechas (aes(x = trimestre)), mientras que se usa la función geom_rect para resaltar el periodo comprendido al año 2017. Posteriormente se agregan los gráficos de línea correspondiente a la serie anual y trimestral. La idea del FMI (https://www.cepal.org/sites/default/files/document/files/sna2008_web.pdf) es que la serie puede empezar a crecer, cuando en realidad determino

 # Definir límites para el área sombreada (2012)
inicio_recesion <- as.Date("2017-01-01")
fin_recesion <- as.Date("2017-12-31")
 
# Graficar series de tiempo
ggplot(data, aes(x = trimestre)) +
  geom_rect(xmin = inicio_recesion,
            xmax = fin_recesion,
            ymin = -Inf,
            ymax = Inf,
            fill = gray(0.9), alpha = 0.7) +
  annotate("text",
             x = as.Date("2017-07-01"),
             y = max(data$dato_trimestral),
         label = "2017",
         color = "black", size = 3) +
   geom_line(aes(y = dato_trimestral, color = "Trimestral")) +
  geom_point(aes(y = dato_trimestral)) +
   geom_line(aes(y = promedio_anual, color = "Promedio anual"), linetype = "dashed") +
  labs(title = element_blank(),
           x =  element_blank(),
           y =  element_blank(),
       color =  element_blank()) +
  theme_classic() +
  theme(legend.position = c(0.8,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 ...