Main Content

Hidden Markov model posterior state probabilities

`PSTATES = hmmdecode(seq,TRANS,EMIS)`

[PSTATES,logpseq] = hmmdecode(...)

[PSTATES,logpseq,FORWARD,BACKWARD,S] = hmmdecode(...)

hmmdecode(...,'Symbols',SYMBOLS)

`PSTATES = hmmdecode(seq,TRANS,EMIS)`

calculates
the posterior state probabilities, `PSTATES`

, of
the sequence `seq`

, from a hidden Markov model. The
posterior state probabilities are the conditional probabilities of
being at state *k* at step *i*,
given the observed sequence of symbols, `sym`

. You
specify the model by a transition probability matrix, `TRANS`

,
and an emissions probability matrix, `EMIS`

. `TRANS(i,j)`

is
the probability of transition from state `i`

to state `j`

. `EMIS(k,seq)`

is
the probability that symbol `seq`

is emitted from
state `k`

.

`PSTATES`

is an array with the same length
as `seq`

and one row for each state in the model.
The (*i*, *j*)th element of `PSTATES`

gives
the probability that the model is in state *i* at
the *j*th step, given the sequence `seq`

.

**Note**

The function `hmmdecode`

begins with the model
in state 1 at step 0, prior to the first emission. `hmmdecode`

computes
the probabilities in `PSTATES`

based on the fact
that the model begins in state 1.

`[PSTATES,logpseq] = hmmdecode(...)`

returns `logpseq`

,
the logarithm of the probability of sequence `seq`

,
given transition matrix `TRANS`

and emission matrix `EMIS`

.

`[PSTATES,logpseq,FORWARD,BACKWARD,S] = hmmdecode(...)`

returns
the forward and backward probabilities of the sequence scaled by `S`

.

`hmmdecode(...,'Symbols',SYMBOLS)`

specifies the symbols that are emitted.
`SYMBOLS`

can be a numeric array, a string array, or a cell array of
the names of the symbols. The default symbols are integers `1`

through
`N`

, where `N`

is the number of possible emissions.

trans = [0.95,0.05; 0.10,0.90]; emis = [1/6 1/6 1/6 1/6 1/6 1/6; 1/10 1/10 1/10 1/10 1/10 1/2]; [seq,states] = hmmgenerate(100,trans,emis); pStates = hmmdecode(seq,trans,emis); [seq,states] = hmmgenerate(100,trans,emis,... 'Symbols',{'one','two','three','four','five','six'}) pStates = hmmdecode(seq,trans,emis,... 'Symbols',{'one','two','three','four','five','six'});

[1] Durbin, R., S. Eddy, A. Krogh, and
G. Mitchison. *Biological Sequence Analysis*.
Cambridge, UK: Cambridge University Press, 1998.