# viterbi: Most probable state sequence. In hmm.discnp: Hidden Markov Models with Discrete Non-Parametric Observation Distributions

## Description

Calculates “the” most probable state sequence underlying each of one or more replicate observation sequences.

## Usage

 `1` ```viterbi(y, object = NULL, tpm, Rho, ispd=NULL,log=FALSE) ```

## Arguments

 `y` The observations for which the underlying most probable hidden states are required. May be a sequence of observations, or a list each entry of which constitutes an independent sequence of observations. If `y` is missing (and if `object` is not `NULL`) then `y` is extracted from `object`, provided that the `y` component of `object` is present. Otherwise an error is given. `object` An object describing a hidden Markov model, as fitted to the data set `y` by `hmm()`. `tpm` The transition probability matrix for a hidden Markov model; ignored if `object` is non-null. `Rho` A matrix specifying the probability distributions of the observations for a hidden Markov model; ignored if `object` is non-null. Should bear some reasonable relationship to `y`. If `Rho` has row names then these must include all values of the observations. If `Rho` does not have row names then the values of the observations must be integers between `1` and `nrow(Rho)`. `ispd` The initial state probability distribution for a hidden Markov model; ignored if `object` is non-null. Should bear some reasonable relationship to `y`. If `object` and `ispd` are both `NULL` then `ispd` is set equal to the stationary distribution calculated from `tpm`. `log` Logical scalar. Should logarithms be used in the recursive calculations of the probabilities involved in the Viterbi algorithm, so as to avoid underflow? If `log` is `FALSE` then underflow is avoided instead by a normalization procedure. The quantity `delta` (see Rabiner 1989, page 264) is replaced by `delta/sum(delta)` at each step. It should actually make no difference whether `log` is set to `TRUE`. I just included the option because I could. Also the `HMM` package uses the logarithm approach so setting `log=TRUE` might be of interest if comparisons are to be made between the results of the two packages.

## Details

Applies the Viterbi algorithm to calculate “the” most probable robable state sequence underlying each observation sequences.

## Value

If `y` consists of a single observation sequence, the value is the underlying most probable observation sequence, or a matrix whose columns consist of such sequences if there is more than one (equally) most probable sequence.

If `y` consists of a list of observation sequences, the value is a list each entry of which is of the form described above.

## Warning

There may be more than one equally most probable state sequence underlying a given observation sequence. This phenomenon appears to be unlikely to occur in practice.

## Thanks

The correction made to the code so as to avoid underflow problems was made due to an inquiry and suggestion from Owen Marshall.

## Author(s)

Rolf Turner [email protected]

## References

Rabiner, L. R., "A tutorial on hidden Markov models and selected applications in speech recognition," Proc. IEEE vol. 77, pp. 257 – 286, 1989.

`hmm()`, `sim.hmm()`, `mps()`, `pr()`, `viterbi()`

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14``` ```# See the help for sim.hmm() for how to generate y.num and y.let. ## Not run: fit.num <- hmm(y.num,K=2,verb=TRUE) v.1 <- viterbi(object=fit.num) v.2 <- viterbi(y.num,tpm=P,Rho=R) # P and R as in the # help for sim.hmm(). # The order of the states has gotten swapped; 3-v.1[[1]] is much # more similar to v.2[[1]] than is v.1[[1]]. fit.let <- hmm(y.let,K=2,verb=TRUE) v.3 <- viterbi(object=fit.let) # Works. v.4 <- viterbi(y.let,tpm=P,Rho=R) # Throws an error (R has no row names.) ## End(Not run) ```

hmm.discnp documentation built on May 29, 2017, 12:28 p.m.