| posterior | R Documentation | 
Return posterior state classifications and/or
probabilities for a fitted (dep-)mix object. In
the case of a latent class or mixture model, states refer to the 
classes/mixture components.
There are different ways to define posterior state probabilities and the resulting classifications. The 'type' argument can be used to specify the desired definition. The default is currently set to 'viterbi'. Other options are 'global' and 'local' for state classification, and 'filtering' and 'smoothing' for state probabilities. See Details for more information.
	## S4 method for signature 'depmix'
posterior(object, type = c("viterbi", "global", "local", "filtering", "smoothing"))
	## S4 method for signature 'depmix.fitted'
posterior(object, type = c("viterbi", "global", "local", "filtering", "smoothing"))
	## S4 method for signature 'mix'
posterior(object, type = c("viterbi", "global", "local", "filtering", "smoothing"))
	## S4 method for signature 'mix.fitted'
posterior(object, type = c("viterbi", "global", "local", "filtering", "smoothing"))
| object | A (fitted)(dep-)mix object. | 
| type | character, partial matching allowed. The type of classification or posterior probability desired. | 
After fitting a mix or depmix model, one is often interested 
in determining the most probable mixture components or hidden states at each 
time-point t. This is also called decoding the hidden states from the observed 
data. There are at least two general ways to consider state classification:
'global' decoding means determining the most likely state sequence, whilst 
'local' decoding means determining the most likely state at each time point 
whilst not explicitly considering the identity of the hidden states at other
time points. For mixture models, both forms of decoding are identical.
Global decoding is based on the conditional probability
p(S_1, \ldots, S_T \mid Y_1, \ldots, Y_T), and consists of determining, 
at each time point t = 1, \ldots, T:
s*_t = \arg \max_{i=1}^N p(S_1 = s*_1, \ldots, S_{t-1} = s*_{t-1}, S_t = i, S_{t+1} = s*_{t+1}, \ldots, S_T = s*_{T} \mid Y_1, \ldots, Y_T)
where N is the total number of states. These probabilities and the 
resulting classifications, are computed through the viterbi algorithm.
Setting type = 'viterbi' returns a data.frame with the Viterbi-decoded 
global state sequence in the first column, and the normalized "delta" probabilities
in the remainining columns. These "delta" probabilities are defined as the joint 
probability of the most likely state sequence ending in state i at time t,
and all the observations up to time t. The normalization of these joint
probabilities is done on a time-point basis (i.e., dividing the delta probability
by the sum of the delta probabilities for that time point for all possible states 
j (including state i)). These probabilities are not straightforward 
to interpret. Setting type = "global" returns just a vector with the 
Viterbi-decoded global state sequence.
Local decoding is based on the smoothing probabilities 
p(S_t \mid Y_1, \ldots, Y_T), which are the "gamma" probabilities 
computed with the forwardbackward algorithm. Local decoding then
consists of determining, at each time point t = 1, \ldots, T
s*_t = \arg \max_{i=1}^N p(S_t = i \mid Y_1, \ldots, Y_T)
where N is the total number of states. Setting type = "local" returns
a vector with the local decoded states. Setting type = "smoothing" returns
the smoothing probabilities which underlie this classification. When considering
the posterior probability of each state, the values returned by type = "smoothing"
are most likely what is wanted by the user.
The option type = "filtering" returns a matrix with the so-called filtering probabilities, 
defined as p(S_t \mid Y_1, \ldots, Y_t), i.e. the probability of a hidden 
state at time t considering the observations up to and including time t.
See the fit help page for an example. 
The return value of posterior depends on the value of the type
argument:
| type = 'viterbi' | Returns a data.frame with  | 
| type = 'global' | Returns a vector which contains the states decoded through the Viterbi algorithm. | 
| type = 'local' | Returns a vector which contains the states decoded as the maximum of the smoothing probabilities. | 
| type = 'filtering' | Returns a matrix which contains the posterior probabilities of each state, conditional upon the responses observed thus far. | 
| type = 'smoothing' | Returns a matrix which contains the posterior probabilities of each state, conditional upon all the responses observed. | 
See Details for more information.
The initial version of this function was a simple wrapper to return the value of the posterior slot in a mix-fitted or depmix-fitted object. The value of this slot is set by a call of the viterbi method. For backwards compatibility, the default value of the type argument is set to "viterbi", which returns the same. As the "delta" probabilities returned as part of this may be misinterpreted, and may not be the desired posterior probabilities, the updated version of this method now allows for other return values, and the type = "viterbi" option should be considered depreciated.
Maarten Speekenbrink & Ingmar Visser
Lawrence R. Rabiner (1989). A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of IEEE, 77-2, p. 267-295.
data(speed)
# 2-state model on rt and corr from speed data set 
# with Pacc as covariate on the transition matrix
# ntimes is used to specify the lengths of 3 separate series
mod <- depmix(list(rt~1,corr~1),data=speed,transition=~Pacc,nstates=2,
	family=list(gaussian(),multinomial("identity")),ntimes=c(168,134,137))
fmod <- fit(mod)
# Global decoding:
pst_global <- posterior(fmod, type = "global")
# Local decoding:
pst_local <- posterior(fmod,type="local")
# Global and local decoding provide different results:
identical(pst_global, pst_local)
# smoothing probabilities are used for local decoding, and may be used as 
# easily interpretable posterior state probabilities
pst_prob <- posterior(fmod, type = "smoothing")
# "delta" probabilities from the Viterbi algorithm
pst_delta <- posterior(fmod, type="viterbi")[,-1]
# The smoothing and "delta" probabilities are different:
identical(pst_prob, pst_delta)
# Filtering probabilities are an alternative to smoothing probabilities:
pst_filt <- posterior(fmod, type = "filtering")
# The smoothing and filtering probabilities are different:
identical(pst_prob, pst_filt)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.