wolffd@0: function [loglik, errors] = dhmm_logprob(data, prior, transmat, obsmat) wolffd@0: % LOG_LIK_DHMM Compute the log-likelihood of a dataset using a discrete HMM wolffd@0: % [loglik, errors] = log_lik_dhmm(data, prior, transmat, obsmat) wolffd@0: % wolffd@0: % data{m} or data(m,:) is the m'th sequence wolffd@0: % errors is a list of the cases which received a loglik of -infinity wolffd@0: wolffd@0: if ~iscell(data) wolffd@0: data = num2cell(data, 2); wolffd@0: end wolffd@0: ncases = length(data); wolffd@0: wolffd@0: loglik = 0; wolffd@0: errors = []; wolffd@0: for m=1:ncases wolffd@0: obslik = multinomial_prob(data{m}, obsmat); wolffd@0: [alpha, beta, gamma, ll] = fwdback(prior, transmat, obslik, 'fwd_only', 1); wolffd@0: if ll==-inf wolffd@0: errors = [errors m]; wolffd@0: end wolffd@0: loglik = loglik + ll; wolffd@0: end