5 mar 2026

Estimación del modelo HP mediante máxima verosimilitud

El filtro de Hodrick–Prescott (HP) se utiliza ampliamente para descomponer una serie macroeconómica en un componente cíclico y transitorio. El parámetro controla el grado de suavizamiento de la tendencia. En aplicaciones empíricas se utilizan valores estándar (por ejemplo para datos trimestrales), aunque también es posible estimarlo a partir de los datos.

Una forma natural de hacerlo consiste en utilizar la representación en espacio de estados del filtro HP y estimar los parámetros mediante máxima verosimilitud con el filtro de Kalman.

La siguiente función estima el parámetro implícito del filtro HP utilizando el paquete KFAS.

estimate_hp_lambda <- function(y){
 
  y <- as.numeric(y)
 
  model <- SSModel(
    y ~ SSMtrend(degree = 2, Q = list(0, NA)),
    H = NA
  )
 
  fit <- fitSSM(model, inits = c(log(var(y)), log(var(y))),
                method = "BFGS")
 
  model_fit <- fit$model
 
  sigma_eta <- model_fit$Q[2, 2, 1]  # pendiente (tendencia)
  sigma_c   <- model_fit$H[1, 1, 1]  # ciclo (irregular)
 
  lambda_hat <- sigma_c / sigma_eta
 
  return(list(
    lambda      = lambda_hat,
    sigma_cycle = sigma_c,
    sigma_trend = sigma_eta,
    model       = model_fit
  ))
}

 La función KFS() realiza dos procedimientos:

 -     Filtro de Kalman: estimación recursiva usando información hasta .

-          Kalman smoother: estimación usando toda la muestra.

 El objeto smoothed contiene las estimaciones suavizadas de los estados del sistema.

 Conversión de la serie

 El modelo de espacio de estados requiere que la serie de entrada sea un vector numérico. Por esta razón se elimina cualquier estructura adicional (por ejemplo ts o tibble) y se trabaja únicamente con los valores.

   y <- as.numeric(y)

 Especificación del modelo en espacio de estados

 Aquí se define la representación estructural del filtro HP. El término SSMtrend(degree = 2) implica que la tendencia sigue un modelo de tendencia local lineal.

   model <- SSModel(
    y ~ SSMtrend(degree = 2, Q = list(0, NA)),
    H = NA
  )
 
El modelo impone que el nivel de la tendencia no tiene perturbación estocástica, la pendiente sí tiene innovación. Esta restricción reproduce exactamente la estructura del filtro HP.
 
Q = list(0, NA)

La varianza del error de observación debe estimarse mediante máxima verosimilitud.

H = NA

Estimación por máxima verosimilitud. La función fitSSM estima los parámetros desconocidos del modelo utilizando máxima verosimilitud (se estima varianza del ciclo y varianza de la innovación de la tendencia).

fit <- fitSSM(model, inits = c(log(var(y)), log(var(y))),
                method = "BFGS")

-          inits: valores iniciales para los parámetros

-          method = "BFGS": algoritmo de optimización cuasi-Newton

 Recuperación de los parámetros y varianzas relevantes:

   model_fit <- fit$model
 
  sigma_eta <- model_fit$Q[2, 2, 1]  # pendiente (tendencia)
  sigma_c   <- model_fit$H[1, 1, 1]  # ciclo (irregular)

El filtro HP puede interpretarse como un modelo estructural en el que el parámetro de suavizamiento es:

  lambda_hat <- sigma_c / sigma_eta

Uso de la función:

Una vez definida la función estimate_hp_lambda(), el primer paso consiste en aplicarla a la serie ajustada estacionalmente.

hp_ml <- estimate_hp_lambda(pib_sa)

El parámetro estimado puede consultarse con:

hp_ml$lambda

Este valor representa el parámetro de suavizamiento implícito en los datos, en lugar de imponer el valor estándar .

Una vez estimado el modelo, el siguiente paso es aplicar el filtro y suavizador de Kalman para recuperar los estados no observados del modelo (nivel y pendiente de la tendencia).

Recuperación de la tendencia estimada

trend_hp_mle <- smoothed$alphahat[, "level"]

Estimación del modelo HP mediante máxima verosimilitud

El filtro de Hodrick–Prescott (HP) se utiliza ampliamente para descomponer una serie macroeconómica en un componente cíclico y transitorio. ...