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)
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)
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)
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)
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)
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)
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)