Description Usage Arguments Details Value Author(s) References See Also Examples
The function decodes a hidden Markov model into a most likely sequence of hidden states. Furthermore this function provides estimated observation values along the most likely sequence of hidden states. See Details for more information.
1 2 3 | HMM_decoding(x, m, delta, gamma, distribution_class,
distribution_theta, decoding_method = "global",
discr_logL = FALSE, discr_logL_eps = 0.5)
|
x |
a vector object containing the time-series of observations that are assumed to be realizations of the (hidden Markov state dependent) observation process of the model. |
m |
a (finite) number of states in the hidden Markov chain. |
delta |
a vector object containing values for the marginal probability distribution of the |
gamma |
a matrix ( |
distribution_class |
a single character string object with the abbreviated name of the |
distribution_theta |
a list object containing the parameter values for the |
decoding_method |
a string object to choose the applied decoding-method to decode the HMM given the time-series of observations
|
discr_logL |
a logical object. It is |
discr_logL_eps |
a single numerical value to approximately determine the discrete log-likelihood for a hidden Markov model based on nomal distributions (for |
More precisely, the function works as follows:
Step 1:
In a first step, the algorithm decodes a HMM into the most likely sequence of hidden states, given a time-series of observations. The user can choose between a global and a local approch.
If decoding_method="global"
is applied, the function calls Viterbi_algorithm
to determine the sequence of most likely hidden states for all time points simultaneously.
If decoding_method="local"
is applied, the function calls local_decoding_algorithm
to determine the most likely hidden state for each time point seperately.
Step 2: In a second step, this function links each observation to the mean of the distribution, that corresponds to the decoded state at this point in time.
HMM_decoding
returns a list containing the following two components:
decoding_method |
a string object indicating the applied decoding method. |
decoding |
a numerical vector containing the most likely sequence of hidden states as decoded by the
|
decoding_distr_means |
a numerical vector of estimated oberservation values along the most likely seuquence of hidden states (see |
Vitali Witowski (2013).
MacDonald, I. L., Zucchini, W. (2009) Hidden Markov Models for Time Series: An Introduction Using R, Boca Raton: Chapman & Hall.
local_decoding_algorithm
,
Viterbi_algorithm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | ################################################################
### i) HMM-training ###########################################
################################################################
################################################################
### Fictitious observations ####################################
################################################################
x <- c(1,16,19,34,22,6,3,5,6,3,4,1,4,3,5,7,9,8,11,11,
14,16,13,11,11,10,12,19,23,25,24,23,20,21,22,22,18,7,
5,3,4,3,2,3,4,5,4,2,1,3,4,5,4,5,3,5,6,4,3,6,4,8,9,12,
9,14,17,15,25,23,25,35,29,36,34,36,29,41,42,39,40,43,
37,36,20,20,21,22,23,26,27,28,25,28,24,21,25,21,20,21,
11,18,19,20,21,13,19,18,20,7,18,8,15,17,16,13,10,4,9,
7,8,10,9,11,9,11,10,12,12,5,13,4,6,6,13,8,9,10,13,13,
11,10,5,3,3,4,9,6,8,3,5,3,2,2,1,3,5,11,2,3,5,6,9,8,5,
2,5,3,4,6,4,8,15,12,16,20,18,23,18,19,24,23,24,21,26,
36,38,37,39,45,42,41,37,38,38,35,37,35,31,32,30,20,39,
40,33,32,35,34,36,34,32,33,27,28,25,22,17,18,16,10,9,
5,12,7,8,8,9,19,21,24,20,23,19,17,18,17,22,11,12,3,9,
10,4,5,13,3,5,6,3,5,4,2,5,1,2,4,4,3,2,1)
### Train hidden Markov model for different number of
### states m=2,...,6 and select the optimal model
m_trained_HMM <-
HMM_training(x = x,
min_m = 2,
max_m = 6,
distribution_class="pois")$trained_HMM_with_selected_m
################################################################
################################################################
### ii) Global decoding ########################################
################################################################
################################################################
### Decode the trained HMM using the Viterbi algorithm to get
### the estimated sequence of hidden physical activity levels
global_decoding <-
HMM_decoding(x = x,
m = m_trained_HMM$m,
delta = m_trained_HMM$delta,
gamma = m_trained_HMM$gamma,
distribution_class = m_trained_HMM$distribution_class,
distribution_theta = m_trained_HMM$distribution_theta,
decoding_method = "global")
### Globally most likely sequence of hidden states,
### i.e. in this case sequence of activity levels
global_decoding$decoding
par(mfrow = c(1,1))
plot(global_decoding$decoding)
### Plot the observed impulse counts and the most likely
### sequence (green) according to the Viterbi algorithm that
### generated these observations
plot(x)
lines(global_decoding$decoding_distr_means, col = "green")
################################################################
################################################################
### iii) Local decoding ########################################
################################################################
################################################################
### Decode the trained HMM using the local decoding algorithm
### to get the estimated sequence of hidden physical activity
### levels
local_decoding <-
HMM_decoding(x = x,
m = m_trained_HMM$m,
delta = m_trained_HMM$delta,
gamma = m_trained_HMM$gamma,
distribution_class = m_trained_HMM$distribution_class,
distribution_theta = m_trained_HMM$distribution_theta,
decoding_method = "local")
### Locally most likely sequence of hidden states,
### i.e. in this case sequence of activity levels
local_decoding$decoding
par(mfrow=c(1,1))
plot(local_decoding$decoding)
### Plot the observed impulse counts and the most likely
### sequence (green) according to the local decoding algorithm
### that generated these observations
plot(x)
lines(local_decoding$decoding_distr_means, col = "red")
################################################################
################################################################
### iv) Comparison of global and local decoding ################
################################################################
################################################################
### Comparison of global decoding (green), local decoding (red)
### and the connection to the closest mean (blue)
print(global_decoding$decoding)
print(local_decoding$decoding)
### Plot comparison
par(mfrow = c(2,2))
plot(global_decoding$decoding[seq(230,260)], col = "green",
ylab = "global decoding", main = "(zooming)")
plot(x[seq(230,260)], ylab = "global decoding",
main = "(zooming x[seq(230,260)])")
lines(global_decoding$decoding_distr_means[seq(230,260)],
col = "green")
plot(local_decoding$decoding[seq(230,260)], col = "red",
ylab = "local decoding", main = "(zooming)")
plot(x[seq(230,260)], ylab = "local decoding",
main = "(zooming x[seq(230,260)])")
lines(local_decoding$decoding_distr_means[seq(230,260)],
col = "red")
par(mfrow = c(1,1))
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.