6  Modelos de Espacio-Estado.

El modelo de espacio-estado, también conocido como modelo lineal dinámico, fue introducido por Kalman y Bucy en el contexto de seguimiento espacial. Este enfoque generaliza muchos modelos estadísticos, al igual que la regresión lineal lo hace para otras áreas. Originalmente usado en investigación aeroespacial, hoy se aplica en economía, medicina y ciencias del suelo.

El modelo de espacio de estados se compone de dos partes:

  1. Un proceso latente o de estado (\(x_t\)), que sigue una dinámica temporal propia.
  2. Un proceso observado (\(y_t\)), que depende del estado y añade ruido de observación.

Principios del modelo

El modelo se basa en dos condiciones fundamentales:

6.1 Modelo lineal gaussiano

El modelo lineal gaussiano de espacio-estado (DLM) se define mediante dos ecuaciones:

\[ x_t = \Phi x_{t-1} + w_t \]

\[ y_t = A_t x_t + v_t \]

donde:

  • \(w_t \sim \text{iid } N_p(0, Q)\) es el ruido del sistema,
  • \(v_t \sim \text{iid } N_q(0, R)\) es el ruido de observación,
  • \(x_0 \sim N_p(\mu_0, \Sigma_0)\) es el estado inicial.

En este modelo, las observaciones no corresponden directamente a los estados, sino a transformaciones lineales de ellos más ruido.

Inclusión de variables exógenas

Se pueden incorporar variables exógenas \(u_t\) mediante:

\[ x_t = \Phi x_{t-1} + \Upsilon u_t + w_t \]

\[ y_t = A_t x_t + \Gamma u_t + v_t \]

donde \(\Upsilon\) y \(\Gamma\) son matrices de efectos de entrada.

6.1.0.1 Ejemplo biomédico

En un estudio de seguimiento de pacientes post-trasplante de médula ósea, se registraron tres marcadores: leucocitos (WBC), plaquetas (PLT) y hematocrito (HCT). Las observaciones contenían aproximadamente 40% de valores faltantes.

El modelo de estado utilizado fue:

\[ \begin{pmatrix} x_{t1} \\ x_{t2} \\ x_{t3} \end{pmatrix} = \begin{pmatrix} \phi_{11} & \phi_{12} & \phi_{13} \\ \phi_{21} & \phi_{22} & \phi_{23} \\ \phi_{31} & \phi_{32} & \phi_{33} \end{pmatrix} \begin{pmatrix} x_{t-1,1} \\ x_{t-1,2} \\ x_{t-1,3} \end{pmatrix} + \begin{pmatrix} w_{t1} \\ w_{t2} \\ w_{t3} \end{pmatrix} \]

El modelo de observación fue \(y_t = A_t x_t + v_t\), donde \(A_t\) es la matriz identidad o nula dependiendo de si se observó o no la muestra en el día correspondiente.

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.2
✔ ggplot2   4.0.0     ✔ tibble    3.3.0
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.1.0     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(astsa)

plot(blood, type='o', pch=19, xlab='day', main='')

6.1.1 Reformulación del modelo VAR(2)

Cuando el proceso de estado sigue un modelo VAR(2), puede escribirse como:

\[ \binom{x_t}{x_{t-1}} = \begin{pmatrix} \Phi_1 & \Phi_2 \\ I & 0 \end{pmatrix} \binom{x_{t-1}}{x_{t-2}} + \binom{w_t}{0} \]

La ecuación de observación correspondiente es:

\[ y_t = [A_t | 0] \binom{x_t}{x_{t-1}} + v_t \]

6.1.1.1 Ejemplo de calentamiento global

Se analizan dos series: gtemp_both (temperatura global tierra-oceano) y gtemp_land (solo tierra). Ambas observan un mismo proceso subyacente con diferentes ruidos de medición:

\[ y_{t1} = x_t + v_{t1}, \quad y_{t2} = x_t + v_{t2} \]

En forma vectorial:

\[ \binom{y_{t1}}{y_{t2}} = \binom{1}{1} x_t + \binom{v_{t1}}{v_{t2}} \] donde

\[ R = \operatorname{var} \begin{pmatrix} v_{t1} \\ v_{t2} \end{pmatrix} = \begin{pmatrix} r_{11} & r_{12} \\ r_{21} & r_{22} \end{pmatrix}. \]

y \(x_t\) sigue un paseo aleatorio con drift:

\[ x_t = \delta + x_{t-1} + w_t \]

con \(Q= \text{var}(w_t)\). En este caso \(p=1\), \(q=2\), \(\Phi=1\) y \(\Upsilon= \delta\) con \(u_t=1\).

ts.plot(gtemp_both, gtemp_land, col = c("darkgreen", "blue"),
        ylab = "Desviaciones de temperatura",
        main = "Series globales de temperatura (1880-2015)")

6.1.1.2 Ejemplo: proceso AR(1) con ruido de observación

Se considera el modelo univariado:

\[ y_t = x_t + v_t \]

\[ x_t = \phi x_{t-1} + w_t \]

donde \(v_t \sim N(0, \sigma_v^2)\) y \(w_t \sim N(0, \sigma_w^2)\). Además \(x_0\sim N \left(0,\frac{\sigma_w^2}{1-\phi^2}\right)\); \(\{v_t\}\), \(\{w_t\}\) y \(x_0\) son independientes.

La función de autocovarianza del proceso de estado \(x_t\) es:

\[ \gamma_x(h) = \frac{\sigma_w^2}{1 - \phi^2} \phi^h \]

La varianza y covarianza de las observaciones se derivan como:

\[ \gamma_y(0) = \frac{\sigma_w^2}{1 - \phi^2} + \sigma_v^2 \]

\[ \gamma_y(h) = \gamma_x(h), \quad h \ge 1 \] por independencia.

Por tanto, la función de autocorrelación de \(y_t\) es:

\[ \rho_y(h) = \left( 1 + \frac{\sigma_v^2}{\sigma_w^2}(1 - \phi^2) \right)^{-1} \phi^h \]

Esto muestra que \(y_t\) no sigue un AR(1) a menos que \(\sigma_v^2 = 0\). En general, puede representarse como un modelo ARMA(1,1):

\[ y_t = \phi y_{t-1} + \theta u_{t-1} + u_t \]

donde \(u_t\) es ruido blanco gaussiano.

6.2 Estimación del estado: predicción, filtrado y suavizamiento

Esta sección introduce el problema de estimar el estado no observado \(x_t\) en modelos en espacio de estado lineales gaussianos, diferenciando entre predicción (\(s<t\)), filtrado (\(s=t\)) y suavizamiento (\(s>t\)). Se definen los estimadores y sus covarianzas, se deriva el Filtro de Kalman y el Suavizador de Kalman, se presenta la formulación en términos de densidades, y se ilustra con el modelo de nivel local y código R para simulación y aplicación del filtro/suavizador. Finalmente, se incluye el suavizador de covarianza a rezago uno necesario para EM.

6.2.1 Definiciones y objetivos

Sea el modelo en espacio de estado (lineal gaussiano) con entradas exógenas: \[ x_t = \Phi x_{t-1} + \Upsilon u_t + w_t, \quad w_t \sim \text{iid } \mathcal{N}_p(0,Q) \] \[ y_t = A_t x_t + \Gamma u_t + v_t, \quad v_t \sim \text{iid } \mathcal{N}_q(0,R) \]

Definimos los estimadores condicionales: \[ x_t^{s} = \mathrm{E}\left(x_t \mid y_{1:s}\right) \] \[ P^{s}_{t_1,t_2} = \mathrm{E}\left\{\left(x_{t_1}-x_{t_1}^{s}\right)\left(x_{t_2}-x_{t_2}^{s}\right)'\right\} \] Cuando \(t_1=t_2=t\), escribimos \(P_t^{s}\). En el caso gaussiano, \[ P^{s}_{t_1,t_2}=\mathrm{E}\left\{\left(x_{t_1}-x_{t_1}^{s}\right)\left(x_{t_2}-x_{t_2}^{s}\right)'\mid y_{1:s}\right\}. \]

6.2.2 Propiedad: Filtro de Kalman

Para \(t=1,\ldots,n\), con \(x_0^{,0}=\mu_0\) y \(P_0^{,0}=\Sigma_0\):

