Added Model::likelihood_total_grad() and
Model::likelihood_total_hess() for the exact gradient and
Hessian of the total log-likelihood, and
Model::likelihood_total_and_grad() to compute the
log-likelihood and gradient together. The Hessian is returned as a
row-major vector. These methods use numerically stable, max-shifted
exponentials and do not modify the model or its cached normalizing
constants (USCbiostats/barry#27).
Fixed defm_motif_parser reading covariate names as
motif terms: a formula such as {y0} > {y0} x Day1
silently added y1 to the motif. Variables are now only read
from the bracketed groups. Also fixed {...}x Covar (no
space before x) silently dropping the covariate,
transitions accepting current-time rows on the LHS (e.g.,
{y0_1} > {y1}), and unchecked out-of-range rows with
Markov order 1 (USCbiostats/barry#26).
Fixed support-vs-array index confusion in
Model::sample and DEFM::simulate, which
produced wrong draws when simulating (USCbiostats/barry#25).
Fixed catastrophic hash collisions in
FreqTable::make_hash and vecHasher: hashes of
small-integer statistics had no entropy in their low bits, so
std::unordered_map placed (nearly) all keys in a single
bucket, making support computation O(4^ncol) instead of O(2^ncol).
Models with many response columns (e.g., 16) appeared to hang during
initialization (USCbiostats/barry#24).
FreqTable::add() now verifies the stored row on a
hash hit and keeps true 64-bit hash collisions in a per-hash overflow
chain, so distinct statistics can no longer be silently merged
(USCbiostats/barry#24).
barry’s
versioning.