package prbnmcn-stats

  1. Overview
  2. Docs

Gen allows to manipulate generative probabilities (ie samplers).

type state

Follows the module type of a sampling-based monad

include Basic_structures.Basic_intf.Monad with type 'a t = (state, 'a) gen and type 'a res = (state, 'a) gen
type 'a t = (state, 'a) gen

'a t is the type of computations of type 'a

type 'a res = (state, 'a) gen

'a res is the outcome of running a computation of type 'a

val return : 'a -> 'a t

return x injects a value x as a computation

val bind : 'a t -> ('a -> 'b t) -> 'b t

Monadic bind

val map : 'a t -> ('a -> 'b) -> 'b t

Functorial map

val run : 'a t -> 'a res

Running a monadic computation

module Infix : sig ... end
val iid : 'a t -> 'a Seq.t t

iid gen transforms a sampler into a sequence sampler.

val float : float -> float t

float bound samples uniformly in 0; bound

val int : int -> int t

int bound samples uniformly in 0; bound-1

val bool : bool t

bool samples a boolean uniformly

val uniform : 'a array -> 'a t

uniform elts samples an element of the elts array by sampling an index uniformly.

  • raises Invalid_argument

    if elts has length equal to 0

val bernoulli : float -> bool t

bernoulli alpha samples true with probability alpha.

  • raises Invalid_argument

    if alpha is not in the 0;1 interval.

val geometric : float -> int t

geometric p samples a nonnegative integer according to the geometric law of parameter p.

  • raises Invalid_argument

    if p <= 0 || p > 1

val subsample : n:int -> 'a t -> 'a t

subsample ~n gen samples one out of n samples from gen.

val of_empirical : 'a emp -> 'a t

of_empirical emp samples from emp matching exactly the empirical frequencies.

val exponential : rate:float -> float t

Exponential distribution via inverse CDF.

  • raises Invalid_argument

    if rate <=. 0.0.

val box_muller : mean:float -> std:float -> (float * float) t

Gaussian distribution via Box-Muller transform. Returns a pair of independent gaussian variates with prescribed mean and standard deviation.

  • raises Invalid_argument

    if std <= 0.0

val gaussian : mean:float -> std:float -> float t

Gaussian distribution (wrapper over box-muller transform).

  • raises Invalid_argument

    if std <= 0.0

val poisson : lambda:float -> int t

Poisson distribution via inverse transform. Consider using other methods for large lambda.

  • raises Invalid_argument

    if lambda <= 0.0

val range : range -> float t

Samples uniformly in the given range.

  • raises Invalid_argument

    if range is empty.

val gamma : shape:float -> scale:float -> float t

Gamma distribution.

val categorical : ('a * float) array -> 'a t

Categorical distribution. Total mass need not be one. Does not aggregate mass of equal elements.

  • raises Invalid_argument

    if some weights are negative or if the total mass is zero.

val without_replacement : int -> 'a list -> ('a list * 'a list) t

sample_without_replacement n l samples a subset of size n from l without replacement.

  • raises Invalid_argument

    if n > List.length l.

module Rational : sig ... end