Predicción (time update): \[ x_t^{t-1}=\Phi x_{t-1}^{t-1}+\Upsilon u_t \] \[ P_t^{t-1}=\Phi P_{t-1}^{t-1}\Phi' + Q \] las predicciones se realizan usando como valores iniciales \(x_n^n\) y \(P_n^n\).

Actualización (measurement update): \[ x_t^{t}=x_t^{t-1}+K_t\left(y_t - A_t x_t^{t-1}-\Gamma u_t\right) \] \[ P_t^{t}=\left[I-K_t A_t\right]P_t^{t-1} \] con ganancia de Kalman: \[ K_t = P_t^{t-1}A_t'\left[A_t P_t^{t-1}A_t' + R\right]^{-1} \]

Innovaciones y su varianza: \[ \epsilon_t = y_t - \mathrm{E}\left(y_t\mid y_{1:t-1}\right)= y_t - A_t x_t^{t-1} - \Gamma u_t \] \[ \Sigma_t \stackrel{\mathrm{def}}{=}\operatorname{var}(\epsilon_t) = A_t P_t^{t-1}A_t' + R \]

Caso con parámetros dependientes del tiempo: Si \(\Phi,\Upsilon,Q,\Gamma,R\) o la dimensión \(q_t\) varían con \(t\), las ecuaciones anteriores se mantienen con las sustituciones correspondientes.

6.2.2.1 Enfoque mediante densidades

Sea \(\mathfrak{g}(x;\mu,\Sigma)\) la densidad normal multivariada con media \(\mu\) y matriz de covarianza \(\Sigma\). Para un modelo de espacio-estado:

  • Propiedad Markov del proceso de estado o latente:

    \[ \mathrm{p}_\Theta(x_t\mid x_{t-1},x_{t-2},\ldots,x_0)=\mathrm{p}_\Theta(x_t\mid x_{t-1})=\mathfrak{g}(x_t;\Phi x_{t-1},Q) \]

  • Independencia condicional de observaciones: \[ \mathrm{p}_\Theta(y_{1:n}\mid x_{1:n})=\prod_{t=1}^n\mathrm{p}_\Theta(y_{t}\mid x_{t})=\prod_{t=1}^n \mathfrak{g}(y_t;A_t x_t,R) \]

con condición inicial \(\mathrm{p}_\Theta(x_0)=\mathfrak{g}(x_0;\mu_0,\Sigma_0)\).

Predicción (densidad): \[ \begin{aligned} p_{\Theta}(x_t \mid y_{1:t-1}) &= \int_{\mathbb{R}^p} p_{\Theta}(x_t, x_{t-1} \mid y_{1:t-1}) \, dx_{t-1} \\ &= \int_{\mathbb{R}^p} p_{\Theta}(x_t \mid x_{t-1}) \, p_{\Theta}(x_{t-1} \mid y_{1:t-1}) \, dx_{t-1} \\ &= \int_{\mathbb{R}^p} \mathfrak{g}(x_t; \Phi x_{t-1}, Q) \, \mathfrak{g}(x_{t-1}; x_{t-1}^{t-1}, P_{t-1}^{t-1}) \, dx_{t-1} \\ &= \mathfrak{g}(x_t; x_t^{t-1}, P_t^{t-1}) \, , \end{aligned} \] donde los valores de \(x_t^{t-1}\) y \(P_t^{t-1}\) son los valores obtenidos en el algoritmo.

Filtrado (densidad): \[ \begin{aligned} p_{\Theta}(x_t \mid y_{1:t}) &= p_{\Theta}(x_t \mid y_t, y_{1:t-1}) \propto p_{\Theta}(y_t \mid x_t) \, p_{\Theta}(x_t \mid y_{1:t-1}) \\ &= \mathfrak{g}(y_t; A_t x_t, R) \, \mathfrak{g}(x_t; x_t^{t-1}, P_t^{t-1}) \\ & = \mathfrak{g}(x_t; x_t^{t}, P_t^{t}) \end{aligned} \]

con \(x_t^t\) y \(P_t^t\) obtenidos anteriormente en el algoritmo.

6.2.2.2 Ejemplo: Modelo de nivel local

Observación y estado: \[ y_t=\mu_t+v_t, \quad v_t\sim \text{iid }\mathcal{N}(0,\sigma_v^2) \] \[ \mu_t=\mu_{t-1}+w_t, \quad w_t\sim \text{iid }\mathcal{N}(0,\sigma_w^2) \]

Notación de Blight: \[ \{x;\mu,\sigma^2\}=\exp\left\{-\frac{1}{2\sigma^2}(x-\mu)^2\right\} \] entonces se tiene: \[ \{x;\mu,\sigma^2\}=\{\mu;x,\sigma^2\} \] Completando cuadrados: \[ \{x;\mu_1,\sigma_1^2\}\{x;\mu_2,\sigma_2^2\} =\left\{x;\frac{\mu_1/\sigma_1^2+\mu_2/\sigma_2^2}{1/\sigma_1^2+1/\sigma_2^2},\left(1/\sigma_1^2+1/\sigma_2^2\right)^{-1}\right\} \{\mu_1;\mu_2,\sigma_1^2+\sigma_2^2\} \tag{1} \]

Usando lo anterior:

Predicción: \[ p(\mu_t\mid y_{1:t-1}) \propto \int \{\mu_t;\mu_{t-1},\sigma_w^2\}\{\mu_{t-1};\mu_{t-1}^{,t-1},P_{t-1}^{,t-1}\}d\mu_{t-1} = \{\mu_t;\mu_{t-1}^{,t-1},P_{t-1}^{,t-1}+\sigma_w^2\} \] y de lo anterior se concluye que:

\[ \mu_t\mid y_{1:t-1}\sim \mathcal{N}\left(\mu_t^{t-1},P_t^{t-1}\right) \] donde

\[ \mu_t^{,t-1}=\mu_{t-1}^{,t-1},\quad P_t^{t-1}=P_{t-1}^{t-1}+\sigma_w^2 \]

Filtrado: \[ p(\mu_t\mid y_{1:t}) \propto \{y_t;\mu_t,\sigma_v^2\}\{\mu_t;\mu_t^{t-1},P_t^{t-1}\} =\{\mu_t;y_t,\sigma_v^2\}\{\mu_t;\mu_t^{t-1},P_t^{t-1}\} \] Usando (1):

\[ \mu_t\mid y_{1:t}\sim \mathcal{N}\left(\mu_t^{t},P_t^{t}\right) \] donde: \[ \mu_t^{t}=\frac{\sigma_v^2\mu_t^{t-1}}{P_t^{t-1}+\sigma_v^2}+\frac{P_t^{t-1},y_t}{P_t^{t-1}+\sigma_v^2} =\mu_t^{t-1}+K_t(y_t-\mu_t^{t-1}) \] con: \[ K_t=\frac{P_t^{t-1}}{P_t^{t-1}+\sigma_v^2} \] \[ P_t^{t}=\left(\frac{1}{\sigma_v^2}+\frac{1}{P_t^{t-1}}\right)^{-1} =\frac{\sigma_v^2 P_t^{t-1}}{P_t^{t-1}+\sigma_v^2}=(1-K_t)P_t^{t-1} \]

6.2.3 Propiedad: Suavizador de Kalman

Con \(x_n^{n}\) y \(P_n^{n}\) del filtro:

Para \(t=n,n-1,\ldots,1\), \[ x_{t-1}^{n}=x_{t-1}^{t-1}+J_{t-1}\left(x_t^{n}-x_t^{t-1}\right) \] \[ P_{t-1}^{n}=P_{t-1}^{t-1}+J_{t-1}\left(P_t^{n}-P_t^{t-1}\right)J_{t-1}' \] \[ J_{t-1}=P_{t-1}^{t-1}\Phi'\left[P_t^{t-1}\right]^{-1} \]

6.2.3.1 Ejemplo 6.5: Predicción, filtrado y suavizamiento en el nivel local

Simulación con \(n=50\): \[ \mu_t=\mu_{t-1}+w_t,\quad w_t\sim\mathcal{N}(0,1),\quad \mu_0\sim\mathcal{N}(0,1) \]

\[ y_t=\mu_t+v_t,\quad v_t\sim\mathcal{N}(0,1) \]

Observaciones: En general, \(P_t^{t-1}\ge P_t^{t}\ge P_t^{n}\) y las varianzas de error se estabilizan rápidamente.

# generar datos
set.seed(1); num <- 50
w <- rnorm(num + 1, 0, 1); v <- rnorm(num, 0, 1)
mu <- cumsum(w)           # estado: mu[0],..., mu[50]
y  <- mu[-1] + v          # obs: y[1],..., y[50]

# filtrar y suavizar (Ksmooth0 llama a Kfilter0)
# Supone funciones definidas en el entorno del curso (Ksmooth0/Kfilter0)
#ks <- Ksmooth0(num, y, A = 1, muQ = 0, Sigma0 = 1, Phi = 1, cQ = 1, cR = 1)
ks <- Ksmooth(y, A = 1, mu0 = 0, Sigma0 = 1, Phi = 1, sQ = 1, sR = 1)

# gráficos (predicción, filtrado, suavizado)
par(mfrow = c(3, 1)); Time <- 1:num
plot(Time, mu[-1], main = 'Predict', ylim = c(-5, 10))
lines(ks$Xp)
lines(ks$Xp + 2*sqrt(ks$Pp), lty = 2, col = 4)
lines(ks$Xp - 2*sqrt(ks$Pp), lty = 2, col = 4)

plot(Time, mu[-1], main = 'Filter', ylim = c(-5, 10))
lines(ks$Xf)
lines(ks$Xf + 2*sqrt(ks$Pf), lty = 2, col = 4)
lines(ks$Xf - 2*sqrt(ks$Pf), lty = 2, col = 4)

plot(Time, mu[-1], main = 'Smooth', ylim = c(-5, 10))
lines(ks$Xs)
lines(ks$Xs + 2*sqrt(ks$Ps), lty = 2, col = 4)
lines(ks$Xs - 2*sqrt(ks$Ps), lty = 2, col = 4)

mu[1]; ks$X0n; sqrt(ks$P0n)  # información inicial
[1] -0.6264538
           [,1]
[1,] -0.3241541
          [,1]
[1,] 0.7861514

6.2.4 Propiedad: Suavizador de covarianza a rezago uno

Con condiciones iniciales: \[ P_{n,n-1}^{n} = (I-K_n A_n)\Phi P_{n-1}^{n-1} \] Recursión para \(t=n,n-1,\ldots,2\): \[ P_{t-1,t-2}^{n} = P_{t-1}^{t-1}J_{t-2}' + J_{t-1}\left(P_{t,t-1}^{n} - \Phi P_{t-1}^{t-1}\right)J_{t-2}' \]

6.2.5 Notas finales

  • Las fórmulas anteriores cubren predicción (\(x_t^{,t-1}\)), filtrado (\(x_t^{,t}\)) y suavizamiento (\(x_t^{,n}\)) en el marco lineal gaussiano.
  • Las innovaciones \(\epsilon_t\) y sus covarianzas \(\Sigma_t\) son subproductos clave para diagnóstico y para máxima verosimilitud (e.g., EM).

6.3 Estimación por Máxima Verosimilitud

En esta sección se aborda cómo estimar, por máxima verosimilitud, los parámetros de un modelo de espacio de estados lineal gaussiano. Se aprovecha que, bajo gaussianidad, las innovaciones del filtro de Kalman son independientes y normales, lo que permite escribir la verosimilitud en una forma recursiva muy manejable. Se discuten dos enfoques de estimación: (i) Newton-Raphson, que usa derivadas de la verosimilitud de innovaciones, y (ii) EM (Baum–Welch), que alterna entre suavizar estados y actualizar parámetros como en una regresión multivariada. Finalmente, se presenta el resultado asintótico que garantiza normalidad de los MLE bajo condiciones de estabilidad del filtro.

6.3.1 Modelo de espacio de estados y verosimilitud de innovaciones

Formulación del modelo

Consideramos el modelo lineal gaussiano con entradas \[ x_t = \Phi x_{t-1} + \Upsilon u_t + w_t, \qquad w_t \sim \text{iid } N_p(0,Q), \] \[ y_t = A_t x_t + \Gamma u_t + v_t, \qquad v_t \sim \text{iid } N_q(0,R), \] con estado inicial \[ x_0 \sim N_p(\mu_0, \Sigma_0), \] y suponiendo que \({w_t}\) y \({v_t}\) son independientes. Denotamos por \(\Theta\) al vector de todos los parámetros desconocidos: \[ \Theta = (\mu_0, \Sigma_0, \Phi, Q, R, \Upsilon, \Gamma). \]

Innovaciones y su covarianza

Del filtro de Kalman obtenemos, para \(t=1,\dots,n\), el error de predicción u innovación \[ \epsilon_t = y_t - A_t x_t^{t-1} - \Gamma u_t, \] donde \(x_t^{t-1} = \mathbb{E}(x_t \mid y_{1:t-1})\) es el predictor del estado. La covarianza de la innovación es \[ \Sigma_t = \operatorname{var}(\epsilon_t) = A_t P_t^{t-1} A_t' + R, \] con \(P_t^{t-1}\) la covarianza de predicción del estado.

Como las innovaciones son normales, centradas e independientes a lo largo del tiempo, la verosimilitud puede escribirse como producto de densidades normales.

Verosimilitud de innovaciones

Ignorando constantes aditivas,

\[ -\ln L_Y(\Theta) = \frac12 \sum_{t=1}^n \ln\big|\Sigma_t(\Theta)\big| + \frac12 \sum_{t=1}^n \epsilon_t(\Theta)' \Sigma_t(\Theta)^{-1} \epsilon_t(\Theta). \]

Nota: Aquí es clave que para cada evaluación de la verosimilitud hay que correr el filtro de Kalman completo con los parámetros actuales para obtener \(\epsilon_t(\Theta)\) y \(\Sigma_t(\Theta)\).

6.3.2 Estimación por Newton–Raphson

6.3.2.1 Idea general

La log-verosimilitud es no lineal y puede involucrar muchos parámetros. El procedimiento estándar:

  1. Elegir valores iniciales \(\Theta^{(0)}\) (por ejemplo, usando estimadores momentáneos o resultados ARMA).
  2. Con \(\Theta^{(0)}\), correr el filtro de Kalman para obtener innovaciones y sus covarianzas.
  3. Evaluar \(-\ln L_Y(\Theta)\) y (numérica o analíticamente) su gradiente y Hessiano.
  4. Actualizar con Newton–Raphson: \[ \Theta^{(1)} = \Theta^{(0)} - \big[H(\Theta^{(0)})\big]^{-1} \nabla\big(-\ln L_Y(\Theta^{(0)})\big), \] y repetir hasta converger.

Pasos enumerados

  1. Inicialización: \[ \Theta^{(0)} = {\mu_0^{(0)}, \Sigma_0^{(0)}, \Phi^{(0)}, Q^{(0)}, R^{(0)}}. \]
  2. Filtrado con \(\Theta^{(0)}\) \(\Rightarrow\) obtener \({\epsilon_t^{(0)}, \Sigma_t^{(0)}}_{t=1}^n\).
  3. Paso de optimización (Newton/BFGS) usando la log-verosimilitud.
  4. Iteración hasta que \(\Theta^{(j+1)} \approx \Theta^{(j)}\) o la log-verosimilitud se estabilice.

6.3.2.2 Ejemplo en R: AR(1) con ruido de medición

Se considera el modelo: \[ x_t = \phi x_{t-1} + w_t, \qquad y_t = x_t + v_t, \] con \(w_t \sim N(0,\sigma_w^2)\) y \(v_t \sim N(0,\sigma_v^2)\). Los parámetros a estimar son \[ \Theta = (\phi, \sigma_w, \sigma_v). \]

# Generar datos
set.seed(999); num <- 100
x <- arima.sim(n = num + 1, list(ar = .8), sd = 1)
y <- ts(x[-1] + rnorm(num, 0, 1))

# Estimadores iniciales vía momentos
u <- ts.intersect(y, stats::lag(y, -1), stats::lag(y, -2))
varu <- var(u); coru <- cor(u)
phi  <- coru[1,3] / coru[1,2]
q    <- (1 - phi^2) * varu[1,2] / phi
r    <- varu[1,1] - q / (1 - phi^2)
init.par <- c(phi, sqrt(q), sqrt(r))

# Función de verosimilitud de innovaciones
Linn <- function(para) {
  phi <- para[1]
  sigw <- para[2]
  sigv <- para[3]
  Sigma0 <- (sigw^2) / (1 - phi^2)
  Sigma0[Sigma0 < 0] <- 0
  kf <- Kfilter(y, 1, mu0 = 0, Sigma0, phi, sigw, sigv)
  return(kf$like)
}

# Estimación por BFGS
est <- optim(init.par, Linn, gr = NULL,
             method = "BFGS", hessian = TRUE,
             control = list(trace = 1, REPORT = 1))
initial  value 81.313627 
iter   2 value 80.169051
iter   3 value 79.866131
iter   4 value 79.222846
iter   5 value 79.021504
iter   6 value 79.014723
iter   7 value 79.014453
iter   7 value 79.014452
iter   7 value 79.014452
final  value 79.014452 
converged
SE <- sqrt(diag(solve(est$hessian)))
cbind(estimate = c(phi = est$par[1],
                   sigw = est$par[2],
                   sigv = est$par[3]),
      SE = SE)
      estimate         SE
phi  0.8137623 0.08060636
sigw 0.8507863 0.17528895
sigv 0.8743968 0.14293192

El procedimiento converge en pocas iteraciones y entrega estimaciones cercanas a los valores reales, junto con sus errores estándar (a partir del Hessiano).

6.4 Estimación por EM

El algoritmo EM (Expectation-Maximization) es una alternativa para estimar los parámetros de un modelo de espacio de estados lineal gaussiano. La idea central es considerar los estados no observados como datos faltantes y alternar entre suavizar los estados dados los parámetros actuales (E-step) y actualizar los parámetros dados los estados suavizados (M-step). A continuación se describen ambos pasos. Idea original: Dempster, Laird y Rubin (1977); aplicación a espacio de estados: Shumway y Stoffer (1982).

6.4.1 Idea de datos completos

Si pudiéramos observar también los estados \(x_{0:n}\), la verosimilitud completa sería \[ p_\Theta(x_{0:n}, y_{1:n}) = p_{\mu_0, \Sigma_0}(x_0) \prod_{t=1}^n p_{\Phi, Q}(x_t \mid x_{t-1}) \prod_{t=1}^n p_{R}(y_t \mid x_t). \] y a \(\{x_{0:n},y_{1:n}\}\) le llamamos datos completos.

Bajo gaussianidad, ignorando constantes, \[ \begin{aligned} -2 \ln L_{X,Y}(\Theta) &= \ln|\Sigma_0| + (x_0 - \mu_0)'\Sigma_0^{-1}(x_0 - \mu_0) \\ &\quad + n \ln|Q| + \sum_{t=1}^n (x_t - \Phi x_{t-1})' Q^{-1} (x_t - \Phi x_{t-1}) \\ &\quad + n \ln|R| + \sum_{t=1}^n (y_t - A_t x_t)' R^{-1} (y_t - A_t x_t). \end{aligned} \] El principal objetivo del EM es minimizar esta expresión respecto de \(\Theta\), pero considerando que los estados \(x_{0:n}\) no se observan. En este caso a \(y_{1:n}\) se le llama datos completos o observados.

6.4.2 E-step

Como los estados no se observan, el EM propone tomar esperanza condicional de \(-2 \ln L_{X,Y}(\Theta)\) dado \(y_{1:n}\) y los parámetros actuales \(\Theta^{(j-1)}\):

\[ Q(\Theta \mid \Theta^{(j-1)}) = \mathbb{E}\left\{ -2 \ln L_{X,Y}(\Theta) \mid y_{1:n}, \Theta^{(j-1)} \right\}. \] Para calcular esta esperanza se necesitan los suavizadores de Kalman, es decir:

  • \(x_t^n = \mathbb{E}(x_t \mid y_{1:n})\),
  • \(P_t^n = \operatorname{var}(x_t \mid y_{1:n})\),
  • \(P_{t,t-1}^n = \operatorname{cov}(x_t, x_{t-1} \mid y_{1:n})\).

Con estos, se define \[ S_{11} = \sum_{t=1}^n \big( x_t^n x_t^{n'} + P_t^n \big), \] \[ S_{10} = \sum_{t=1}^n \big( x_t^n x_{t-1}^{n'} + P_{t,t-1}^n \big), \] \[ S_{00} = \sum_{t=1}^n \big( x_{t-1}^n x_{t-1}^{n'} + P_{t-1}^n \big). \]

Sustituyendo, se llega a \[ \begin{aligned} Q(\Theta \mid \Theta^{(j-1)}) &= \ln|\Sigma_0|+\operatorname{tr}\left\{\Sigma_0^{-1}\left[P_0^n + (x_0^n - \mu_0)(x_0^n - \mu_0)'\right]\right\} \\ &\quad + n\ln|Q|+ \operatorname{tr}\big\{Q^{-1}(S_{11} - S_{10} \Phi' - \Phi S_{10}' + \Phi S_{00} \Phi') \big\} \\ &\quad + n \ln|R|+\operatorname{tr}\Big\{ R^{-1} \sum_{t=1}^n \big[ (y_t - A_t x_t^n)(y_t - A_t x_t^n)' + A_t P_t^n A_t' \big] \Big\}. \end{aligned} \]

6.4.3 M-step

El paso M consiste en minimizar \(Q(\Theta \mid \Theta^{(j-1)})\) respecto de los parámetros, lo que da fórmulas cerradas:

  • Para la matriz autorregresiva:

    \[ \Phi^{(j)} = S_{10} S_{00}^{-1}. \]

  • Para la matriz de covarianza de la ecuación de estado:

    \[ Q^{(j)} = \frac{1}{n} \big( S_{11} - S_{10} S_{00}^{-1} S_{10}' \big). \]

  • Y para la matriz de covarianza de la ecuación de observación:

    \[ R^{(j)} = \frac{1}{n} \sum_{t=1}^n \big[ (y_t - A_t x_t^n)(y_t - A_t x_t^n)' + A_t P_t^n A_t' \big]. \]

  • Para las condiciones iniciales:

    \[ \mu_0^{(j)} = x_0^n, \qquad \Sigma_0^{(j)} = P_0^n. \]

6.4.4 Algoritmo EM completo

  1. Inicializar \(\Theta^{(0)}\) y calcular \(-\ln L_Y(\Theta^{(0)})\) .
  2. E-step: con \(\Theta^{(j-1)}\), correr filtro + suavizador para obtener \(x_t^n, P_t^n, P_{t,t-1}^n\) y luego \(S_{11}, S_{10}, S_{00}\).
  3. M-step: actualizar \(\Phi, Q, R, \mu_0, \Sigma_0\).
  4. Calcular \(-\ln L_Y(\Theta^{(j)})\).
  5. Repetir hasta convergencia.

6.4.4.1 Ejemplo: EM para AR(1) con ruido de medición

library(nlme)

Attaching package: 'nlme'
The following object is masked from 'package:dplyr':

    collapse
# Datos (mismos que en Newton-Raphson)
set.seed(999); num <- 100
x <- arima.sim(n = num + 1, list(ar = .8), sd = 1)
y <- ts(x[-1] + rnorm(num, 0, 1))

# Estimadores iniciales
u  <- ts.intersect(y, stats::lag(y, -1), stats::lag(y, -2))
varu <- var(u); coru <- cor(u)
phi  <- coru[1,3] / coru[1,2]
q    <- (1 - phi^2) * varu[1,2] / phi
r    <- varu[1,1] - q / (1 - phi^2)

# EM (usa funciones tipo EM0, Kfilter0, Ksmooth0 definidas en el libro)
em <- EM(y, A = 1, mu0 = 0, Sigma0 = 2.8, Phi = phi, Q = sqrt(q), R = sqrt(r),
          max.iter = 75, tol = .00001)
iteration    -loglikelihood 
    1          80.06323 
    2          78.91486 
    3          78.69396 
    4          78.56839 
    5          78.47927 
    6          78.40996 
    7          78.35368 
    8          78.30696 
    9          78.2677 
    10          78.23446 
    11          78.20617 
    12          78.18201 
    13          78.1613 
    14          78.14349 
    15          78.12813 
    16          78.11485 
    17          78.10333 
    18          78.09331 
    19          78.08456 
    20          78.07689 
    21          78.07015 
    22          78.06421 
    23          78.05895 
    24          78.05428 
    25          78.05011 
    26          78.04637 
    27          78.04302 
    28          78.04 
    29          78.03726 
    30          78.03477 
    31          78.03251 
    32          78.03044 
    33          78.02853 
    34          78.02678 
    35          78.02517 
    36          78.02367 
    37          78.02228 
    38          78.02099 
    39          78.01978 
    40          78.01865 
    41          78.0176 
    42          78.0166 
    43          78.01567 
    44          78.01478 
    45          78.01395 
    46          78.01316 
    47          78.01241 
# Cálculo de errores estándar con Hessiano numérico
phi  <- em$Phi
cq   <- sqrt(em$Q)
cr   <- sqrt(em$R)
mu0  <- em$mu0
Sigma0 <- em$Sigma0
para <- c(phi, cq, cr)

Linn <- function(para){
  kf <- Kfilter(y, 1, mu0, Sigma0, para[1], para[2], para[3])
  return(kf$like)
}

emhess <- fdHess(para, function(para) Linn(para))
SE <- sqrt(diag(solve(emhess$Hessian)))

cbind(estimate = c(para, em$mu0, em$Sigma0),
      SE = c(SE, NA, NA))
        estimate         SE
[1,]  0.80770475 0.07827525
[2,]  0.85642590 0.16295337
[3,]  0.86107346 0.13644243
[4,] -2.10378197         NA
[5,]  0.03807792         NA

Este ejemplo muestra que el EM converge más lento que Newton–Raphson (59 iteraciones, según el texto), pero lleva prácticamente al mismo punto de máximo.

6.4.5 Distribución asintótica y estado estable

6.4.5.1 Estabilidad del filtro

Si el modelo es invariante en el tiempo (\(A_t=A\)) y los autovalores de \(\Phi\) están dentro del círculo unitario, el filtro de Kalman entra en estado estable:

  • \(P_t^{t} \to P\),
  • \(K_t \to K\),
  • \(\Sigma_t \to \Sigma = A P A' + R\).

cuando \(t \to \infty\).

En ese caso el modelo puede escribirse en la forma de innovaciones en estado estable: \[ x_{t+1}^t = \Phi x_t^{t-1} + \Phi K \epsilon_t, \tag{6.72} \] \[ y_t = A x_t^{t-1} + \epsilon_t, \tag{6.73} \] con \(\epsilon_t \sim \text{iid } N(0, \Sigma)\).

6.4.5.2 Resultado asintótico

Bajo condiciones generales (identificabilidad, estabilidad del filtro, dimensión mínima del modelo, etc.), el estimador de máxima verosimilitud \(\widehat{\Theta}_n\) basado en la verosimilitud de innovaciones satisface: \[ \sqrt{n}(\widehat{\Theta}_n - \Theta_0) \overset{d}{\longrightarrow} N\big(0, \mathcal{I}(\Theta_0)^{-1} \big), \] donde $$ () = _{n } n^{-1} $$

es la matriz de información asociada a la verosimilitud de innovaciones. En la práctica, al final del Newton–Raphson o del EM se usa el Hessiano numérico de \(-\ln L_Y(\widehat{\Theta})\) para aproximar \(n\mathcal{I}(\Theta_0)\) y de ahí obtener errores estándar.

# Esquema genérico para errores estándar luego de estimar por Newton/EM
hess <- est$hessian  # o el que salga de fdHess
Ihat <- hess         # aproximación de n * I(Theta0)
SE   <- sqrt(diag(solve(Ihat)))
SE
[1] 0.08060636 0.17528895 0.14293192

Este resultado justifica el uso de intervalos de confianza y pruebas de hipótesis estándar sobre los parámetros estimados en modelos de espacio de estados lineales gaussianos.

6.5 Datos Faltantes

Se presentan modificaciones del modelo de espacio de estados lineal gaussiano para manejar observaciones faltantes o muestreo irregular. Se detalla cómo mantener la forma del filtro de Kalman y de la verosimilitud de innovaciones mediante sustituciones que preservan una ecuación de observación de dimensión fija. Luego se adapta el algoritmo EM para la estimación por máxima verosimilitud con datos faltantes. Finalmente, se ilustra con un ejemplo biomédico multivariado y su código en R.

6.5.1 Partición de observaciones y estructura de covarianzas

Sea \(y_t\in\mathbb{R}^q\) y, en el tiempo \(t\), particione: \[ \binom{y_{t}^{(1)}}{y_{t}^{(2)}}=\begin{bmatrix} A_{t}^{(1)} \\ A_{t}^{(2)} \end{bmatrix}x_t+\binom{v_{t}^{(1)}}{v_{t}^{(2)}} . \]

La covarianza de los errores de medición entre partes observadas y no observadas es: \[ \operatorname{cov}\binom{v_{t}^{(1)}}{v_{t}^{(2)}}=\begin{bmatrix} R_{11t} & R_{12t} \\ R_{21t} & R_{22t} \end{bmatrix}. \]

6.5.2 Modelo con datos faltantes y dimensión variable

Cuando \(y_t^{(2)}\) no se observa, el DLM se puede reescribir como \[ x_t=\Phi x_{t-1}+w_t \quad \text{y} \quad y_t^{(1)}=A_t^{(1)}x_t+v_t^{(1)}. \] Si no hay observaciones en \(t\), se fija \(K_t=0_{p\times q}\) y entonces \(x_t^{t}=x_t^{t-1}\) y \(P_t^{t}=P_t^{t-1}\).

6.5.3 Sustituciones para mantener dimensión fija \(q\)

Es más conveniente computacionalmente conservar la dimensión \(q\) usando: \[ y_{(t)}=\binom{y_t^{(1)}}{0},\quad A_{(t)}=\begin{bmatrix} A_t^{(1)} \\ 0 \end{bmatrix},\quad R_{(t)}=\begin{bmatrix} R_{11t} & 0\\ 0 & I_{22t} \end{bmatrix}, \] y, con estas sustituciones, las innovaciones cumplen que: \[ \epsilon_{(t)}=\binom{\epsilon_t^{(1)}}{0},\quad \Sigma_{(t)}= \begin{bmatrix} A_t^{(1)}P_t^{t-1}A_t^{(1)'}+R_{11t} & 0 \\ 0 & I_{22t} \end{bmatrix}. \]

6.5.4 Suavizado con datos faltantes

Los estimadores del estado con datos faltantes son \[ x_t^{(s)}=\mathrm{E}\left(x_t\mid y_1^{(1)},\ldots,y_s^{(1)}\right), \] con matriz de error \[ P_t^{(s)}=\mathrm{E}\left\{(x_t-x_t^{(s)})(x_t-x_t^{(s)})'\right\}. \] Las covarianzas lag-uno suavizadas se denotan \(P_{t,t-1}^{(n)}\).

6.5.5 Algoritmo EM con datos faltantes: E-step

Considere como datos incompletos los datos observados: \[ y_{1:n}^{(1)}=\{y_1^{(1)},\ldots,y_n^{(1)}\}, \] y como datos completos \(\{x_{0:n},y_{1:n}\}\). En la iteración \(j\) se evalúa: \[ \begin{aligned} Q(\Theta\mid \Theta^{(j-1)})&=\mathrm{E}\left\{-2\ln L_{X,Y}(\Theta)\mid y_{1:n}^{(1)},\Theta^{(j-1)}\right\}\\ &=\mathrm{E}_*\left\{\ln|\Sigma_0|+\operatorname{tr}\big[\Sigma_0^{-1}(x_0-\mu_0)(x_0-\mu_0)'\big]\mid y_{1:n}^{(1)}\right\}\\ &\quad+\mathrm{E}_*\left\{n\ln|Q|+\sum_{t=1}^n \operatorname{tr}\big[Q^{-1}(x_t-\Phi x_{t-1})(x_t-\Phi x_{t-1})'\big]\mid y_{1:n}^{(1)}\right\} \\ &\quad+\mathrm{E}_*\left\{n\ln|R|+\sum_{t=1}^n \operatorname{tr}\big[R^{-1}(y_t-A_tx_t)(y_t-A_tx_t)'\big]\mid y_{1:n}^{(1)}\right\}, \end{aligned} \] donde \(\mathrm{E}_*\) usa \(\Theta^{(j-1)}\). Los primeros dos términos son iguales a los del caso sin datos faltantes, pero el tercero requiere calcular términos adicionales que incluyen a \(E_*(y_t^{(2)}|y_{1:n}^{(1)})\) y \(E_*(y_t^{(2)}y_t^{(2)'}|y_{1:n}^{(1)})\). El desarrollo del tercer término puede ser consultado en el libro.

6.5.6 Algoritmo EM con datos faltantes: M-step

Defina \[ S_{(11)}=\sum_{t=1}^n \big(x_t^{(n)}x_t^{(n)'}+P_t^{(n)}\big), \] \[ S_{(10)}=\sum_{t=1}^n \big(x_t^{(n)}x_{t-1}^{(n)'}+P_{t,t-1}^{(n)}\big), \] \[ S_{(00)}=\sum_{t=1}^n \big(x_{t-1}^{(n)}x_{t-1}^{(n)'}+P_{t-1}^{(n)}\big). \]

donde los suavizadores se calculan usando los parámetros \(\Theta^{(j-1)}\) y la modificación del modelo de espacio-estado. Las actualizaciones en la iteración \(j\) son \[ \Phi^{(j)}=S_{(10)}S_{(00)}^{-1}, \]

\[ Q^{(j)}=n^{-1}\left(S_{(11)}-S_{(10)}S_{(00)}^{-1}S_{(10)}'\right), \] y \[ \begin{aligned} R^{(j)}=n^{-1}\sum_{t=1}^n \Big\{& (y_{(t)}-A_{(t)}x_t^{(n)})(y_{(t)}-A_{(t)}x_t^{(n)})'\\ &\quad+ A_{(t)}P_t^{(n)}A_{(t)}' + \begin{pmatrix}0&0\\0&R_{22t}^{(j-1)}\end{pmatrix}\Big\}. \end{aligned} \]

en donde en este último caso solamente se actualiza \(R_{11t}\). Las estimaciones iniciales se actualizan como \[ \mu_0^{(j)}=x_0^{(n)}, \qquad \Sigma_0^{(j)}=P_0^{(n)}. \]

6.5.6.1 Ejemplo: Datos biomédicos longitudinales (faltantes)

Con muchos valores faltantes después del día 37, el EM converge en 65 iteraciones. La matriz de transición estimada indica acoplamiento débil entre la primera y segunda series, y una fuerte relación de HCT con las dos primeras: \[ \mathbf{H}\hat{\mathbf{C}}\mathbf{T}_t=-1.27\mathbf{WBC}_{t-1}+1.97\mathbf{PLT}_{t-1}+0.82\mathbf{HCT}_{t-1}. \] Los valores suavizados \(\hat{x}_t^{(n)}\) y las bandas \(\pm 2\sqrt{\hat{P}_t^{(n)}}\) proporcionan trayectorias y márgenes de error.

y = blood # missing values are NA
num = nrow(y)
A = array(diag(1,3), dim=c(3,3,num)) # measurement matrices
for (k in 1:num) if (is.na(y[k,1])) A[,,k] = diag(0,3)

# Initial values
mu0 = matrix(0,3,1)
Sigma0 = diag(c(.1,.1,1) ,3)
Phi = diag(1, 3)
Q = diag(c(.01,.01,1), 3)
R = diag(c(.01,.01,1), 3)

# Run EM
(em = EM(y, A, mu0, Sigma0, Phi, Q, R)) # partial output shown
iteration    -loglikelihood 
    1          68.28328 
    2          -183.9361 
    3          -194.2051 
    4          -197.5444 
    5          -199.7442 
    6          -201.6431 
    7          -203.4226 
    8          -205.1253 
    9          -206.7595 
    10          -208.3251 
    11          -209.8209 
    12          -211.2464 
    13          -212.602 
    14          -213.8891 
    15          -215.1094 
    16          -216.2651 
    17          -217.3589 
    18          -218.3931 
    19          -219.3705 
    20          -220.2935 
    21          -221.1649 
    22          -221.9869 
    23          -222.762 
    24          -223.4924 
    25          -224.1805 
    26          -224.8282 
    27          -225.4377 
    28          -226.0109 
    29          -226.5495 
    30          -227.0555 
    31          -227.5305 
    32          -227.9762 
    33          -228.3941 
    34          -228.7857 
    35          -229.1524 
    36          -229.4956 
    37          -229.8166 
    38          -230.1166 
    39          -230.3967 
    40          -230.6582 
    41          -230.9019 
    42          -231.1289 
    43          -231.3402 
    44          -231.5366 
    45          -231.719 
    46          -231.8881 
    47          -232.0447 
    48          -232.1895 
    49          -232.3232 
    50          -232.4463 
    51          -232.5595 
    52          -232.6633 
    53          -232.7582 
    54          -232.8448 
    55          -232.9233 
    56          -232.9944 
    57          -233.0583 
    58          -233.1155 
    59          -233.1663 
    60          -233.2111 
    61          -233.2501 
    62          -233.2837 
    63          -233.3121 
    64          -233.3357 
    65          -233.3545 
$Phi
            [,1]        [,2]        [,3]
[1,]  0.98395673 -0.03975976 0.008688178
[2,]  0.05726606  0.92656284 0.006023044
[3,] -1.26586174  1.96500888 0.820475630

$Q
             [,1]         [,2]       [,3]
[1,]  0.013786286 -0.001974193 0.01147321
[2,] -0.001974193  0.002796296 0.02685780
[3,]  0.011473214  0.026857800 3.33355946

$R
           [,1]       [,2]      [,3]
[1,] 0.00694027 0.00000000 0.0000000
[2,] 0.00000000 0.01707764 0.0000000
[3,] 0.00000000 0.00000000 0.9389751

$mu0
          [,1]
[1,]  2.137368
[2,]  4.417385
[3,] 25.815731

$Sigma0
              [,1]          [,2]          [,3]
[1,]  2.910997e-04 -4.161189e-05  0.0002346656
[2,] -4.161189e-05  1.923713e-04 -0.0002854434
[3,]  2.346656e-04 -2.854434e-04  0.1052641500

$like
 [1]   68.28328 -183.93608 -194.20508 -197.54440 -199.74425 -201.64313
 [7] -203.42258 -205.12530 -206.75951 -208.32511 -209.82091 -211.24639
[13] -212.60202 -213.88906 -215.10935 -216.26514 -217.35887 -218.39311
[19] -219.37048 -220.29354 -221.16485 -221.98686 -222.76196 -223.49243
[25] -224.18049 -224.82824 -225.43771 -226.01085 -226.54953 -227.05552
[31] -227.53054 -227.97621 -228.39410 -228.78569 -229.15242 -229.49563
[37] -229.81661 -230.11659 -230.39674 -230.65816 -230.90189 -231.12893
[43] -231.34021 -231.53662 -231.71899 -231.88811 -232.04473 -232.18954
[49] -232.32321 -232.44634 -232.55954 -232.66333 -232.75824 -232.84475
[55] -232.92332 -232.99437 -233.05831 -233.11551 -233.16633 -233.21110
[61] -233.25013 -233.28372 -233.31215 -233.33567 -233.35454

$niter
[1] 65

$cvg
[1] 8.086056e-05
diag(em$R)
[1] 0.00694027 0.01707764 0.93897512
# Run smoother at the estimates
sQ = em$Q %^%  .5   # matrix square root (elementwise shown como en el texto)
sR = sqrt(em$R)
ks = Ksmooth(y, A, em$mu0, em$Sigma0, em$Phi, sQ, sR)

# Pull out the values
y1s = ks$Xs[1,,]
y2s = ks$Xs[2,,]
y3s = ks$Xs[3,,]
p1 = 2*sqrt(ks$Ps[1,1,])
p2 = 2*sqrt(ks$Ps[2,2,])
p3 = 2*sqrt(ks$Ps[3,3,])

# plots
par(mfrow=c(3,1))
tsplot(WBC, type="p", pch=19, ylim=c(1,5), col=6, lwd=2, cex=1)
    lines(y1s)
    xx = c(time(WBC), rev(time(WBC))) # same for all
    yy = c(y1s-p1, rev(y1s+p1))
    polygon(xx, yy, border=8, col=astsa.col(8, alpha = .1))
tsplot(PLT, type="p", ylim=c(3,6), pch=19, col=4, lwd=2, cex=1)
    lines(y2s)
    yy = c(y2s-p2, rev(y2s+p2))
    polygon(xx, yy, border=8, col=astsa.col(8, alpha = .1))
tsplot(HCT, type="p", pch=19, ylim=c(20,40), col=2, lwd=2, cex=1)
    lines(y3s)
    yy = c(y3s-p3, rev(y3s+p3))
    polygon(xx, yy, border=8, col=astsa.col(8, alpha = .1))

6.6 Modelos Estructurales

Los modelos estructurales descomponen una serie temporal en componentes con interpretación directa (tendencia, estacionalidad y ruido). Se integran naturalmente al marco de espacio de estados, lo que facilita la extracción de señal (filtro/suavizador de Kalman) y el pronóstico. Se ilustra con las utilidades trimestrales de Johnson & Johnson, donde se modelan tendencia creciente y estacionalidad trimestral.

6.6.1 Modelo estructural y componentes

Usamos como datos para motivar el modelo estructural, los datos de Johnson y Johnson:

data(jj)
plot(jj, main="Utilidades trimestrales de Johnson & Johnson", ylab="Utilidades (millones de $)")

Sea la serie observada \[ \begin{equation*} y_{t}=T_{t}+S_{t}+v_{t}, \end{equation*} \] donde \(T_t\) es la tendencia, \(S_t\) la estacionalidad y \(v_t\) ruido blanco. Se asume tendencia con crecimiento exponencial: \[ \begin{equation*} T_{t}=\phi T_{t-1}+w_{t1}, \end{equation*} \] con \(\phi>1\). Para la estacionalidad trimestral: \[ \begin{equation*} S_{t}+S_{t-1}+S_{t-2}+S_{t-3}=w_{t2}. \end{equation*} \]

6.6.2 Formulación como modelo de espacio-estado

Defina el estado \(x_t=\left(T_t,S_t,S_{t-1},S_{t-2}\right)'\).

Ecuación de observación: \[ y_t=\begin{pmatrix}1&1&0&0\end{pmatrix} \begin{pmatrix}T_t\\ S_t\\ S_{t-1}\\ S_{t-2}\end{pmatrix}+v_t. \]

Ecuación de estado: \[ \begin{pmatrix} T_t\\ S_t\\ S_{t-1}\\ S_{t-2} \end{pmatrix} = \begin{pmatrix} \phi & 0 & 0 & 0\\ 0 & -1 & -1 & -1\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} T_{t-1}\\ S_{t-1}\\ S_{t-2}\\ S_{t-3} \end{pmatrix} + \begin{pmatrix} w_{t1}\\ w_{t2}\\ 0\\ 0 \end{pmatrix}. \]

Varianzas/covarianzas: \[ R=r_{11},\qquad Q= \begin{pmatrix} q_{11}&0&0&0\\ 0&q_{22}&0&0\\ 0&0&0&0\\ 0&0&0&0 \end{pmatrix}. \]

Por lo tanto el modelo planteado es de espacio-estado con \(p=4\), \(q=1\).

Parámetros e inicialización

Parámetros a estimar: \(r_{11}\), \(q_{11}\), \(q_{22}\) y \(\phi\). Se parte de crecimiento anual cercano a \(3%\) con \(\phi=1.03\). Media inicial \(\mu_0=(.7,0,0,0)'\) y covarianza inicial diagonal con \(\Sigma_{0ii}=.04\) (\(i=1,\dots,4\)). Valores iniciales: \(q_{11}=.01\), \(q_{22}=.01\), \(r_{11}=.25\).

6.6.3 Resultados de estimación y extracción de señal

Tras ~20 iteraciones (Newton–Raphson), \(\hat{\phi}=1.035\) (crecimiento \(\approx 3.5%\) anual). Incertidumbre de medición pequeña: \(\sqrt{\hat r_{11}}=.0005\) frente a las incertidumbres de modelo \(\sqrt{\hat q_{11}}=.1397\) y \(\sqrt{\hat q_{22}}=.2209\). Se obtienen los estimadores suavizados \(T_t^{n}\) y \(S_t^{n}\) (con bandas de error RMS ×3), mostrando tendencia creciente y estacionalidad que aumenta con el tiempo.

6.6.4 Pronóstico

Se realiza un pronóstico a 12 trimestres, esencialmente continuando la dinámica reciente de la serie (extensión de los últimos datos observados) usando la forma de innovaciones y la propagación del estado/covarianza.

6.6.5 Código R: estimación por máxima verosimilitud y suavizado

A = cbind(1,1,0,0) # measurement matrix
# Function to Calculate Likelihood
Linn = function(para){
    Phi = diag(0,4)
    Phi [1,1] = para[1]
    Phi [2,]=c(0,-1,-1,-1); Phi [3,]=c(0,1,0,0); Phi [4,]=c(0,0,1,0)
    sQ1 = para[2]; sQ2 = para[3] # sqrt q11 and sqrt q22
    sQ = diag(0,4); sQ[1,1]=sQ1; sQ[2,2]=sQ2
    sR = para[4] # sqrt r11
    kf = Kfilter(jj, A, mu0, Sigma0, Phi, sQ, sR)
    return(kf$like)
    }
# Initial Parameters
mu0 = c(.7,0,0,0)
Sigma0 = diag(.04, 4)
init.par = c(1.03, .1, .1, .5) # Phi[1,1], the 2 sQs and sR
# Estimation
est = optim(init.par, Linn, NULL, method="BFGS", hessian=TRUE,
        control=list(trace=1,REPORT=1))
initial  value 2.693644 
iter   2 value -0.853526
iter   3 value -9.416505
iter   4 value -10.241752
iter   5 value -19.419809
iter   6 value -30.441188
iter   7 value -31.825543
iter   8 value -32.248413
iter   9 value -32.839918
iter  10 value -33.019870
iter  11 value -33.041749
iter  12 value -33.050583
iter  13 value -33.055492
iter  14 value -33.078152
iter  15 value -33.096870
iter  16 value -33.098405
iter  17 value -33.099018
iter  18 value -33.099385
iter  19 value -33.099498
iter  19 value -33.099498
final  value -33.099498 
converged
SE = sqrt(diag(solve(est$hessian)))
u = cbind(estimate=est$par, SE)
rownames(u)=c("Phi11","sigw1","sigw2","sigv")
# Smooth
Phi = diag(0,4)
Phi [1,1] = est$par[1]; Phi [2,] = c(0,-1,-1,-1)
Phi [3,] = c(0,1,0,0); Phi [4,] = c(0,0,1,0)
sQ = diag(0,4)
sQ[1,1] = est$par[2]
sQ[2,2] = est$par[3]
sR = est$par[4]
ks = Ksmooth(jj, A, mu0, Sigma0, Phi, sQ, sR)
# Plots
Tsm = ts(ks$Xs[1,,], start=1960, freq=4)
Ssm = ts(ks$Xs[2,,], start=1960, freq=4)
p1 = 3*sqrt(ks$Ps[1,1,]); p2 = 3*sqrt(ks$Ps[2,2,])
par(mfrow=c(2,1))
tsplot(Tsm, main="Trend Component", ylab="", col=4)
    xx = c(time(jj), rev(time(jj)))
    yy = c(Tsm-p1, rev(Tsm+p1))
    polygon(xx, yy, border=NA, col=gray(.5, alpha = .3))
tsplot(Ssm, main="Seasonal Component", ylab="", col=4)
        xx = c(time(jj), rev(time(jj)) )
        yy = c(Ssm-p2, rev(Ssm+p2))
    polygon(xx, yy, border=NA, col=gray(.5, alpha = .3))

6.6.6 Código R: pronóstico a 12 trimestres

# Forecasts
n.ahead = 12
num = length(jj)
Xp = ks$Xf[,,num]
Pp = as.matrix(ks$Pf[,,num])
y = c(jj[num])
rmspe = c(0)
for (m in 1:n.ahead){
        kf = Kfilter(y[m], A, mu0=Xp, Sigma0=Pp, Phi, sQ, sR)
        Xp = kf$Xp[,,1]
        Pp = as.matrix(kf$Pp[,,1])
        sig = A%*%Pp%*%t(A) + sR^2
        y[m] = A%*%Xp
        rmspe[m] = sqrt(sig)
    }
y = ts(append(jj, y), start=1960, freq=4)
# plot
tsplot(window(y, start=1975), type="o", main="", ylab="J&J QE/Share", col=4,
        ylim=c(5,26))
    lines(window(y, start=1981), type="o", col=6)
    upp = window(y, start=1981)+3*rmspe
    low = window(y, start=1981)-3*rmspe
        xx = c(time(low), rev(time(upp)))
        yy = c(low, rev(upp))
    polygon(xx, yy, border=NA, col=gray(.6, alpha = .2))

6.7 Modelos de espacio-estado con errores correlacionados

Se estudia una formulación del modelo de espacio de estados que permite correlación contemporánea entre el ruido del estado y el ruido de observación. Con esta formulación se obtienen expresiones de filtro y predicción y se muestran aplicaciones a ARMAX y a regresión multivariante con errores autocorrelados. Se proporciona una forma general en estado para ARMAX, un ejemplo univariante ARMAX(1,1), y un estudio aplicado sobre mortalidad semanal con temperatura y contaminación, incluyendo código de estimación mediante filtro de Kalman y comparaciones con enfoques preliminares.

6.7.1 Modelo de espacio de estados con errores correlacionados

Es ventajoso escribir el modelo como \[ \begin{equation*} x_{t+1}=\Phi x_{t}+\Upsilon u_{t+1}+w_{t} \quad t=0,1, \ldots, n \end{equation*} \]

\[ \begin{equation*} y_{t}=A_{t} x_{t}+\Gamma u_{t}+v_{t} \quad t=1, \ldots, n \end{equation*} \]

con \(x_{0}\sim \mathrm{N}_{p}(\mu_{0},\Sigma_{0})\), \(w_t\sim \text{iid }\mathrm{N}_{p}(0,Q)\), \(v_t\sim \text{iid }\mathrm{N}_{q}(0,R)\), y ruidos correlacionados en tiempo \(t\): \[ \begin{equation*} \operatorname{cov}\left(w_{s}, v_{t}\right)=S \delta_{s}^{t}. \end{equation*} \] donde \(\delta_s^t\) es una delta de Kronecker. La diferencia respecto al modelo de espacio-estado originalmente definido es que el ruido de estado inicia en \(t=0\) para manejar la covarianza concurrente entre \(w_t\) y \(v_t\).

Para obtener innovaciones \(\epsilon_t=y_t-A_t x_t^{t-1}-\Gamma u_t\) y su varianza \(\Sigma_t=A_t P_t^{t-1}A_t'+R\), se requieren los predictores un paso adelante y las actualizaciones filtradas.

6.7.2 Propiedad: Filtro de Kalman con ruido correlacionado

Para el modelo de espacio-estado correlacionado, con condiciones iniciales \(x_{1}^{0}\) y \(P_{1}^{0}\), para \(t=1,\ldots,n\): \[ \begin{gather*} x_{t+1}^{t}=\Phi x_{t}^{t-1}+\Upsilon u_{t+1}+K_{t} \epsilon_{t} \\ P_{t+1}^{t}=\Phi P_{t}^{t-1} \Phi^{\prime}+Q-K_{t} \Sigma_{t} K_{t}^{\prime} \end{gather*} \] donde \(\epsilon_t=y_t-A_t x_t^{t-1}-\Gamma u_t\) y la ganancia es \[ \begin{equation*} K_{t}=\left[\Phi P_{t}^{t-1} A_{t}^{\prime}+S\right]\left[A_{t} P_{t}^{t-1} A_{t}^{\prime}+R\right]^{-1}. \end{equation*} \] Los valores filtrados son \[ \begin{gather*} x_{t}^{t}=x_{t}^{t-1}+P_{t}^{t-1} A_{t}^{\prime}\left[A_{t} P_{t}^{t-1} A_{t}^{\prime}+R\right]^{-1} \epsilon_{t} \\ P_{t}^{t}=P_{t}^{t-1}-P_{t}^{t-1} A_{t+1}^{\prime}\left[A_{t} P_{t}^{t-1} A_{t}^{\prime}+R\right]^{-1} A_{t} P_{t}^{t-1}. \end{gather*} \] Con la siguiente inicialización del filtro: \[ x_{1}^{0}=\mathrm{E}(x_1)=\Phi \mu_{0}+\Upsilon u_{1},\quad P_{1}^{0}=\operatorname{var}(x_1)=\Phi \Sigma_{0}\Phi'+Q. \]

6.7.3 Modelos ARMAX y su forma en espacio de estados

Modelo ARMAX \(k\)-dimensional: \[ \begin{equation*} y_{t}=\Gamma u_{t}+\sum_{j=1}^{p} \Phi_{j} y_{t-j}+\sum_{k=1}^{q} \Theta_{k} v_{t-k}+v_{t}. \end{equation*} \]

Propiedad: Una forma en espacio de estados para ARMAX

Para \(p\ge q\), defina \[ F=\left[\begin{array}{ccccc} \Phi_{1} & I & 0 & \cdots & 0 \\ \Phi_{2} & 0 & I & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \Phi_{p-1} & 0 & 0 & \cdots & I \\ \Phi_{p} & 0 & 0 & \cdots & 0 \end{array}\right],\quad G=\left[\begin{array}{c} \Theta_{1}+\Phi_{1} \\ \vdots \\ \Theta_{q}+\Phi_{q} \\ \Phi_{q+1} \\ \vdots \\ \Phi_{p} \end{array}\right],\quad H=\left[\begin{array}{c} \Gamma \\ 0 \\ \vdots \\ 0 \end{array}\right], \] donde \(F\) es \(kp\times kp\), \(G\) es \(kp\times k\) y \(H\) es \(kp\times r\). Entonces \[ \begin{align*} x_{t+1} & =F x_{t}+H u_{t+1}+G v_{t} \\ y_{t} & =A x_{t}+v_{t}, \end{align*} \] con \(A=[I,0,\ldots,0]\) (\(k\times pk\)), implica el modelo ARMAX recién definido. Si \(p<q\), tome \(\Phi_{p+1}=\cdots=\Phi_q=0\) para que \(p=q\) y que el modelo de espacio-estado aplique. El estado es \(kp\)-dimensional y la observación \(k\)-dimensional.

6.7.3.1 Ejemplo: ARMAX(1,1) univariante en forma de estado

Considere \(\operatorname{ARMAX}(1,1)\): \[ y_{t}=\alpha_{t}+\phi y_{t-1}+\theta v_{t-1}+v_{t},\quad \alpha_t=\Gamma u_t. \] Por la propiedad anterior: \[ \begin{gather*} x_{t+1}=\phi x_{t}+\alpha_{t+1}+(\theta+\phi) v_{t} \\ y_{t}=x_{t}+v_{t}. \end{gather*} \] ver la página 348 del libro para detalles de la verificación directa.

6.7.4 Regresión multivariante con errores autocorrelacionados

Se ajusta \[ \begin{equation*} y_{t}=\Gamma u_{t}+\varepsilon_{t}, \end{equation*} \] donde \(y_t\) es \(k\times 1\), \(u_t\in\mathbb{R}^r\) y \(\varepsilon_t\) es ARMA\((p,q)\) vectorial. Como \(\varepsilon_t=y_t-\Gamma u_t\) es ARMA\((p,q)\), tomando \(H=0\) y agregando \(\Gamma u_t\) en la formulación del modelo de espacio-estado: \[ \begin{align*} x_{t+1} & =F x_{t}+G v_{t}, \\ y_{t} & =\Gamma u_{t}+A x_{t}+v_{t}, \ \end{align*} \] donde \(A,F,G\) provienen de la definición del modelo de espacio-estado anterior. Así, \(\varepsilon_t=y_t-\Gamma u_t\) es ARMA\((p,q)\) vectorial.