March Docs

Stats

Stats module: descriptive statistics on List(Float).

All functions are pure — no side effects. Primary input type: List(Float).

Functions that require non-empty input panic on empty list. sum and count always succeed (return 0.0 / 0 for empty).

Design: all sorting uses List.sort_by with Float comparison. Variance uses Welford's online algorithm for numerical stability.

Functions

fnsumsum(xs : List(Float)) : Float#

Sum of all elements. Returns 0.0 for empty list.

fncountcount(xs : List(Float)) : Int#

Number of elements.

fnmeanmean(xs : List(Float)) : Float#

Arithmetic mean. Panics on empty list.

fnmin_valmin_val(xs : List(Float)) : Float#

Minimum value. Panics on empty list.

fnmax_valmax_val(xs : List(Float)) : Float#

Maximum value. Panics on empty list.

fnpercentilepercentile(xs : List(Float), p : Float) : Float#

Percentile using linear interpolation. p must be in [0.0, 100.0]. Panics on empty list or out-of-range p.

fnmedianmedian(xs : List(Float)) : Float#

Median (50th percentile). Panics on empty list.

fnvariancevariance(xs : List(Float)) : Float#

Sample variance (denominator n-1). Returns 0.0 for a single element. Panics on empty list.

fnvariance_popvariance_pop(xs : List(Float)) : Float#

Population variance (denominator n). Returns 0.0 for a single element or empty list.

fnstd_devstd_dev(xs : List(Float)) : Float#

Sample standard deviation. Returns 0.0 for single element. Panics on empty.

fnstd_dev_popstd_dev_pop(xs : List(Float)) : Float#

Population standard deviation.

fnmodemode(xs : List(Float)) : Float#

Mode: the most frequently occurring value. When there are ties, returns the first value encountered (in sorted order). Panics on empty list.

fncovariancecovariance(xs : List(Float), ys : List(Float)) : Float#

Sample covariance of two equal-length lists. Panics if lengths differ or if either list has fewer than 2 elements.

fncorrelationcorrelation(xs : List(Float), ys : List(Float)) : Float#

Pearson correlation coefficient. Returns value in [-1, 1]. Panics if lists have different lengths, fewer than 2 elements, or if either list has zero standard deviation.

fnlinear_regressionlinear_regression(xs : List(Float), ys : List(Float)) : (Float, Float)#

Simple linear regression: y = slope * x + intercept. Returns (slope, intercept). Panics if lists have different lengths or fewer than 2 elements, or if xs has zero variance (vertical line).

fnmean_safemean_safe(xs : List(Float)) : Result(Float, String)#

Mean, returning Err on empty list instead of panicking.

fnvariance_safevariance_safe(xs : List(Float)) : Result(Float, String)#

Sample variance, returning Err on empty list.

fnstd_dev_safestd_dev_safe(xs : List(Float)) : Result(Float, String)#

Sample standard deviation, returning Err on empty or single-element list.

fnmin_safemin_safe(xs : List(Float)) : Result(Float, String)#

Minimum value, returning Err on empty list.

fnmax_safemax_safe(xs : List(Float)) : Result(Float, String)#

Maximum value, returning Err on empty list.