Skip to contents

The Viterbi algorithm decodes the most probable state sequence of an HMM.

Usage

viterbi(delta, Gamma, allprobs, trackID = NULL, mod = NULL)

Arguments

delta

initial distribution; either

  • a vector of length nStates, or

  • a matrix of dimension c(nTracks, nStates) if trackID is provided

Gamma

transition probability matrix; either

  • a matrix of dimension c(nStates, nStates),

  • an array of dimension c(nStates, nStates, nTracks) if trackID is provided, or

  • an array of dimension c(nStates, nStates, nObs) for time-varying transition probabilities, in which case viterbi_g is called internally

allprobs

matrix of state-dependent probabilities or density values of dimension c(nObs, nStates)

trackID

optional vector of length nObs containing nTracks unique IDs that separate tracks

mod

optional model object containing delta, Gamma, allprobs, and optionally trackID. When using RTMB::MakeADFun or qreml with forward in the likelihood, these are reported automatically after model fitting and the object returned by RTMB::report() or qreml can be passed directly.

Value

vector of decoded states of length nObs

See also

Examples

delta = c(0.5, 0.5)
Gamma = matrix(c(0.9, 0.1, 0.2, 0.8), nrow = 2, byrow = TRUE)
allprobs = matrix(runif(200), nrow = 100, ncol = 2)
states = viterbi(delta, Gamma, allprobs)