648 lines
9.4 KiB
Plaintext
648 lines
9.4 KiB
Plaintext
---
|
||
sidebar_position: 3
|
||
title: Distribution
|
||
---
|
||
|
||
import TOCInline from "@theme/TOCInline";
|
||
|
||
<TOCInline toc={toc} />
|
||
|
||
## Distribution Creation
|
||
|
||
### Normal Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
normal: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
```javascript
|
||
normal: (dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) => distribution
|
||
```
|
||
|
||
```javascript
|
||
normal: (dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) => distribution
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```js
|
||
normal(5, 1);
|
||
normal({ p5: 4, p95: 10 });
|
||
normal({ mean: 5, stdev: 2 });
|
||
```
|
||
|
||
### Lognormal Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
lognormal: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
```javascript
|
||
lognormal: (dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) => distribution
|
||
```
|
||
|
||
```javascript
|
||
lognormal: (dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) => distribution
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
lognormal(0.5, 0.8);
|
||
lognormal({ p5: 4, p95: 10 });
|
||
lognormal({ mean: 5, stdev: 2 });
|
||
```
|
||
|
||
### Uniform Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
uniform: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
uniform(10, 12);
|
||
```
|
||
|
||
### Beta Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
beta: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
beta(20, 25);
|
||
```
|
||
|
||
### Cauchy Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
cauchy: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
cauchy(5, 1);
|
||
```
|
||
|
||
### Gamma Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
gamma: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
gamma(5, 1);
|
||
```
|
||
|
||
### Logistic Distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
logistic: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
gamma(5, 1);
|
||
```
|
||
|
||
### To (Distribution)
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
to: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
```javascript
|
||
credibleIntervalToDistribution(frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
5 to 10
|
||
to(5,10)
|
||
-5 to 5
|
||
```
|
||
|
||
### Exponential
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
exponential: (frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
exponential(2);
|
||
```
|
||
|
||
### Bernoulli
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
bernoulli: (frValueDistOrNumber) => distribution;
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
bernoulli(0.5);
|
||
```
|
||
|
||
### toContinuousPointSet
|
||
|
||
Converts a set of points to a continuous distribution
|
||
|
||
**Definitions**
|
||
|
||
```javascript
|
||
toContinuousPointSet: (array<dict<{x: numeric, y: numeric}>>) => distribution
|
||
```
|
||
|
||
**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<dict<{x: numeric, y: numeric}>>) => distribution
|
||
```
|
||
|
||
**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<float>) => 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<number>
|
||
```
|
||
|
||
**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
|
||
toString: (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<distributionLike>) => distribution
|
||
```
|
||
|
||
### multiply
|
||
|
||
```javascript
|
||
multiply: (distributionLike, distributionLike) => distribution;
|
||
```
|
||
|
||
### product
|
||
|
||
```javascript
|
||
product: (list<distributionLike>) => 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<dict<{min: number, max: number}>>}>) => declaration
|
||
```
|
||
|
||
**Examples**
|
||
|
||
```javascript
|
||
declareFn({
|
||
fn: {|a,b| a },
|
||
inputs: [
|
||
{min: 0, max: 100},
|
||
{min: 30, max: 50}
|
||
]
|
||
})
|
||
```
|