14 votos

Estimación de los parámetros de LogLikelihood para el filtro de Kalman lineal gaussiano

He escrito un código que puede hacer el filtrado de Kalman (utilizando un número de diferentes filtros de tipo Kalman [Filtro de información y otros]) para el análisis del espacio de estado gaussiano lineal para un vector de estado n-dimensional. Los filtros funcionan muy bien y estoy obteniendo unos buenos resultados. Sin embargo, la estimación de los parámetros a través de la estimación de loglikelihood me confunde. No soy un estadístico sino un físico, así que por favor sea amable.

Consideremos el modelo de espacio de estado gaussiano lineal

$$y_t = \mathbf{Z}_{t}\alpha_{t} + \epsilon_{t},$$ $$\alpha_{t + 1} = \mathbf{T}_{t}\alpha_{t} + \mathbf{R}_{t}\eta_{t},$$

donde $y_{t}$ es nuestro vector de observación, $\alpha_{t}$ nuestro vector de estado en el paso de tiempo $t$ . Las cantidades en negrita son las matrices de transformación del modelo de espacio de estados que se establecen en función de las características del sistema considerado. También tenemos

$$\epsilon_{t} \sim NID(0, \mathbf{H}_{t}),$$ $$\eta_{t} \sim NID(0, \mathbf{Q}_{t}),$$ $$\alpha_{1} \sim NID(a_{1}, \mathbf{P}_{1}).$$

donde $t = 1,\ldots, n$ . Ahora, he derivado e implementado la recursión para el filtro de Kalman para este modelo genérico de espacio de estados adivinando los parámetros iniciales y las matrices de varianza $\mathbf{H}_{1}$ y $\mathbf{Q}_{1}$ Puedo producir parcelas como

Kalman Filter

donde los puntos son los niveles de agua del río Nilo para Jan de más de 100 años, la línea es el estado estimado de Kalamn y las líneas discontinuas son los niveles de confianza del 90%.

Ahora, para este conjunto de datos 1D las matrices $\mathbf{H}_{t}$ y $\mathbf{Q}_{t}$ son sólo escalares $\sigma_{\epsilon}$ y $\sigma_{\eta}$ respectivamente. Así que ahora quiero obtener los parámetros correctos para estos escalares utilizando la salida del filtro de Kalman y la función de loglikelihood

$$\log L(Y_{n}) = -\frac{np}{2}\log(2\pi) - \frac{1}{2}\sum^{n}_{t = 1}(log|\mathbf{F}_{t}| + v^{\mathsf{T}}_{t}\mathbf{F}_{t}^{-1}v_{t})$$

Donde $v_{t}$ es el error de estado y $\mathbf{F}_{t}$ es la varianza del error de estado. Ahora, aquí es donde estoy confundido. A partir del filtro de Kalman, tengo toda la información que necesito para calcular $L$ pero parece que esto no me acerca a poder calcular la máxima probabilidad de $\sigma_{\epsilon}$ y $\sigma_{\eta}$ . Mi pregunta es cómo puedo calcular la máxima probabilidad de $\sigma_{\epsilon}$ y $\sigma_{\eta}$ utilizando el enfoque de loglikelihood y la ecuación anterior? Un desglose algorítmico sería como una cerveza fría para mí ahora mismo...

Gracias por su tiempo.


Nota. Para el caso 1D $\mathbf{H}_{t} = \sigma^{2}_{\epsilon}$ y $\mathbf{H}_{t} = \sigma^{2}_{\eta}$ . Este es el modelo de nivel local univariante.

12voto

Zolomon Puntos 250

Cuando se ejecuta el filtro de Kalman como se ha hecho, con los valores dados de $\sigma_\epsilon^2$ y $\sigma^2_\eta$ se obtiene una secuencia de innovaciones $\nu_t$ y sus covarianzas $\boldsymbol{F_t}$ por lo que se puede calcular el valor de $\log L(Y_n)$ utilizando la fórmula que das.

En otras palabras, se puede considerar el filtro de Kalman como una forma de calcular una función implícita de $\sigma_\epsilon^2$ y $\sigma^2_\eta$ . Lo único que hay que hacer entonces es empaquetar este cálculo en una función o subrutina y manejar esa función a una rutina de optimización --como optim en R. Esa función debe aceptar como entradas $\sigma_\epsilon^2$ y $\sigma^2_\eta$ y devolver $\log L(Y_n)$ .

Algunos paquetes en R (por ejemplo dlm ) lo hacen por usted (véase, por ejemplo, la función dlmMLE ).

0 votos

Gracias por su respuesta. Aprecio que parece que tengo todos los componentes requeridos para calcular la loglikelihood explícitamente, sin embargo toda la referencia que tengo parece sugerir que use $\sigma_\epsilon$ y $\sigma_\eta$ como incógnitas en la función de loglikelihood y maximizarla mediante un método de tipo Newton? Esto es lo que me confunde; "la loglikelihood se maximiza numéricamente con respecto al vector de estado desconocido", ¿cómo?

0 votos

El cálculo de la probabilidad no es tan explícito, ya que $\sigma_\epsilon$ y $\sigma_\eta$ no aparecen explícitamente en la expresión de $\log L(Y_n)$ . Más bien, influyen en la probabilidad a través de $\nu_t$ y $\boldsymbol{F_t}$ . Por lo tanto, es necesario ejecutar el filtro de Kalman para calcular $\log L(Y_n)$ para cada par de valores de $\sigma_\epsilon$ y $\sigma_\eta$ . Una vez que codificas eso en forma de función, lo manejas a una función maximizadora de tipo Newton (o cualquier función de propósito general) y ya está.

1 votos

Resulta que tengo un código detallado (en R) que muestra cómo hacer esto precisamente para los datos del Nilo. Lo uso como ilustración para mis estudiantes. Lamentablemente está en español, pero espero que el código sea bastante claro (y puedo traducir los comentarios si no). Puedes coger este ejemplo de et.bs.ehu.es/~etptupaf/N4.html .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X