Viterbi algorithm for state decoding in periodically inhomogeneous HMMs
Viterbi algorithm for state decoding in periodically inhomogeneous HMMs
The Viterbi algorithm allows one to decode the most probable state sequence of an HMM.
viterbi_p(delta, Gamma, allprobs, tod, trackID =NULL, mod =NULL)
Arguments
delta: initial distribution of length N, or matrix of dimension c(k,N) for k independent tracks, if trackID is provided
This could e.g. be the periodically stationary distribution (for each track).
Gamma: array of transition probability matrices for each time point in the cycle of dimension c(N,N,L), where L is the length of the cycle
allprobs: matrix of state-dependent probabilities/ density values of dimension c(n, N)
tod: (Integer valued) variable for cycle indexing in 1, ..., L, mapping the data index to a generalised time of day (length n)
For half-hourly data L = 48. It could, however, also be day of year for daily data and L = 365.
trackID: optional vector of k track IDs, if multiple tracks need to be decoded separately
mod: optional model object containing initial distribution delta, transition probability matrix Gamma, matrix of state-dependent probabilities allprobs, and potentially a trackID variable
If you are using automatic differentiation either with RTMB::MakeADFun or qreml and include forward_p in your likelihood function, the objects needed for state decoding are automatically reported after model fitting. Hence, you can pass the model object obtained from running RTMB::report() or from qreml directly to this function.