Aplicación del Filtro de Hodrick Prescott [HP]

Cargar base de datos

library(mFilter)
library(ggplot2)
library(dplyr)
library(tidyr)

library(readxl)
datos_pib<-read_excel("C:/Users/henry/Downloads/datos_PIB_trim_CA.xlsx",sheet="Table", skip=5)

# Limpiar nombres de columnas
names(datos_pib)[1]<-"Trimestre"
names(datos_pib)[2:8]<-c("Costa_Rica", "El_Salvador", "Guatemala", "Honduras", "Nicaragua", "Republica_Dominicana", "Panama")

# Filtrar solo filas con datos de trimestres y eliminar filas vacías
datos_pib<-datos_pib[!is.na(datos_pib$Trimestre), ]
datos_pib<-datos_pib[grepl("^[0-9]{4}", datos_pib$Trimestre), ]

# Convertir todas las columnas de países a numérico
for(col in names(datos_pib)[2:8]) {
  datos_pib[[col]] <- as.numeric(datos_pib[[col]])
}

# Convertir a formato largo para facilitar el análisis
datos_largo<-datos_pib %>%
  pivot_longer(cols = -Trimestre, names_to = "Pais", values_to = "PIB") %>%
  filter(!is.na(PIB))

# Extraer año del trimestre
datos_largo<-datos_largo %>%
  mutate(Anio = as.numeric(substr(Trimestre, 1, 4)))

Filtro HP

Aplique el filtro HP para cada uno de los países de Centroamérica, para los periodos disponibles para cada país

aplicar_hp_pais<-function(datos_pais, nombre_pais) {
  # Ordenar por año
  datos_pais <- datos_pais %>% arrange(Anio)
  
  # Crear serie temporal
  pib_ts <- ts(datos_pais$PIB, start = min(datos_pais$Anio), frequency = 4)
  
  # Aplicar filtro HP
  hp_result <- hpfilter(pib_ts, freq = 1600)
  
  return(list(
    pais = nombre_pais,
    datos = datos_pais,
    hp_result = hp_result,
    pib_ts = pib_ts
  ))
}

APLICAR A TODOS LOS PAISES

# Lista para almacenar resultados
resultados_hp <- list()

# Países a analizar
paises <- unique(datos_largo$Pais)

for(pais in paises) {
  datos_pais <- datos_largo %>% 
    filter(Pais == pais) %>%
    filter(!is.na(PIB))
  
  if(nrow(datos_pais) > 8) {  # Mínimo de observaciones para aplicar HP
    resultados_hp[[pais]] <- aplicar_hp_pais(datos_pais, pais)
  }
}

Graficas

# Función para gráfico personalizado
grafico_hp_personalizado <- function(resultado) {
  pais <- resultado$pais
  pib_ts <- resultado$pib_ts
  hp_result <- resultado$hp_result
  
  # Crear datos para ggplot
  datos_plot <- data.frame(
    Tiempo = time(pib_ts),
    PIB_Original = as.numeric(pib_ts),
    Tendencia_HP = as.numeric(hp_result$trend),
    Componente_Ciclico = as.numeric(hp_result$cycle)
  )
  
  # Gráfico 1: PIB Original vs Tendencia HP
  p1 <- ggplot(datos_plot, aes(x = Tiempo)) +
    geom_line(aes(y = PIB_Original, color = "PIB Original"), linewidth = 1) +
    geom_line(aes(y = Tendencia_HP, color = "Tendencia HP"), linewidth = 1, linetype = "dashed") +
    scale_color_manual(values = c("PIB Original" = "black", "Tendencia HP" = "red")) +
    labs(title = paste("Filtro HP -", pais),
         subtitle = paste("Periodo:", min(floor(datos_plot$Tiempo)), "-", max(floor(datos_plot$Tiempo))),
         x = "Anio", y = "PIB", color = "") +
    theme_minimal() +
    theme(legend.position = "top")
  
  # Gráfico 2: Componente Cíclico
  p2 <- ggplot(datos_plot, aes(x = Tiempo, y = Componente_Ciclico)) +
    geom_line(color = "blue", linewidth = 1) +
    geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
    labs(title = paste("Componente Ciclico -", pais),
         x = "Anio", y = "Desviacion del Ciclo") +
    theme_minimal()
  
  return(list(grafico_tendencia = p1, grafico_ciclo = p2))
}
## Graficos de: El_Salvador

## Graficos de: Costa_Rica

## Graficos de: Republica_Dominicana

## Graficos de: Panama

## Graficos de: Honduras

## Graficos de: Guatemala

## Graficos de: Nicaragua

Representación rápida

for(pais in names(resultados_hp)) {
  cat("\nGráfico rápido de:", pais, "\n")
  
  # Gráfico rápido del filtro HP
  plot(resultados_hp[[pais]]$hp_result)
  
  # Título agregado después
  title(main = paste("Filtro HP -", pais, "(Representación rápida)"))
}
## 
## Gráfico rápido de: El_Salvador

## 
## Gráfico rápido de: Costa_Rica

## 
## Gráfico rápido de: Republica_Dominicana

## 
## Gráfico rápido de: Panama

## 
## Gráfico rápido de: Honduras

## 
## Gráfico rápido de: Guatemala

## 
## Gráfico rápido de: Nicaragua