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.
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)
}
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
datos_trimestrales <- simular_caminata_aleatoria(n_trimestres, 100, sigma)
promedio_anual <- tapply(datos_trimestrales, as.integer(format(trimestres, "%Y")), mean)
data <- data.frame(trimestre = trimestres,
dato_trimestral = datos_trimestrales,
promedio_anual = rep(promedio_anual, each = 4))
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
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
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,
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)) +
labs(title = element_blank(),
x = element_blank(),
color = element_blank()) +
theme_classic() +
theme(legend.position = c(0.8,0.1))