--- sidebar_position: 2 title: Distribution --- import TOCInline from '@theme/TOCInline'; ## Creation ### Normal Distribution **Definitions** ```javascript normal(frValueDistOrNumber, frValueDistOrNumber); ``` ```javascript normal(dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) ``` ```javascript normal(dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) ``` **Examples** ```javascript 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 }, ]); ``` ### 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. **Definitions** ```javascript declareFn(dict<{fn: lambda, inputs: array>}>) ``` **Examples** ```javascript declareFn({ fn: {|a,b| a }, inputs: [ {min: 0, max: 100}, {min: 30, max: 50} ] }) ``` ## Functions ### mixture ```javascript (...distributionLike, weights:list):distribution ``` **Examples** ```javascript mixture(normal(5, 1), normal(10, 1)); ``` ### sample Get one random sample from the distribution ```javascript (distribution):number ``` **Examples** ```javascript sample(normal(5, 2)); ``` ### sampleN Get n random samples from the distribution ```javascript (distribution, number):list ``` **Examples** ```javascript sample(normal(5, 2), 100); ``` ### mean Get the distribution mean ```javascript (distribution):number ``` **Examples** ```javascript mean(normal(5, 2)); ``` ### stdev ```javascript (distribution):number ``` ### variance ```javascript (distribution):number ``` ### mode ```javascript (distribution):number ``` ### cdf ```javascript (distribution, number):number ``` **Examples** ```javascript cdf(normal(5, 2), 3); ``` ### pdf ```javascript (distribution, number):number ``` **Examples** ```javascript pdf(normal(5, 2), 3); ``` ### pmf ```javascript (distribution, number):number ``` **Examples** ```javascript pmf(bernoulli(0.3), 0); // 0.7 ``` ### inv ```javascript (distribution, number):number ``` **Examples** ```javascript inv(normal(5, 2), 0.5); ``` ### toPointSet Converts a distribution to the pointSet format ```javascript (distribution):pointSetDistribution ``` **Examples** ```javascript toPointSet(normal(5, 2)); ``` ### toSampleSet Converts a distribution to the sampleSet format, with n samples ```javascript (distribution,n):sampleSetribution ``` **Examples** ```javascript toSampleSet(normal(5, 2)); ``` ### truncateLeft Truncates the left side of a distribution. Returns either a pointSet distribution or a symbolic distribution. ```javascript (distribution, l:number, {normalize: boolean=true}):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 (distribution, r:number, {normalize: boolean=true}):distribution ``` **Examples** ```javascript truncateLeft(normal(5, 2), 6); ``` ## Scoring ### klDivergence Kullback–Leibler divergence between two distributions ```javascript (distribution, distribution):number ``` **Examples** ```javascript klDivergence(normal(5, 2), normal(5, 4)); // returns 0.57 ``` ### logScore ```javascript ({estimate: distribution, prior?: distribution, answer: distribution|number}):number ``` **Examples** ```javascript logScore({ estimate: normal(5, 2), prior: normal(5.5, 4), answer: 2.3 }); ``` ## Display ### toString ```javascript (distribution):string ``` **Examples** ```javascript toString(normal(5, 2)); ``` ### toSparkline Produce a sparkline of length n ```javascript (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 (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 (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 (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 (distribution):number ``` **Examples** ```javascript integralSum(normal(5, 2)); ``` ## Algebra1 ### add ```javascript (distributionLike, distributionLike): distribution ``` ### sum ```javascript (list): distribution ``` ### multiply ```javascript (distributionLike, distributionLike): distribution ``` ### product ```javascript (list): distribution ``` ### subtract ```javascript (distributionLike, distributionLike): distribution ``` ### divide ```javascript (distributionLike, distributionLike): distribution ``` ### pow ```javascript (distributionLike, distributionLike): distribution ``` ### exp ```javascript (distributionLike, distributionLike): distribution ``` ### log ```javascript (distributionLike, distributionLike): distribution ``` ### log10 ```javascript (distributionLike, distributionLike):distribution ``` ### unaryMinus ```javascript (distribution):distribution ``` ## Algebra2 ### dotAdd ```javascript (distributionLike, distributionLike): distribution ``` ### dotSum ```javascript (list): distribution ``` ### dotMultiply ```javascript (distributionLike, distributionLike): distribution ``` ### dotProduct ```javascript (list): distribution ``` ### dotSubtract ```javascript (distributionLike, distributionLike): distribution ``` ### dotDivide ```javascript (distributionLike, distributionLike): distribution ``` ### dotPow ```javascript (distributionLike, distributionLike): distribution ``` ### dotExp ```javascript (distributionLike, distributionLike): distribution ``` ## Algebra3 ### scaleMultiply ```javascript (distributionLike, distributionLike): distribution ``` ### scalePow ```javascript (distributionLike, distributionLike): distribution ``` ### scaleExp ```javascript (distributionLike, distributionLike): distribution ``` ### scaleLog ```javascript (distributionLike, distributionLike): distribution ``` ### scaleLog10 ```javascript (distributionLike, distributionLike): distribution ``` ### scaleLogWithThreshold ```javascript (distributionLike, distributionLike, number): distribution ```