Stima dei parametri LogLikelihood per il filtro Kalman gaussiano lineare


13

Ho scritto un codice in grado di eseguire il filtraggio di Kalman (utilizzando un numero di diversi filtri di tipo Kalman [Information Filter et al.]) Per l'analisi dello spazio di stato gaussiano lineare per un vettore di stato n-dimensionale. I filtri funzionano alla grande e sto ottenendo un bel risultato. Tuttavia, la stima dei parametri tramite la stima della responsabilità civile mi confonde. Non sono uno statistico ma un fisico, quindi per favore sii gentile.

Consideriamo il modello lineare dello spazio statale gaussiano

yt=Ztαt+ϵt,
αt+1=Ttαt+Rtηt,

dove yt è il nostro vettore di osservazione, αt nostro vettore di stato nella fase temporale t . Le quantità in grassetto sono le matrici di trasformazione del modello dello spazio degli stati che sono impostate in base alle caratteristiche del sistema in esame. Abbiamo anche

ϵtNID(0,Ht),
ηtNID(0,Qt),
α1NID(a1,P1).

dove . Ora, ho derivato e implementato la ricorsione per il filtro Kalman per questo modello di spazio di stato generico indovinando i parametri iniziali e le matrici di varianza H 1 e Q 1 che posso produrre grafici comet=1,,nH1Q1

Filtro Kalman

dove i punti sono i livelli delle acque del Nilo per gennaio per oltre 100 anni, la linea è lo stato stimato di Kalamn e le linee tratteggiate sono i livelli di confidenza del 90%.

Ora, per questo set di dati 1D le matrici e Q t sono rispettivamente solo scalari σ ϵ e σ η . Quindi ora voglio ottenere i parametri corretti per questi scalari usando l'output del filtro Kalman e la funzione loglikelihoodHtQtσϵση

logL(Yn)=np2log(2π)12t=1n(log|Ft|+vtTFt1vt)

Dove è l'errore di stato e F t è la varianza dell'errore di stato. Ora, ecco dove sono confuso. Dal filtro di Kalman, ho tutte le informazioni di cui ho bisogno per capire L , ma questo non mi sembra più vicino a poter calcolare la massima probabilità di σ ϵ e σ η . La mia domanda è come posso calcolare la massima verosimiglianza di σ ϵ e σ η usando l'approccio loglikelihood e l'equazione sopra? Una rottura algoritmica sarebbe come una birra fredda per me in questo momento ...vtFtLσϵσησϵση

Grazie per il tuo tempo.


Nota. Per il caso 1D e H t = σ 2 η . Questo è il modello univariato a livello locale.Ht=σϵ2Ht=ση2

Risposte:


11

Quando esegui il filtro Kalman come hai, con i valori indicati di e σ 2 η , ottieni una sequenza di innovazioni ν t e le loro covarianze F t , quindi puoi calcolare il valore del log L ( Y n )σϵ2ση2νtFtlogL(Yn) usando la formula che dai.

In altre parole, puoi considerare il filtro Kalman come un modo per calcolare una funzione implicita di e σ 2 η . L'unica cosa che devi fare quindi è impacchettare questo calcolo in una funzione o subroutine e gestire quella funzione in una routine di ottimizzazione - come in R. Quella funzione dovrebbe accettare come input σ 2 ϵ e σ 2 η e restituire il registro L ( Y n ) .σϵ2ση2optimσϵ2ση2logL(Yn)

Alcuni pacchetti in R (ad es. dlm) Lo fanno per te (vedi ad esempio la funzione dlmMLE).


Grazie per la tua risposta. Apprezzo che sembro avere tutti i componenti richiesti per calcolare esplicitamente la loglikelihood, tuttavia tutti i riferimenti che ho sembrano suggerire che io uso e σ η come incognite nella funzione loglikelihood e massimizzare questo usando un metodo di tipo Newton? Questo è ciò che mi confonde; "La loglikelihood è massimizzata numericamente rispetto al vettore di stato sconosciuto" - come? σϵση
MoonKnight,

Il calcolo della probabilità non è così esplicito, in quanto e σ η non compaiono esplicitamente nell'espressione del log L ( Y n ) . Piuttosto, influenzano la probabilità tramite ν t e F t . Pertanto, è necessario eseguire il filtro Kalman per calcolare il log L ( Y n ) per ogni coppia di valori di σ ϵ e σ η . Una volta che lo codifichi sotto forma di una funzione, la gestisci con una funzione di ottimizzazione di tipo Newton (o qualsiasi altra funzione generica) e il gioco è fatto.σϵσηlogL(Yn)νtFtlogL(Yn)σϵση
F. Tusell,

1
Mi capita di avere un codice dettagliato (in R) che mostra come farlo esattamente per i dati del Nilo. Lo uso come illustrazione per i miei studenti. Purtroppo è in spagnolo, ma spero che il codice sia abbastanza chiaro (e posso tradurre i commenti in caso contrario). Puoi prendere questo esempio da et.bs.ehu.es/~etptupaf/N4.html .
F. Tusell,

Questo è di grande aiuto. Grazie mille per il tuo tempo. Il tuo commento ha aiutato molto! A volte è difficile "vedere il bosco per gli alberi" e avere qualcosa di semplice spiegato esplicitamente è tutto ciò che serve ... Grazie ancora.
MoonKnight,

Vorrei anche chiedere se potevo dare un'occhiata alla pagina in cui si passa attraverso la ricorsione dello stato. Il tuo smoothing sembra migliore del mio e non sono sicuro del perché !? Ho tentato di trovarlo dal tuo sito web ma non riesco a trovare la pagina richiesta ...
MoonKnight
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.