Learn R Programming

regmhmm (version 1.0.0)

rHMM: Fit Regularized Hidden Markov Models (rHMM) with Modified CCD

Description

Utilize the modified Cyclic Coordinate Descent (CCD) algorithm to effectively fit a regularized Hidden Markov Model (rHMM).

Usage

rHMM(
  delta,
  Y_mat,
  A,
  B,
  X_cube,
  family,
  omega_cva = sqrt(sqrt(seq(0, 1, len = 5))),
  N_iter = 1000,
  eps = 1e-07,
  trace = 0
)

Value

A list object with the following slots:

delta_hat

the estimate of delta.

A_hat

the estimate of A.

B_hat

the estimate of B.

log_likelihood

the log-likelihood of the model.

lambda

lambda from CV.

omega

omega from CV.

Arguments

delta

a vector of length S specifying the initial probabilities.

Y_mat

a matrix of observations of size N x T.

A

a matrix of size S x S specifying the transition probabilities.

B

a matrix of size S x (p + 1) specifying the GLM parameters of the emission probabilities.

X_cube

a design array of size T x p x N.

family

the family of the response.

omega_cva

a vector of omega values for the modified cyclical coordinate descent algorithm used for cross-validation.

N_iter

the maximal number of the EM algorithm for fitting HMM.

eps

convergence tolerance.

trace

logical indicating if detailed output should be produced during the fitting process.

Examples

Run this code
# \donttest{
# Example usage of the function
seed_num <- 1
p_noise <- 2
N <- 100
N_persub <- 50
parameters_setting <- list(
  init_vec = c(0.5, 0.5),
  trans_mat = matrix(c(0.7, 0.3, 0.2, 0.8), nrow = 2, byrow = TRUE),
  emis_mat = matrix(c(1, 0.5, 0.5, 2), nrow = 2, byrow = TRUE)
)
simulated_data <- simulate_HMM_data(seed_num, p_noise, N, N_persub, parameters_setting)

init_start = c(0.5, 0.5)
trans_start = matrix(c(0.5, 0.5, 0.5, 0.5), nrow = 2)
emis_start = matrix(rep(1, 8), nrow = 2)

rHMM_one_step <- rHMM(delta=as.matrix(init_start),
                               Y_mat=simulated_data$y_mat,
                               A=trans_start,
                               B=emis_start,
                               X_cube=simulated_data$X_array,
                               family="P",
                               omega_cva=sqrt(sqrt(seq(0, 1, len = 5))),
                               N_iter=10,
                               trace = 0)
# }

Run the code above in your browser using DataLab