--- sidebar_position: 3 title: Distribution --- import TOCInline from "@theme/TOCInline"; ## Distribution Creation ### Normal Distribution **Definitions** ```javascript normal: (frValueDistOrNumber, frValueDistOrNumber); ``` ```javascript normal: (dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) ``` ```javascript normal: (dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) ``` **Examples** ```js normal(5, 1); normal({ p5: 4, p95: 10 }); normal({ mean: 5, stdev: 2 }); ``` ### Lognormal Distribution **Definitions** ```javascript lognormal: (frValueDistOrNumber, frValueDistOrNumber); ``` ```javascript lognormal: (dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) ``` ```javascript lognormal: (dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) ``` **Examples** ```javascript lognormal(0.5, 0.8); lognormal({ p5: 4, p95: 10 }); lognormal({ mean: 5, stdev: 2 }); ``` ### Uniform Distribution **Definitions** ```javascript uniform: (frValueDistOrNumber, frValueDistOrNumber); ``` **Examples** ```javascript uniform(10, 12); ``` ### Beta Distribution **Definitions** ```javascript beta: (frValueDistOrNumber, frValueDistOrNumber); ``` **Examples** ```javascript beta(20, 25); ``` ### Cauchy Distribution **Definitions** ```javascript cauchy: (frValueDistOrNumber, frValueDistOrNumber); ``` **Examples** ```javascript cauchy(5, 1); ``` ### Gamma Distribution **Definitions** ```javascript gamma: (frValueDistOrNumber, frValueDistOrNumber); ``` **Examples** ```javascript gamma(5, 1); ``` ### Logistic Distribution **Definitions** ```javascript logistic: (frValueDistOrNumber, frValueDistOrNumber); ``` **Examples** ```javascript gamma(5, 1); ``` ### To (Distribution) **Definitions** ```javascript to: (frValueDistOrNumber, frValueDistOrNumber); ``` ```javascript credibleIntervalToDistribution(frValueDistOrNumber, frValueDistOrNumber); ``` **Examples** ```javascript 5 to 10 to(5,10) -5 to 5 ``` ### Exponential **Definitions** ```javascript exponential: (frValueDistOrNumber); ``` **Examples** ```javascript exponential(2); ``` ### Bernoulli **Definitions** ```javascript bernoulli: (frValueDistOrNumber); ``` **Examples** ```javascript bernoulli(0.5); ``` ### toContinuousPointSet Converts a set of points to a continuous distribution **Definitions** ```javascript toContinuousPointSet: (array>) ``` **Examples** ```javascript toContinuousPointSet([ { x: 0, y: 0.1 }, { x: 1, y: 0.2 }, { x: 2, y: 0.15 }, { x: 3, y: 0.1 }, ]); ``` ### toDiscretePointSet Converts a set of points to a discrete distribution **Definitions** ```javascript toDiscretePointSet: (array>) ``` **Examples** ```javascript toDiscretePointSet([ { x: 0, y: 0.1 }, { x: 1, y: 0.2 }, { x: 2, y: 0.15 }, { x: 3, y: 0.1 }, ]); ``` ## Functions ### mixture ```javascript mixture: (...distributionLike, weights:list) => distribution ``` **Examples** ```javascript mixture(normal(5, 1), normal(10, 1)); mx(normal(5, 1), normal(10, 1), [0.3, 0.7]); ``` ### sample Get one random sample from the distribution ```javascript sample(distribution) => number ``` **Examples** ```javascript sample(normal(5, 2)); ``` ### sampleN Get n random samples from the distribution ```javascript sampleN: (distribution, number):list ``` **Examples** ```javascript sample: (normal(5, 2), 100); ``` ### mean Get the distribution mean ```javascript mean: (distribution) => number ``` **Examples** ```javascript mean: (normal(5, 2)); ``` ### stdev ```javascript stdev: (distribution) => number ``` ### variance ```javascript variance: (distribution) => number ``` ### mode ```javascript mode: (distribution) => number ``` ### cdf ```javascript cdf: (distribution, number) => number ``` **Examples** ```javascript cdf: (normal(5, 2), 3); ``` ### pdf ```javascript pdf: (distribution, number) => number ``` **Examples** ```javascript pdf: (normal(5, 2), 3); ``` ### inv ```javascript inv: (distribution, number) => number ``` **Examples** ```javascript inv(normal(5, 2), 0.5); ``` ### toPointSet Converts a distribution to the pointSet format ```javascript toPointSet: (distribution):pointSetDistribution ``` **Examples** ```javascript toPointSet(normal(5, 2)); ``` ### toSampleSet Converts a distribution to the sampleSet format, with n samples ```javascript toSampleSet: (distribution,number):sampleSetDistribution ``` **Examples** ```javascript toSampleSet(normal(5, 2), 1000); ``` ### truncateLeft Truncates the left side of a distribution. Returns either a pointSet distribution or a symbolic distribution. ```javascript truncateLeft: (distribution, l => number) => distribution ``` **Examples** ```javascript truncateLeft(normal(5, 2), 3); ``` ### truncateRight Truncates the right side of a distribution. Returns either a pointSet distribution or a symbolic distribution. ```javascript truncateRight: (distribution, r => number) => distribution ``` **Examples** ```javascript truncateLeft(normal(5, 2), 6); ``` ## Scoring ### klDivergence Kullback–Leibler divergence between two distributions ```javascript klDivergence: (distribution, distribution) => number ``` **Examples** ```javascript klDivergence(normal(5, 2), normal(5, 4)); // returns 0.57 ``` ## Display ### toString ```javascript : (distribution) => string ``` **Examples** ```javascript toString(normal(5, 2)); ``` ### toSparkline Produce a sparkline of length n ```javascript toSparkline: (distribution, n=20) => string ``` **Examples** ```javascript toSparkline(normal(5, 2), 10); ``` ### inspect Prints the value of the distribution to the Javascript console, then returns the distribution. ```javascript inspect: (distribution) => distribution ``` **Examples** ```javascript inspect(normal(5, 2)); ``` ## Normalization ### normalize Normalize a distribution. This means scaling it appropriately so that it's cumulative sum is equal to 1. ```javascript normalize: (distribution) => distribution ``` **Examples** ```javascript normalize(normal(5, 2)); ``` ### isNormalized Check of a distribution is normalized. Most distributions are typically normalized, but there are some commands that could produce non-normalized distributions. ```javascript isNormalized: (distribution):bool ``` **Examples** ```javascript isNormalized(normal(5, 2)); // returns true ``` ### integralSum Get the sum of the integral of a distribution. If the distribution is normalized, this will be 1. ```javascript integralSum: (distribution) => number ``` **Examples** ```javascript integralSum(normal(5, 2)); ``` ## Algebraic Operations ### add ```javascript add: (distributionLike, distributionLike) => distribution ``` ### sum ```javascript sum: (list) => distribution ``` ### multiply ```javascript multiply: (distributionLike, distributionLike) => distribution ``` ### product ```javascript product: (list) => distribution ``` ### subtract ```javascript subtract: (distributionLike, distributionLike) => distribution ``` ### divide ```javascript divide: (distributionLike, distributionLike) => distribution ``` ### pow ```javascript pow: (distributionLike, distributionLike) => distribution ``` ### exp ```javascript exp: (distributionLike, distributionLike) => distribution ``` ### log ```javascript log: (distributionLike, distributionLike) => distribution ``` ### log10 ```javascript log10: (distributionLike, distributionLike) => distribution ``` ### unaryMinus ```javascript unaryMinus: (distribution) => distribution ``` ## Pointwise Operations ### dotAdd ```javascript dotAdd: (distributionLike, distributionLike) => distribution ``` ### dotMultiply ```javascript dotMultiply: (distributionLike, distributionLike) => distribution ``` ### dotSubtract ```javascript dotSubtract: (distributionLike, distributionLike) => distribution ``` ### dotDivide ```javascript dotDivide: (distributionLike, distributionLike) => distribution ``` ### dotPow ```javascript dotPow: (distributionLike, distributionLike) => distribution ``` ### dotExp ```javascript dotExp: (distributionLike, distributionLike) => distribution ``` ## Scale Operations ### scaleMultiply ```javascript scaleMultiply: (distributionLike, number) => distribution ``` ### scalePow ```javascript scalePow: (distributionLike, number) => distribution ``` ### scaleExp ```javascript scaleExp: (distributionLike, number) => distribution ``` ### scaleLog ```javascript scaleLog: (distributionLike, number) => distribution ``` ### scaleLog10 ```javascript scaleLog10: (distributionLike, number) => distribution ``` ## Special ### Declaration (Continuous Function) Adds metadata to a function of the input ranges. Works now for numeric and date inputs. This is useful when making predictions. It allows you to limit the domain that your prediction will be used and scored within. ```javascript declareFn: (dict<{fn: lambda, inputs: array>}>) ``` **Examples** ```javascript declareFn({ fn: {|a,b| a }, inputs: [ {min: 0, max: 100}, {min: 30, max: 50} ] }) ```