Skip to content

Releases: queelius/compositional.mle

v1.0.2 - CRAN Submission

Choose a tag to compare

@queelius queelius released this 05 Feb 08:57

CRAN Submission Release

Changes since v1.0.1

Bug Fixes:

  • Fix race() parallel execution with future package - worker processes now correctly load compositional.mle

Testing:

  • Add unit tests for race(parallel = TRUE) functionality

Build:

  • Add docs/ to .Rbuildignore to exclude pkgdown site from package tarball

R CMD check

0 errors ✔ | 0 warnings ✔ | 0 notes ✔

v1.0.1 - CRAN Submission

Choose a tag to compare

@queelius queelius released this 05 Feb 08:08

CRAN Submission Release

Changes since v1.0.0

Code Quality Improvements:

  • Remove unused mle_config* functions (dead code cleanup)
  • Fix CRAN policy: wrap message() in interactive() checks
  • Add @return tags to all print methods
  • Add @examples to utility functions
  • Add @seealso cross-references to solvers

Bug Fixes:

  • Fix input validation for mle_trace(every) parameter
  • Fix unsafe float comparison in backtracking line search
  • Add solver names to error messages for better debugging

Style:

  • Fix line length violations (>80 chars)
  • Fix indentation issues

R CMD check

0 errors ✔ | 0 warnings ✔ | 1 note (optional 'future' package)

compositional.mle v0.2.0

Choose a tag to compare

@queelius queelius released this 18 Dec 04:05

Major Refactoring: Composable MLE Solvers

This release renames the package from numerical.mle to compositional.mle and introduces a new composable API based on SICP principles.

Key Changes

  • Factory Pattern: Solvers are now factory functions that return solver functions with uniform signature: (problem, theta0, trace) -> result
  • Composition Operators:
    • %>>% - Sequential chaining (coarse-to-fine strategies)
    • %|% - Parallel racing (pick best result)
    • with_restarts() - Multiple random starting points
    • unless_converged() - Conditional refinement
  • Problem Specification: New mle_problem() separates the statistical problem from optimization strategy
  • New Solvers: bfgs(), lbfgsb(), nelder_mead(), random_search(), fisher_scoring()
  • Tracing: mle_trace() for configurable iteration diagnostics
  • Transformers: with_subsampling(), with_penalty() (L1/L2/elastic net)

Example

# Define problem once
problem <- mle_problem(loglike, score, constraint = mle_constraint(...))

# Create composable strategy
strategy <- grid_search(n = 5) %>>% gradient_ascent() %>>% newton_raphson()

# Or race different methods
strategy <- gradient_ascent() %|% bfgs() %|% nelder_mead()

# Solve
result <- strategy(problem, theta0)

Testing

All 255 tests passing.

v0.1.0 - Initial Release

Choose a tag to compare

@queelius queelius released this 25 Nov 04:34

numerical.mle v0.1.0

Initial release of the numerical.mle R package for numerical maximum likelihood estimation.

Features

Configuration System

  • mle_config() - Base configuration for convergence criteria
  • mle_config_gradient() - Gradient descent with fixed learning rate
  • mle_config_linesearch() - Adaptive step size via backtracking line search
  • mle_constraint() - Domain constraints with support checking and projection

Core Solvers

  • mle_gradient_ascent() - First-order gradient-based optimization
  • mle_newton_raphson() - Second-order optimization using Fisher information

Meta-Solvers

  • mle_grid_search() - Exhaustive grid search over parameter space
  • mle_random_restart() - Multiple random initializations for global optimization

Function Transformers

  • with_subsampling() - Stochastic gradient ascent via mini-batching
  • with_penalty() - Regularization with L1, L2, or elastic net penalties

Convenience Wrappers

  • mle_grad() - Quick gradient ascent with sensible defaults
  • mle_nr() - Quick Newton-Raphson with sensible defaults
  • with_constraint() - Apply constraints to any solver

Installation

# Install from GitHub
devtools::install_github("queelius/numerical.mle")

Documentation

Full documentation available at: https://queelius.github.io/numerical.mle/