Filtro de Hodrick Prescott [HP]


Introducción

  • El filtro de Hodrick-Prescott (HP) es una técnica ampliamente utilizada en macroeconomía para descomponer una serie temporal en una tendencia a largo plazo y un componente cíclico.

  • Este método fue desarrollado por Robert Hodrick y Edward Prescott en 1980 y se ha convertido en una herramienta esencial en el análisis económico y financiero.



Formulación del Filtro HP


  • La fórmula matemática básica del filtro HP minimiza la suma de dos componentes:

    • La desviación entre la serie original \((yt)\) y la tendencia suavizada \((\tau_t)\)

    • La variación de la tendencia es suavizada para asegurar que no sea demasiado flexible.

Matemáticamente:

\[\text{min} \sum^T_{t=1} (yt - \tau_t)^2 + \lambda \sum^{T-1}_{t=2} [(\tau_{t+1} - \tau_t) - (\tau_t - \tau_{t-1})]^2\]

\(\lambda\) es un parámetro de suavización que determina el equilibrio entre la fidelidad a los datos y la suavidad de la tendencia.

Valores comunes para \(\lambda\) son: 14400 para datos mensuales, 1600 para datos trimestrales, 100 para datos anuales.


Ventajas y Limitaciones

  • Ventajas: Sencillo de implementar, útil para análisis visual y de tendencias.

  • Limitaciones: Sensible a la elección de \(\lambda\) , puede introducir artefactos en los extremos de la serie temporal, no adecuado para datos no estacionarios o con cambios estructurales.


Aplicación en R

Implementación Personalizada


Costa Rica

library(readxl)
library(mFilter)
library(forecast)

# Carga de los datos 
datos_PIB_trim_CA <- read_excel("C:/Users/lenovo/Downloads/MAE118/datos_PIB_trim_CA.xlsx")

# Costa Rica: fila 11 hasta fila 144 - Columna B
datos_cr <- datos_PIB_trim_CA[[2]][11:144]
# Convertir a numérico y eliminar NAs
datos_cr <- as.numeric(datos_cr)
datos_cr <- na.omit(datos_cr)

PIB_CostaRica <- ts(datos_cr, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_CostaRica, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_CostaRica, type = "l", main = "Filtro HP - Costa Rica", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)


El Salvador

# El Salvador: fila 7 hasta fila 144 - Columna C
datos_sv <- datos_PIB_trim_CA[[3]][7:144]
datos_sv <- as.numeric(datos_sv)
datos_sv <- na.omit(datos_sv)

PIB_ElSalvador <- ts(datos_sv, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_ElSalvador, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_ElSalvador, type = "l", main = "Filtro HP - El Salvador", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)


Guatemala

# Guatemala: fila 51 hasta fila 144 - Columna D
datos_gt <- datos_PIB_trim_CA[[4]][51:144]
datos_gt <- as.numeric(datos_gt)
datos_gt <- na.omit(datos_gt)

PIB_Guatemala <- ts(datos_gt, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_Guatemala, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_Guatemala, type = "l", main = "Filtro HP - Guatemala", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)


Honduras

# Honduras: fila 47 hasta fila 144 - Columna E
datos_hn <- datos_PIB_trim_CA[[5]][47:144]
datos_hn <- as.numeric(datos_hn)
datos_hn <- na.omit(datos_hn)

PIB_Honduras <- ts(datos_hn, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_Honduras, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_Honduras, type = "l", main = "Filtro HP - Honduras", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)


Nicaragua

# Nicaragua: fila 71 hasta fila 144 - Columna F
datos_ni <- datos_PIB_trim_CA[[6]][71:144]
datos_ni <- as.numeric(datos_ni)
datos_ni <- na.omit(datos_ni)

PIB_Nicaragua <- ts(datos_ni, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_Nicaragua, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_Nicaragua, type = "l", main = "Filtro HP - Nicaragua", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)


República Dominicana

# República Dominicana: fila 11 hasta fila 144 - Columna G
datos_rd <- datos_PIB_trim_CA[[7]][11:144]
datos_rd <- as.numeric(datos_rd)
datos_rd <- na.omit(datos_rd)

PIB_RepDom <- ts(datos_rd, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_RepDom, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_RepDom, type = "l", main = "Filtro HP - República Dominicana", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)


Panamá

# Panamá: fila 31 hasta fila 137 - Columna H
datos_pa <- datos_PIB_trim_CA[[8]][31:137]
datos_pa <- as.numeric(datos_pa)
datos_pa <- na.omit(datos_pa)

PIB_Panama <- ts(datos_pa, start = c(2005,1), frequency = 4)

# Aplica el filtro de Hodrick-Prescott
hp_result <- hpfilter(PIB_Panama, freq = 1600)

# Extrae la tendencia y el componente cíclico
trend <- hp_result$trend
cycle <- hp_result$cycle

# Visualiza los resultados
plot(PIB_Panama, type = "l", main = "Filtro HP - Panamá", ylab = "PIB", xlab = "Tiempo")
lines(trend, col = "red", lwd = 2)
legend("topleft", legend = c("PIB Original", "Tendencia (Filtro HP)"), col = c("black", "red"), lty = 1, lwd = 2)

plot(cycle, type = "l", main = "Componente Ciclico", ylab = "Ciclo", xlab = "Tiempo")

plot(hp_result,ask = FALSE)