A34-Aplicación del Filtro de Hodrick Prescott

MARIANA IVETTE ZELAYA CASTILLO - ZC23003

Filtro de Hodrick Prescott[HP]

Indicaciones

Usando los datos incluidos en el archivo datos_PIB_trime_CA.xlsx:

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

• represente sus resultados de forma gráfica:

o 1. Usando la versión personalizada y

o 2. usando la representación rápida.

o En todos los gráficos indique el país y el periodo al que corresponden los datos.

Carga de datos y de librerías

# 1. Carga de Librerías
library(readxl)
library(mFilter)
library(forecast)
library(tidyr)
library(dplyr)
library(stringr)

## 2. Carga y Depuración General de los Datos

file_path <- "E:/Metodos/datos_PIB_trim_CA.xlsx"

# Carga de los datos (Saltando las 4 filas de metadata)
data <- read_excel(file_path, skip = 4)

# Renombro las columnas para que se me facilite
colnames(data) <- c('Fechas', 'Costa_Rica', 'El_Salvador', 'Guatemala', 
                    'Honduras', 'Nicaragua', 'Republica_Dominicana', 'Panama')

# Función de ayuda para convertir la fecha (e.g. "1991-I" -> c(1991, 1))
obtener_inicio_ts <- function(fecha_trimestral) {
  partes <- unlist(str_split(fecha_trimestral, "-"))
  anio <- as.numeric(partes[1])
  trimestre <- switch(partes[2], "I" = 1, "II" = 2, "III" = 3, "IV" = 4, NA)
  return(c(anio, trimestre))
}

# Depurar los datos: limpiar '--', convertir a numérico, y eliminar filas de metadata (Esto sirve para que solo se aplique para los periodos disponibles para cada país)
datos_limpios <- data %>%
  slice(-1) %>% # Quita la fila de la unidad de medida
  mutate(Fechas = trimws(Fechas)) %>%
  filter(!is.na(Fechas)) %>%
  mutate(across(-Fechas, ~na_if(.x, "--"))) %>%
  mutate(across(-Fechas, as.numeric))

Costa Rica

Aplicación en R: Implementación Personalizada

# Filtrar datos de Costa Rica
data_analisis <- datos_limpios %>%
  select(Fechas, Costa_Rica) %>%
  filter(!is.na(Costa_Rica))

# Generar Serie Temporal (ts) - Nombre del objeto: PIB_trim

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 
PIB_trim <- ts(data_analisis$Costa_Rica,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott 
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: Costa Rica (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - Costa Rica (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("Costa Rica (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)

El Salvador

Aplicación en R: Implementación Personalizada

# Filtrar datos de El Salvador
data_analisis <- datos_limpios %>%
  select(Fechas, El_Salvador) %>%
  filter(!is.na(El_Salvador))

# Generar Serie Temporal (ts) 

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 
PIB_trim <- ts(data_analisis$El_Salvador,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott 
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo 
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: El Salvador (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - El Salvador (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("El Salvador (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)

Guatemala

Aplicación en R: Implementación Personalizada

# Filtrar datos de Guatemala
data_analisis <- datos_limpios %>%
  select(Fechas, Guatemala) %>%
  filter(!is.na(Guatemala))

# Generar Serie Temporal (ts) 

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 

PIB_trim <- ts(data_analisis$Guatemala,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: Guatemala (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - Guatemala (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("Guatemala (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)

Honduras

Aplicación en R: Implementación Personalizada

# Filtrar datos de Honduras
data_analisis <- datos_limpios %>%
  select(Fechas, Honduras) %>%
  filter(!is.na(Honduras))

# Generar Serie Temporal (ts) 

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 

PIB_trim <- ts(data_analisis$Honduras,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: Honduras (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - Honduras (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("Honduras (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)

Nicaragua

Aplicación en R: Implementación Personalizada

# Filtrar datos de Nicaragua
data_analisis <- datos_limpios %>%
  select(Fechas, Nicaragua) %>%
  filter(!is.na(Nicaragua))

# Generar Serie Temporal (ts) 

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 

PIB_trim <- ts(data_analisis$Nicaragua,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: Nicaragua (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - Nicaragua (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("Nicaragua (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)

República Dominicana

Aplicación en R: Implementación Personalizada

# Filtrar datos de República Dominicana
data_analisis <- datos_limpios %>%
  select(Fechas, Republica_Dominicana) %>%
  filter(!is.na(Republica_Dominicana))

# Generar Serie Temporal (ts) 

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 

PIB_trim <- ts(data_analisis$Republica_Dominicana,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: República Dominicana (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - República Dominicana (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("República Dominicana (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)

Panamá

Aplicación en R: Implementación Personalizada

# Filtrar datos de Panamá
data_analisis <- datos_limpios %>%
  select(Fechas, Panama) %>%
  filter(!is.na(Panama))

# Generar Serie Temporal (ts) 

fecha_inicio <- data_analisis$Fechas[1]
start_ts <- obtener_inicio_ts(fecha_inicio)

# **PIB_trim** 

PIB_trim <- ts(data_analisis$Panama,
               start = start_ts,
               frequency = 4)

# Aplicar el filtro Hodrick-Prescott
hp_result <- hpfilter(PIB_trim, freq = 1600)

# Extraer la tendencia y el ciclo
trend <- hp_result$trend
cycle <- hp_result$cycle

# Definir el periodo (Para los gráficos)
inicio <- data_analisis$Fechas[1]
fin <- data_analisis$Fechas[nrow(data_analisis)]
periodo <- paste(inicio, "-", fin)


##Visualización de Resultados 

# Gráfico 1: PIB Original vs. Tendencia
plot(PIB_trim, type = "l", 
     main = paste("Filtro de Hodrick-Prescott: Panamá (", periodo, ")"), 
     ylab = "PIB", 
     xlab = "Tiempo",
     col = "black", 
     lwd = 1)
lines(trend, col = "red", lwd = 2)
legend("topleft", 
       legend = c("PIB Original", "Tendencia (Filtro HP)"), 
       col = c("black", "red"), 
       lty = 1, 
       lwd = 2)

# Gráfico 2: Componente Cíclico
plot(cycle, type = "l", 
     main = paste("Componente Cíclico - Panamá (", periodo, ")"), 
     ylab = "Ciclo", 
     xlab = "Tiempo")
abline(h = 0, col = "gray", lty = 2)

Implementación más rápida del gráfico

plot(hp_result, ask = FALSE)
mtext(paste("Panamá (", periodo, ")"), 
      side = 3, line = -2, cex = 0.6, outer = TRUE, font = 2)