Hi everyone,
I’m happy to announce AdditionalDistributions.jl v0.2.1.
AdditionalDistributions.jl extends the Distributions.jl ecosystem with additional univariate and multivariate probability distributions.
This announcement summarizes the v0.2 series. The main multivariate CDF functionality was introduced in v0.2.0, while v0.2.1 consolidates the release with bug fixes, compatibility updates, improved documentation, and tested ecosystem examples.
Repository:
Documentation:
Main focus: multivariate rectangular probabilities
The main focus of the v0.2 series is rectangular CDF evaluation for multivariate distributions:
MvGaussian
MvTStudent
The package supports calls such as:
cdf(d, lower, upper)
cdf_result(d, lower, upper)
where cdf_result returns diagnostic information:
res.value # estimated probability
res.error # error estimate
res.inform # convergence/tolerance diagnostic
res.neval # number of evaluations
res.algorithm # algorithm label
For MvGaussian, the implementation uses randomized quasi-Monte Carlo methods for rectangular probabilities. The documentation includes benchmark comparisons with MvNormalCDF.jl, which provides a natural Julia-side reference point for multivariate normal probabilities.
For MvTStudent, the implementation uses a Gaussian conditional representation with a radial mixing variable. This is important because, unlike the Gaussian case, a diagonal scale matrix does not make Student-t coordinates independent: the common radial scale still induces dependence. Selected Student-t reference cases were checked against R reference values using mvtnorm-style parameterization with sigma = Σ and delta = 0.
Benchmarks and reproducibility
The documentation includes benchmark and reproducibility notes for the multivariate CDF routines.
In the tested benchmark cases, the implementation shows competitive timings while remaining integrated with the Distributions.jl interface.
The goal is not to claim that AdditionalDistributions.jl replaces every specialized multivariate probability library. Rather, the goal is to provide a native Julia implementation that:
- works naturally with
Distributions.jl, - supports both multivariate Gaussian and Student-t rectangular probabilities,
- exposes useful diagnostic information through
cdf_result, - provides reproducible benchmark settings,
- and can be used directly in statistical Julia workflows.
Tests and fixes
The v0.2 series adds and improves test coverage for the multivariate routines, including reference tests, numerical invariant tests, diagnostic API tests for cdf_result, keyword-control tests, selected univariate reference tests, and regression tests for previously fixed issues.
It also includes several fixes and improvements:
- improved
MvGaussianrectangular CDF evaluation, - improved
MvTStudentintegration controls, - added diagnostic
cdf_resultoutput, - fixed the
Lomaxquantile endpoint atp = 1, - added
rand(rng, d, n)andlength(d)support forMvGaussianandMvTStudent, - relaxed the
MvTStudentwrapper type to support currentDistributions.jlmultivariate Student-t constructors, - updated compatibility bounds for Julia,
LambertW,Roots,StatsBase, andStatistics.
Ecosystem examples
Version v0.2.1 adds tested examples showing how AdditionalDistributions.jl can be used with:
Distributions.jl,HypothesisTests.jl,Copulas.jl,Turing.jl,StatsBase.jl.
The examples cover basic API usage, heavy-tailed risk models, count models, multivariate CDFs, multivariate hypothesis testing, copula-based modeling with SklarDist, and Bayesian modeling with Turing.jl.
The reproducible scripts are available under:
examples/scripts/
and are summarized in the documentation.
Limitations
The inform flag is a numerical diagnostic.
inform == 0 means that the requested tolerance was reached.
inform == 1 means that the requested tolerance was not reached with the chosen computational budget. This does not necessarily mean that the result is invalid; users should inspect the reported error estimate and may need to increase m, relax tolerances, or adjust the integration settings.
The multivariate Student-t CDF is generally more computationally demanding than the Gaussian case, especially in higher dimensions or difficult rectangular regions.
Installation
using Pkg
Pkg.add("AdditionalDistributions")
Feedback, issues, benchmark comparisons, and suggestions are very welcome.