<- 0.5
phi_inicial <- 1
sigma2_inicial <- dlmModARMA(ar = phi_inicial, ma = NULL, sigma2 = sigma2_inicial) modAR1
9 MEE - Filtro Kalman
9.1 Descripción del código
En este ejemplo usamos el paquete dlm para ajustar un proceso AR(1) en formato espacio-estado, estimar sus parámetros por Máxima Verosimilitud (MEE) y recuperar los estados no observados mediante el filtro y suavizador de Kalman.
Según las notas de clase, un modelo de espacio-estado se escribe como:
\[
\begin{aligned}
y_t &= Z\,\omega_t + \varepsilon_t, \quad \varepsilon_t \sim N(0,H),\\
\omega_{t+1} &= T\,\omega_t + \eta_t, \quad \eta_t \sim N(0,Q).
\end{aligned}
\] El filtro de Kalman calcula recursivamente el estimador de \(\omega_t\) que minimiza el error cuadrático medio usando solo la información disponible hasta \(t\). El suavizador utiliza toda la muestra hasta \(T\).
9.1.1 1. Instalación y carga del paquete
Uso práctico: dlm
facilita la formulación y ajuste de modelos de espacio-estado con ARMA en transición y observación.
9.1.2 2. Definición del modelo AR(1) en espacio-estado
Aquí dlmModARMA
construye matrices \(T,\,Z,\,Q,\,H\) internas que representan el AR(1): \[
\omega_{t+1} = \phi\,\omega_t + \eta_t,\quad y_t = \omega_t + \varepsilon_t.
\]
9.1.3 3. Simulación de datos
set.seed(123)
<- arima.sim(model = list(ar = phi_inicial), n = 100,
sim_data sd = sqrt(sigma2_inicial))
acf(sim_data)
pacf(sim_data)
La ACF decae exponencialmente, consistente con un AR(1).
9.1.4 4. Función de construcción para MEE
<- function(par) {
build_mod dlmModARMA(ar = par[1], ma = NULL, sigma2 = par[2])
}
Esta función será llamada por el optimizador de verosimilitud para proponer nuevos parámetros \(\phi\) y \(\sigma^2\).
9.1.5 5. Estimación por Máxima Verosimilitud (MEE)
<- dlmMLE(sim_data, parm = c(phi_inicial, sigma2_inicial),
fit build = build_mod)
dlmMLE
maximiza la función de verosimilitud evaluada con el filtro de Kalman.
9.1.6 6. Extracción del modelo ajustado
<- build_mod(fit$par)
mod_est print(mod_est)
$FF
[,1]
[1,] 1
$V
[,1]
[1,] 0
$GG
[,1]
[1,] 0.4910977
$W
[,1]
[1,] 0.8043823
$m0
[1] 0
$C0
[,1]
[1,] 1e+07
Aquí vemos las matrices ajustadas y las varianzas estimadas.
9.1.7 7. Filtro y suavizador de Kalman
# Filtro recursivo hasta t
<- dlmFilter(sim_data, mod_est)
filt # Suavizador usando toda la muestra
<- dlmSmooth(filt) states
filt$m
contiene \(\hat\omega_{t|t-1}\) (estimación “a priori”).
states$s
contiene \(\hat\omega_{t|T}\) (suavizado “a posteriori”).
9.1.8 8. Visualización de estados
# Estados filtrados en línea continua
plot(sim_data, type="l", col="blue",
main="Datos simulados y estados filtrados")
lines(filt$m, col="red", lty=2)
legend("topright",
legend=c("Datos simulados","Estados filtrados"),
col=c("blue","red"), lty=1:2)
# Estados suavizados en línea punteada
plot(sim_data, type="l", col="blue",
main="Datos simulados y estados suavizados")
lines(states$s, col="red", lty=2)
legend("topright",
legend=c("Simulación","Estados suavizados"),
col=c("blue","red"), lty=1:2)
9.2 Interpretaciones y usos
- Máxima Verosimilitud (MEE): el filtro de Kalman calcula la verosimilitud del espacio-estado, permitiendo estimar \(\phi\) y \(\sigma^2\) eficientemente.
- Filtro de Kalman: recupera la trayectoria latente \(\omega_t\), útil para detectar cambios en la dinámica subyacente (e.g., en volatilidad o tendencia).
- Suavizado: produce estimaciones más estables de \(\omega_t\) usando toda la información, ideal para análisis retrospectivo de anomalías.
- Extensión: la misma estructura admite modelos ARMA(p,q), componentes estacionales SARIMA en transición, y variables exógenas agregando estados.
Estas herramientas son fundamentales en series de tiempo estructurales y pronósticos en contextos económicos, financieros o de control.