View source: R/forward_algorithms.R
| forward_g | R Documentation |
Calculates the log-likelihood of a sequence of observations under a hidden Markov model with time-varying transition probabilities using the forward algorithm.
forward_g(
delta,
Gamma,
allprobs,
trackID = NULL,
ad = NULL,
report = TRUE,
logspace = FALSE
)
delta |
initial or stationary distribution of length N, or matrix of dimension c(k,N) for k independent tracks, if |
Gamma |
array of transition probability matrices of dimension c(N,N,n-1), as in a time series of length n, there are only n-1 transitions. If an array of dimension c(N,N,n) for a single track is provided, the first slice will be ignored. If the elements of If This function can also be used to fit continuous-time HMMs, where each array entry is the Markov semigroup |
allprobs |
matrix of state-dependent probabilities/ density values of dimension c(n, N) |
trackID |
optional vector of length n containing IDs If provided, the total log-likelihood will be the sum of each track's likelihood contribution.
In this case, |
ad |
optional logical, indicating whether automatic differentiation with |
report |
logical, indicating whether Caution: When there are multiple tracks, for compatibility with downstream functions like |
logspace |
logical, indicating whether the probabilities/ densities in the |
log-likelihood for given data and parameters
Other forward algorithms:
forward(),
forward_hsmm(),
forward_ihsmm(),
forward_p(),
forward_phsmm()
## Simple usage
Gamma = array(c(0.9, 0.2, 0.1, 0.8), dim = c(2,2,10))
delta = c(0.5, 0.5)
allprobs = matrix(0.5, 10, 2)
forward_g(delta, Gamma, allprobs)
## Full model fitting example
## negative log likelihood function
nll = function(par, step, Z) {
# parameter transformations for unconstrained optimisation
beta = matrix(par[1:6], nrow = 2)
Gamma = tpm_g(Z, beta) # multinomial logit link for each time point
delta = stationary(Gamma[,,1]) # stationary HMM
mu = exp(par[7:8])
sigma = exp(par[9:10])
# calculate all state-dependent probabilities
allprobs = matrix(1, length(step), 2)
ind = which(!is.na(step))
for(j in 1:2) allprobs[ind,j] = dgamma2(step[ind], mu[j], sigma[j])
# simple forward algorithm to calculate log-likelihood
-forward_g(delta, Gamma, allprobs)
}
## fitting an HMM to the trex data
par = c(-1.5,-1.5, # initial tpm intercepts (logit-scale)
rep(0, 4), # initial tpm slopes
log(c(0.3, 2.5)), # initial means for step length (log-transformed)
log(c(0.2, 1.5))) # initial sds for step length (log-transformed)
mod = nlm(nll, par, step = trex$step[1:500], Z = trigBasisExp(trex$tod[1:500]))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.