Title: | Latent Hidden Markov Models for Response Process Data |
---|---|
Description: | Provides functions for simulating from and fitting the latent hidden Markov models for response process data (Tang, 2024) <doi:10.1007/s11336-023-09938-1>. It also includes functions for simulating from and fitting ordinary hidden Markov models. |
Authors: | Xueying Tang [aut, cre, cph] |
Maintainer: | Xueying Tang <[email protected]> |
License: | GPL (>= 3) |
Version: | 1.0.0 |
Built: | 2025-03-03 04:47:58 UTC |
Source: | https://github.com/xytangtang/proclhmm |
Compute initial state probability from LHMM parameters; currently, the initial state probability does not depend on latent traits
compute_P1_lhmm(para_P1)
compute_P1_lhmm(para_P1)
para_P1 |
a vector of length |
initial state probability vector of length K
compute_PQ_lhmm
for state-transition and state-action
probabilities of LHMM, compute_paras_hmm
for computing
probabilities in HMM.
paras <- sim_lhmm_paras(5, 2) P1 <- compute_P1_lhmm(paras$para_P1)
paras <- sim_lhmm_paras(5, 2) P1 <- compute_P1_lhmm(paras$para_P1)
Compute probabilities from logit scale parameters in HMM
compute_paras_hmm(para_P, para_Q, para_P1)
compute_paras_hmm(para_P, para_Q, para_P1)
para_P |
|
para_Q |
|
para_P1 |
|
a list of three elements:
P |
K by K state-transition probability matrix |
Q |
K by N state-action (emission) probability matrix |
P1 |
initial state probability vector of length K |
compute_PQ_lhmm
, compute_P1_lhmm
for computing probabilities in LHMM
paras <- sim_hmm_paras(5, 2, return_prob=FALSE) prob_paras <- compute_paras_hmm(paras$para_P, paras$para_Q, paras$para_P1)
paras <- sim_hmm_paras(5, 2, return_prob=FALSE) prob_paras <- compute_paras_hmm(paras$para_P, paras$para_Q, paras$para_P1)
Compute state-transition and state-action (emission) probability matrices from LHMM parameters
compute_PQ_lhmm(theta, para_a, para_b, para_alpha, para_beta)
compute_PQ_lhmm(theta, para_a, para_b, para_alpha, para_beta)
theta |
latent trait |
para_a |
|
para_b |
|
para_alpha |
|
para_beta |
|
A list of two elements
P |
K by K state-transition probability matrix |
Q |
K by N state-action probability matrix |
compute_P1_lhmm
for initial state probabilities of
LHMM, compute_paras_hmm
for computing probabilities in HMM.
paras <- sim_lhmm_paras(5, 2) prob_paras <- compute_PQ_lhmm(1.5, paras$para_a, paras$para_b, paras$para_alpha, paras$para_beta)
paras <- sim_lhmm_paras(5, 2) prob_paras <- compute_PQ_lhmm(1.5, paras$para_a, paras$para_b, paras$para_alpha, paras$para_beta)
Compute MAP estimates of latent traits given LHMM parameters
compute_theta(int_seqs, para_a, para_b, para_alpha, para_beta, para_P1, n_pts)
compute_theta(int_seqs, para_a, para_b, para_alpha, para_beta, para_P1, n_pts)
int_seqs |
a list of |
para_a |
|
para_b |
|
para_alpha |
|
para_beta |
|
para_P1 |
a vector of length |
n_pts |
number of quadrature points |
a vector of length n
. Estimated latent traits.
Find the most likely hidden state sequence of an observed sequence under HMM
find_state_seq(seq, P1, P, Q)
find_state_seq(seq, P1, P, Q)
seq |
An action sequence coded in integers |
P1 |
initial state probability vector of length |
P |
|
Q |
|
a hidden state sequence coded in integers
Maximum marginalized likelihood estimation of HMM.
Optimization is performed through optim
.
hmm(action_seqs, K, paras, ...)
hmm(action_seqs, K, paras, ...)
action_seqs |
a list of |
K |
number of hidden states |
paras |
a list of elements named |
... |
additional arguments passed to |
a list containing the following elements
seqs |
action sequences coded in integers |
K |
number of hidden states |
N |
number of distinct actions |
paras_init |
a list containing initial values of parameters |
paras_est |
a list containing parameter estimates |
init_mllh |
initial value of the marginalized likelihood function |
opt_mllh |
maximized marginalized likelihood function |
opt_res |
object returned by optim |
# generate data paras_true <- sim_hmm_paras(5, 2) sim_data <- sim_hmm(20, paras_true, 4, 10) # randomly generate initial values of parameters paras_init <- sim_hmm_paras(5, 2, return_prob=FALSE) # fit hmm hmm_res <- hmm(sim_data$seqs, 2, paras_init)
# generate data paras_true <- sim_hmm_paras(5, 2) sim_data <- sim_hmm(20, paras_true, 4, 10) # randomly generate initial values of parameters paras_init <- sim_hmm_paras(5, 2, return_prob=FALSE) # fit hmm hmm_res <- hmm(sim_data$seqs, 2, paras_init)
Maximum marginalized likelihood estimation of LHMM.
Marginalization over latent trait is computed numerically using Guassian-Hermite quadratures from statmod
.
Optimization is performed through optim
.
lhmm(action_seqs, K, paras, n_pts = 500, ...)
lhmm(action_seqs, K, paras, n_pts = 500, ...)
action_seqs |
a list of |
K |
number of hidden states |
paras |
a list of elements named |
n_pts |
number of quadrature points |
... |
additional arguments passed to |
A list containing the following elements
seqs |
action sequences coded in integers |
K |
number of hidden states |
N |
number of distinct actions |
paras_init |
a list containing initial values of parameters |
paras_est |
a list containing parameter estimates |
theta_est |
a vector of length n . estimated latent traits |
init_mllh |
initial value of the marginalized likelihood function |
opt_mllh |
maximized marginalized likelihood function |
opt_res |
object returned by optim |
# generate data paras_true <- sim_lhmm_paras(5, 2) sim_data <- sim_lhmm(20, paras_true, 3, 8) # randomly initialize parameters paras_init <- sim_lhmm_paras(5, 2) # fit model lhmm_res <- lhmm(sim_data$seqs, 2, paras_init)
# generate data paras_true <- sim_lhmm_paras(5, 2) sim_data <- sim_lhmm(20, paras_true, 3, 8) # randomly initialize parameters paras_init <- sim_lhmm_paras(5, 2) # fit model lhmm_res <- lhmm(sim_data$seqs, 2, paras_init)
This package provides functions for simulating from and fitting the latent hidden Markov models for response process data (Tang, 2024). It also includes functions for simulating from and fitting ordinary hidden Markov models.
sim_hmm_paras
generates parameters of HMM
sim_hmm
generates actions sequences from HMM.
sim_lhmm_paras
generates parameters of LHMM
sim_lhmm
generates actions sequences from LHMM.
hmm
fits HMM models. Parameters are estimated
through marginalized maximum likelihood estimation.
lhmm
fits LHMM models. Parameters are estimated
through marginalized maximum likelihood estimation.
compute_theta
compute MAP estimates of latent traits in LHMM.
find_state_seq
compute the most likely hidden state sequence.
The development of this package is supported by National Science Foundation grant DMS-2310664.
Tang, X. (2024) Latent Hidden Markov Models for Response Process Data. Psychometrika 89, 205-240. doi:10.1007/s11336-023-09938-1
sim_hmm
generate n
action sequences from HMM based on given parameters.
The lengths of the generated sequences are simulated from a Poission distribution with
mean mean_len
and at least min_len
.
sim_hmm(n, paras, min_len, mean_len, return_state = TRUE)
sim_hmm(n, paras, min_len, mean_len, return_state = TRUE)
n |
number of action sequences to be generated |
paras |
a list containing specified HMM parameters: state-transition probability matrix ( |
min_len |
minimum length of generated sequences |
mean_len |
mean length of generated sequences |
return_state |
logical. Whether generated hidden state sequences should be returned or not. |
sim_hmm
returns a list of n
generated action sequences if return_state = FALSE
.
If return_state = TRUE
, it returns a list of two lists, seqs
and state_seqs
. seqs
gives
the generated action sequences. state_seqs
gives the corresponding hidden state sequences.
paras <- sim_hmm_paras(5,2) sim_data <- sim_hmm(20, paras, 3, 10)
paras <- sim_hmm_paras(5,2) sim_data <- sim_hmm(20, paras, 3, 10)
sim_hmm_paras
generates logit scale parameters of HMM with K
hidden states and
N
distinct actions from Uniform(-0.5, 0.5).
sim_hmm_paras(N, K, return_prob = TRUE)
sim_hmm_paras(N, K, return_prob = TRUE)
N |
number of distinct actions |
K |
number of hidden states |
return_prob |
logical. indicates to return parameters in probability scale ( |
a list of three elements.
If return_prob = TRUE
, the element names are P1
, P
, and Q
.
If return_prob = FALSE
, the element names are para_P1
, para_P
, and oara_Q
.
# generate probability parameters set.seed(12345) paras1 <- sim_hmm_paras(5, 2) names(paras1) # generate parameters in the logit scale set.seed(12345) paras2 <- sim_hmm_paras(5, 2, return_prob = FALSE) names(paras2) paras1$P1 paras2$para_P1 # logit scale parameters can be transformed to probability parameters all.equal(compute_paras_hmm(paras2$para_P, paras2$para_Q, paras2$para_P1), paras1)
# generate probability parameters set.seed(12345) paras1 <- sim_hmm_paras(5, 2) names(paras1) # generate parameters in the logit scale set.seed(12345) paras2 <- sim_hmm_paras(5, 2, return_prob = FALSE) names(paras2) paras1$P1 paras2$para_P1 # logit scale parameters can be transformed to probability parameters all.equal(compute_paras_hmm(paras2$para_P, paras2$para_Q, paras2$para_P1), paras1)
sim_lhmm
generate n
action sequences from LHMM based on given parameters.
The lengths of the generated sequences are simulated from a Poission distribution with
mean mean_len
and at least min_len
. The latent trait is generated from standard
normal.
sim_lhmm(n, paras, min_len, mean_len, return_state = TRUE)
sim_lhmm(n, paras, min_len, mean_len, return_state = TRUE)
n |
number of action sequences to be generated |
paras |
a list containing specified LHMM parameters: |
min_len |
minimum length of generated sequences |
mean_len |
mean length of generated sequences |
return_state |
logical. Whether generated hidden state sequences should be returned or not. |
If return_state = TRUE
, sim_hmm
returns a list of three elements
seqs |
a list of n generated action sequences |
theta |
latent traits as a vector of length n |
state_seqs |
a list of n hidden state sequences
|
If return_state = FALSE
, the returned list only contains seqs
and theta
.
paras <- sim_lhmm_paras(5,2) sim_data <- sim_lhmm(20, paras, 4, 10)
paras <- sim_lhmm_paras(5,2) sim_data <- sim_lhmm(20, paras, 4, 10)
sim_hmm_paras
generates the parameters of LHMM with K
hidden states
and N
distinct actions from Uniform(-0.5, 0.5).
sim_lhmm_paras(N, K)
sim_lhmm_paras(N, K)
N |
number of distinct actions |
K |
number of hidden states |
a list of five elements, para_a
, para_b
, para_alpha
, para_beta
, and para_P1
.
paras <- sim_lhmm_paras(5, 2) paras
paras <- sim_lhmm_paras(5, 2) paras