← Back to all sparks
C

compositional.mle

ANALYTICS
Velocity0.0

Compositional Maximum Likelihood Estimation

An MLE package rebuilt around composable solvers, then renamed to match.

maximum-likelihoodoptimizationfunctional-apicranr-package
Current state
compositional.mle performs numerical maximum likelihood estimation in R, with the optimisation strategy expressed as composed pieces rather than configured up front. It began in November 2025 as numerical.mle, a configuration-object package with fixed solvers. The v0.2.0 rewrite replaced that with solver factories sharing a uniform signature and operators for chaining and racing them, and renamed the package accordingly. The two most recent releases are CRAN submission work.
Where it's heading
The arc is a design idea overtaking an implementation: version 0.1.0 exposed configuration functions and named solvers, version 0.2.0 turned solvers into values that can be sequenced with %>>%, raced with %|%, restarted, or conditionally refined, and separated the statistical problem from the optimisation strategy. Since then all effort has gone into CRAN acceptance, dead code removal, policy compliance, validation fixes. That is a package that redesigned itself early and is now trying to get through the door.
Prediction
With the composable API settled, the next work will most likely be additional solvers and transformers plugged into the existing operators rather than another redesign.

Recent moves

  1. 6mo ago

    Parallel racing fixed under the future package

    Fixes race() so worker processes load the package correctly under future, plus build hygiene. Published under an hour after v1.0.1, in the same CRAN submission push.

    View source ↗
  2. 6mo ago

    Dead code removed and CRAN policy compliance work

    Removes unused configuration functions left over from the pre-rewrite design, wraps messages in interactive() checks, and fixes input validation and an unsafe float comparison. Cleanup clearing the last traces of the numerical.mle era.

    View source ↗
  3. 8mo ago

    Solvers become composable values, and the package is renamed

    ⚡ SPARK

    The redesign the whole package now rests on, and the reason the two later releases are pure cleanup. It also explains the rename: the old name described a subject, the new API describes a method.

    View source ↗
  4. 8mo ago

    First release as numerical.mle, built on configuration objects

    The original release with mle_config() objects, gradient ascent and Newton-Raphson solvers, grid search and random restart meta-solvers. Three weeks later the composable rewrite replaced this design wholesale.

    View source ↗