This package includes statistical algorithms, including but not limited to:
@safe pure nothrow
void main()
{
import mir.algorithm.iteration: all;
import mir.math.common: approxEqual, pow;
import mir.test: shouldApprox;
// mir.stat.descriptive
import mir.stat.descriptive.univariate: mean, kurtosis;
auto x = [1.0, 2, 3, 4];
x.mean.shouldApprox == 2.5;
x.kurtosis.shouldApprox == -1.2;
// mir.stat.distribution
import mir.stat.distribution.binomial: binomialPMF;
4.binomialPMF(6, 2.0 / 3).shouldApprox == (15.0 * pow(2.0 / 3, 4) * pow(1.0 / 3, 2));
// mir.stat.transform
import mir.stat.transform: zscore;
assert(x.zscore.all!approxEqual([-1.161895, -0.387298, 0.387298, 1.161895]));
// mir.stat.inference
import mir.stat.inference: dAgostinoPearsonTest;
auto y = [0.0, 1.0, 1.5, 2.0, 3.5, 4.25,
2.0, 7.5, 5.0, 1.0, 1.5, 0.0];
double p;
y.dAgostinoPearsonTest(p).shouldApprox == 4.151936053369771;
}See the benchmark subpackage for selectable statistical benchmarks and their command-line runner.
Gamma inverse-CDF tests with very large shapes run by default with a DMD
frontend version of 2.113 or newer, including corresponding LDC and GDC
versions. Phobos fixed the large-shape performance issue in DMD 2.112.1
(issue 10920), but __VERSION__
does not distinguish 2.112.0 from 2.112.1. The automatic gate therefore starts
conservatively at 2.113. Phobos versions without the fix can take an
impractically long time on these inputs.
To run them on 2.112.1, or opt in regardless of frontend version, run:
dub test --build=unittest-extreme-numericsThis opt-in build is separate from unittest-slow-numerics and is not run
by the routine CI matrix.