---
sidebar_position: 7
---

import { SquiggleEditor } from "../src/components/SquiggleEditor";

# Squiggle Functions Reference

## Distributions

### Normal distribution

The `normal(mean, sd)` function creates a normal distribution with the given mean
and standard deviation.

<SquiggleEditor initialSquiggleString="normal(5, 1)" />

### Uniform distribution

The `uniform(low, high)` function creates a uniform distribution between the
two given numbers.

<SquiggleEditor initialSquiggleString="uniform(3, 7)" />

### Lognormal distribution

The `lognormal(mu, sigma)` returns the log of a normal distribution with parameters
mu and sigma. The log of lognormal(mu, sigma) is a normal distribution with parameters
mean mu and standard deviation sigma.

<SquiggleEditor initialSquiggleString="lognormal(0, 0.7)" />

An alternative format is also available. The "to" notation creates a lognormal
distribution with a 90% confidence interval between the two numbers. We add
this convinience as lognormal distributions are commonly used in practice.

<SquiggleEditor initialSquiggleString="2 to 10" />

Furthermore, it's also possible to create a lognormal from it's actual mean
and standard deviation, using `lognormalFromMeanAndStdDev`.

<SquiggleEditor initialSquiggleString="lognormalFromMeanAndStdDev(20, 10)" />

### Beta distribution

The `beta(a, b)` function creates a beta distribution with parameters a and b:

<SquiggleEditor initialSquiggleString="beta(20, 20)" />

### Exponential distribution

The `exponential(mean)` function creates an exponential distribution with the given
mean.

<SquiggleEditor initialSquiggleString="exponential(1)" />

### The Triangular distribution

The `triangular(a,b,c)` function creates a triangular distribution with lower
bound a, mode b and upper bound c.

<SquiggleEditor initialSquiggleString="triangular(1, 2, 4)" />

### Multimodal distriutions

The multimodal function combines 2 or more other distributions to create a weighted
combination of the two. The first positional arguments represent the distributions
to be combined, and the last argument is how much to weigh every distribution in the
combination.

<SquiggleEditor initialSquiggleString="mm(uniform(0,1), normal(1,1), [0.5, 0.5])" />

It's possible to create discrete distributions using this method.

<SquiggleEditor initialSquiggleString="mm(0, 1, [0.2,0.8])" />

As well as mixed distributions:

<SquiggleEditor initialSquiggleString="mm(3, 8, 1 to 10, [0.2, 0.3, 0.5])" />

## Other Functions

### PDF of a distribution

The `pdf(distribution, x)` function returns the density of a distribution at the
given point x.

<SquiggleEditor initialSquiggleString="pdf(normal(0,1),0)" />

### Inverse of a distribution

The `inv(distribution, prob)` gives the value x or which the probability for all values
lower than x is equal to prob. It is the inverse of `cdf`.

<SquiggleEditor initialSquiggleString="inv(normal(0,1),0.5)" />

### CDF of a distribution

The `cdf(distribution,x)` gives the cumulative probability of the distribution
or all values lower than x. It is the inverse of `inv`.

<SquiggleEditor initialSquiggleString="cdf(normal(0,1),0)" />

### Mean of a distribution

The `mean(distribution)` function gives the mean (expected value) of a distribution.

<SquiggleEditor initialSquiggleString="mean(normal(5, 10))" />

### Sampling a distribution

The `sample(distribution)` samples a given distribution.

<SquiggleEditor initialSquiggleString="sample(normal(0, 10))" />
