normix Documentation
normix is a JAX package for Generalized Hyperbolic distributions and related distributions, implemented as exponential families. Built on Equinox with Float64 precision throughout.
import jax
import jax.numpy as jnp
from normix import GeneralizedHyperbolic, BatchEMFitter
# Fit Generalized Hyperbolic to data via EM
key = jax.random.PRNGKey(0)
X = jax.random.normal(key, (1000, 3))
model = GeneralizedHyperbolic.default_init(X)
result = model.fit(X, max_iter=100)
# Evaluate log-density (batched via vmap)
log_p = jax.vmap(result.model.log_prob)(X)
Key Features
Exponential family structure — three parametrizations (classical, natural, expectation) with automatic conversion via
jax.gradFull GH distribution family — Gamma, Inverse Gamma, Inverse Gaussian, GIG, Variance Gamma, Normal-Inverse Gamma, Normal-Inverse Gaussian, Generalized Hyperbolic
EM algorithm — batch, online, and mini-batch EM with CPU/GPU hybrid backend
JAX-native — JIT-compiled, differentiable,
vmap-compatibleImmutable — all distributions are
eqx.Modulepytrees; M-step returns a new modelHybrid CPU/JAX backend — up to 15× faster EM via
scipyBessel evaluation on CPU
Contents:
- Quick Start
- Design Decisions
- Architecture
- Mathematical Background
- The Generalized Inverse Gaussian Distribution
- The Generalized Hyperbolic Distribution
- EM Algorithm for Generalized Hyperbolic Distributions
- Shrinkage with Penalized Likelihood
- Factor Analysis for Generalized Hyperbolic Distributions
- Online EM Algorithm
- Mean-Risk Optimization for Normal Mixture Distributions
- CVaR Derivatives for Normal Mixture Distributions
- Portfolio Optimization with Transaction Costs
- Effective Number of Bets and Minimum Torsion
- Generalized Effective Number of Bets
- References
- API Reference