HMM_based_method {HMMpa} | R Documentation |
Hidden Markov Method for Predicting Physical Activity Patterns
Description
This function assigns a physical activity range to each observation of a time-series (such as a sequence of impulse counts recorded by an accelerometer) using hidden Markov models (HMM). The activity ranges are defined by thresholds called cut-off points. Basically, this function combines HMM_training
, HMM_decoding
and cut_off_point_method
. See Details for further information.
Usage
HMM_based_method(x, cut_points, distribution_class,
min_m = 2, max_m = 6, n = 100,
max_scaled_x = NA, names_activity_ranges = NA,
discr_logL = FALSE, discr_logL_eps = 0.5,
dynamical_selection = TRUE, training_method = "EM",
Mstep_numerical = FALSE, BW_max_iter = 50,
BW_limit_accuracy = 0.001, BW_print = TRUE,
DNM_max_iter = 50, DNM_limit_accuracy = 0.001,
DNM_print = 2, decoding_method = 'global',
bout_lengths = NULL, plotting = 0)
Arguments
x |
a vector object of length |
cut_points |
a vector object containing cut-off points to separate activity ranges. For instance, the vector |
distribution_class |
a single character string object with the abbreviated name of the |
min_m |
miminum number of hidden states in the hidden Markov chain. Default value is |
max_m |
maximum number of hidden states in the hidden Markov chain. Default value is |
n |
a single numerical value specifying the number of samples. Default value is |
max_scaled_x |
an optional numerical value, to be used to scale the observations of the time-series |
names_activity_ranges |
an optional character string vector to name the activity ranges induced by the cut-points. This vector must contain one element more than the vector |
discr_logL |
a logical object indicating whether the discrete log-likelihood should be used (for |
discr_logL_eps |
a single numerical value to approximate the discrete log-likelihood for a hidden Markov model based on nomal distributions (for |
dynamical_selection |
a logical value indicating whether the method of dynamical initial parameter selection should be applied (see |
training_method |
a logical value indicating whether the Baum-Welch algorithm (
|
Mstep_numerical |
a logical object indicating whether the Maximization Step of the Baum-Welch algorithm shall be performed by numerical maximization. Default is FALSE. |
BW_max_iter |
a single numerical value representing the maximum number of iterations in the Baum-Welch algorithm. Default value is |
BW_limit_accuracy |
a single numerical value representing the convergence criterion of the
Baum-Welch algorithm. Default value is |
BW_print |
a logical object indicating whether the log-likelihood at each iteration-step shall be printed. Default is |
DNM_max_iter |
a single numerical value representing the maximum number of iterations
of the numerical maximization using the nlm-function (used to perform the M-step of the
Baum-Welch-algorithm). Default value is |
DNM_limit_accuracy |
a single numerical value representing the convergence criterion of the numerical
maximization algorithm using the nlm function (used to perform the M-step of
the Baum-Welch-algorithm). Default value is |
DNM_print |
a single numerical value to determine the level of printing of the |
decoding_method |
a string object to choose the applied decoding-method to decode the HMM given the time-series of observations |
bout_lengths |
a vector object (with even number of elemets) to define the range of the bout intervals (see Details for the definition of bouts). For instance,
|
plotting |
a numeric value between 0 and 5 (generates different outputs). NA suppresses graphical output. Default value is |
Details
The function combines HMM_training
, HMM_decoding
and cut_off_point_method
as follows:
Step 1: HMM_training
trains the most likely HMM for a given time-series of accelerometer counts.
Step 2: HMM_decoding
decodes the trained HMM (Step 1) into the most likely sequence of hidden states corresponding to the given time-series of observations (respectively the most likely sequence of physical activity levels corresponding to the time-series of accelerometer counts).
Step 3. cut_off_point_method
assigns an activity range to each accelerometer count by its hidden physical activity level (extracted in Step 2).
Value
HMM_based_method
returns a list containing the output of the trained hidden Markov model, including the selected number of states m
(i.e., number of physical activities) and plots key figures.
trained_HMM_with_selected_m |
a list object containing the trained hidden Markov model including the selected number of states |
decoding |
a list object containing the output of the decoding (see |
.
extendend_cut_off_point_method |
a list object containing the output of the cut-off point method.
The counts |
Note
The parameter max_scaled_x
can be applied to scale the values of the observations. This might prevent the alogrithm from numerical instabilities. At the end, the results are internaly rescaled to the original scale. For instance, a value of max_scaled_x=200
shrinks the count values of the complete time-series x
to a maximum of 200. Training and decoding of the HMM is carried out using the scaled time-series.
From our experience, especially time-series with observations values >1500
, or where T > 1000
, show numerical instabilities. We then advice to make use of max_scaled_x
.
The extention of the cut-off point method using a Poisson based HMM has been provided and evaluated successfully on simulated data firstly by Barbara Brachmann in her diploma thesis (see References).
Author(s)
Vitali Witowski (2013).
References
Brachmann, B. (2011). Hidden-Markov-Modelle fuer Akzelerometerdaten. Diploma Thesis, University Bremen - Bremen Institute for Prevention Research and Social Medicine (BIPS).
MacDonald, I. L., Zucchini, W. (2009) Hidden Markov Models for Time Series: An Introduction Using R, Boca Raton: Chapman & Hall.
Witowski, V., Foraita, R., Pitsiladis, Y., Pigeot, I., Wirsik, N. (2014) Using hidden Markov models to improve quantifying physical activity in accelerometer data - A simulation study. PLOS ONE. 9(12), e114089. http://dx.doi.org/10.1371/journal.pone.0114089
See Also
initial_parameter_training
,
Baum_Welch_algorithm
,
direct_numerical_maximization
,
AIC_HMM
,
BIC_HMM
,
HMM_training
,
Viterbi_algorithm
,
local_decoding_algorithm
,
cut_off_point_method
Examples
################################################################
### Fictitious activity counts #################################
################################################################
x <- 100 * 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)
### Fictitious cut-off points that produce four so-called
### activity ranges "sedentary", "light", "moderate",
### and "vigorous".
cut_points <- 100 * c(7,15,23)
names_activity_ranges <- c("SED","LIG","MOD","VIG")
### Plot fictitious activity counts
plot(x, main = "counts with high values",
xlab = "time/epoch", ylab = "counts")
abline(h = cut_points, col = "grey50", lty = "dashed")
################################################################
### Comparing the results of the traditional ###################
### cut-off point method and the new HMM-based method ##########
################################################################
### Apply the traditional cut-off point method to assign
### physical activity ranges to each observed count
solution_of_tradtionional_cut_off_point_method <-
cut_off_point_method(x = x,
hidden_PA_levels = NA,
cut_points = cut_points,
names_activity_ranges = names_activity_ranges,
bout_lengths = c(1,1,2,2,3,3,4,4,5,5,6,12,
13,40,41,265,1,265),
plotting = 1)
### Apply the HMM-based method to assign physical activity
### ranges to the hidden physical activity level of each count
solution_of_HMM_based_method <-
HMM_based_method(x = x,
max_scaled_x = 50,
cut_points =cut_points,
min_m = 2,
max_m = 6,
names_activity_ranges = names_activity_ranges,
distribution_class = "pois",
training_method = "EM",
decoding_method = "global",
bout_lengths = c(1,1,2,2,3,3,4,4,5,5,6,12,
13,40,41,265,1,265),
plotting = 1)
### Print details of the traditional cut-off point method
### and the new HMM-based method
print(solution_of_tradtionional_cut_off_point_method)
print(solution_of_HMM_based_method)