# Probability Distributions¶

The distributions available for use in PoPy models are shown in Table 60:-

Name | Syntax | Type |
---|---|---|

Uniform | x ~ unif(min_x, max_x) init_x | continuous univariate |

Normal | y ~ norm(mean, var) | continuous univariate |

Multi Normal | y_vec ~ mnorm(mean_vec, var_mat) | continuous multivariate |

Bernoulli | y ~ bernoulli(p) | discrete univariate |

Poisson | y ~ poisson(p) | discrete univariate |

Negative Binomial | y ~ negbinomial(p, r) | discrete univariate |

## Uniform Distribution¶

Uniform is a continuous univariate distribution, written as:-

```
x ~ unif(min_x, max_x) init_x
```

The uniform distribution is used to define a range of values for an unknown scalar that you wish PoPy to estimate.

The input parameters are:-

- min_x - the
**minimum**value that variable ‘x’ is allowed to take during estimation. - max_x - the
**maximum**value that variable ‘x’ is allowed to take during estimation. - init_x - the
**initial**value that variable ‘x’ takes at the start of estimation.

The output ‘x’ and inputs ‘min_x’, ‘max_x’, ‘init_x’ are all continuous values.

For more information see Uniform Distribution on Wikipedia.

### Uniform Distribution Examples¶

You use the Uniform Distribution in the EFFECTS section of a PoPy Fit Script as follows:-

```
f[KE] ~ unif(0.001, 100) 0.05
```

The above expressions limits the `f[KE]`

variable to the range [0.001, 100] with an initial starting value of 0.05.

Alternatively you can do:-

```
f[KE] ~ unif(0.001, +inf) 0.05
```

Which limits `f[KE]`

to be greater than 0.001. Note the an equivalent shortcut is available as follows:-

```
f[KE] ~ P 0.05
```

Where ‘P’ stands for +ve. You can also have an unconstrained variable as follows:-

```
f[KE] ~ U 0.05
```

Where ‘U’ stands for unlimited. The equivalent long form is:-

```
f[KE] ~ unif(-inf, +inf) 0.05
```

## Normal Distribution¶

The Normal distribution is used for continuous variables and written in PoPy as:-

```
x ~ norm(mean, var)
```

The Normal models a Gaussian distribution with two parameters ‘mean’ and ‘var’.

The input parameters are:-

- mean - the expected value of the Normal
- var - the variance of the Normal

The output ‘x’ and inputs ‘mean’, ‘var’ are all continuous values

For more information see Normal Distribution on Wikipedia.

### Normal Random Effect Example¶

You can use the Normal Distribution in the EFFECTS section of a PoPy script, to define a `r[X]`

random effect variable as follows:-

```
EFFECTS:
ID: |
r[KE] ~ norm(0, f[KE_isv])
```

Here the `r[KE]`

scalar variable is defined as a normal with mean zero and positive scalar variance `f[KE_isv]`

.

`r[KE]`

is defined at the ‘ID’ level, so each individual in the population has an independent sample of this normal distribution.

### Normal Likelihood Example¶

You can use the Normal Distribution in the PREDICTIONS section of a PoPy Fit Script as follows:-

```
PREDICTIONS:
p[DV_CENTRAL] = s[CENTRAL]/m[V1]
var = m[ANOISE]**2 + m[PNOISE]**2 * p[DV_CENTRAL]**2
c[DV_CENTRAL] ~ norm(p[DV_CENTRAL], var)
```

The above syntax in a Fit Script specifies the likelihood of the observed `c[DV_CENTRAL]`

observation from the data file, when modelled as a Normal variable, with mean p[DV_CENTRAL] and variance ‘var’.

## Multivariate Normal Distribution¶

Multivariate-Normal distribution is used for vectors of continuous variables and written like this:-

```
output_vector ~ mnorm(mean_vector, covariance_matrix)
```

The Multivariate Normal is a generalisation of the Normal Distribution with two parameters ‘mean_vector’ and ‘covariance_matrix’, as follows:-

- mean_vector - the mean of the ‘output_vector’
- covariance_matrix - the covariance of the ‘output_vector’ elements

The ‘output_vector’ must have the same number of dimensions as the ‘mean_vector’. Also the ‘covariance_matrix’ needs to be symmetric positive definite with a matching dimensionality. See Matrices for examples of how to define the covariance matrix.

For more information see Multivariate Normal Distribution on Wikipedia.

### Multivariate Normal Random Effect Example¶

You can use the Multivariate Normal Distribution in the EFFECTS section of a PoPy script, to define a vector of `r[X]`

random effects variables as follows:-

```
EFFECTS:
ID: |
r[KA,CL,V] ~ mnorm([0, 0, 0], f[KA_isv,CL_isv,V_isv])
```

Here the `r[KA,CL,V]`

variable is defined as a 3 element vector with mean zero. `[0,0,0]`

is a 3 element ‘mean_vector’ and `f[KA_isv,CL_isv,V_isv]`

is a 3x3 ‘covariance_matrix’. The `f[KA_isv,CL_isv,V_isv]`

matrix can be a diagonal or square symmetric matrix, see Matrices.

The `r[KA,CL,V]`

is defined at the ‘ID’ level, so each individual in the population has an independent sample of this multivariate normal distribution.

## Bernoulli Distribution¶

The Bernoulli is univariate discrete distribution used to model binary variables, and written in PoPy as:-

```
y ~ bernoulli(prob_success)
```

The Bernoulli models the distribution of a single Bernoulli trial.

The input parameters are:-

- prob_success - probability of success of the bernouilli trial

The output ‘y’ is a binary value, *i.e.* either 1 for success or 0 for failure. ‘prob_success’ is a real valued number in the range [0,1].

For more information see Bernoulli Distribution on Wikipedia.

### Bernoulli Likelihood Example¶

You can use the Bernoulli Distribution in the PREDICTIONS section of a PoPy Fit Script as follows:-

```
PREDICTIONS:
conc = s[X]/m[V]
p[DV_BERN] = 1.0 / (1.0+ exp(-conc))
c[DV_BERN] ~ bernoulli(p[DV_BERN])
```

The above syntax in a Fit Script specifies the likelihood of the observed `c[DV_BERN]`

binary observation from the data file, when modelled as a Bernoulli variable, with success rate dependent on ‘conc’ via a logistic transform.

## Poisson Distribution¶

The Poisson is a discrete univariate distribution, to model discrete count variables, written in PoPy as:-

```
y ~ poisson(lambda)
```

The Poisson models the distribution of the number of events occurring within a fixed time interval, if each individual event occurs independently and at constant rate ‘lambda’.

The input parameters are:-

- lambda - the expected number of occurrences within the time interval

The output ‘y’ is the observed count, *i.e.* a non-negative integer value. ‘lambda’ is a positive real valued number, which represents the mean rate of event occurrence.

For more information see Poisson Distribution on Wikipedia.

### Poisson Likelihood Example¶

You can use the Poisson Distribution in the PREDICTIONS section of a PoPy Fit Script as follows:-

```
PREDICTIONS:
c[COUNT] ~ poisson(m[LAMBDA])
```

The above syntax in a Fit Script specifies the likelihood of the observed `c[COUNT]`

count observations from the data file, when modelled as a Poisson process with estimated rate parameter `m[LAMBDA]`

.

## Negative Binomial Distribution¶

The negative binomial is a univarite discrete distribution, written in PoPy as:-

```
num_succeses ~ negbinomial(prob_success, num_of_fails)
```

The negative binomial models the distribution of the number of successes for a series of independent Bernoulli trials until the failure count reaches ‘num_of_fails’.

The input parameters are:-

- prob_success - probability of success of each bernouilli trial
- num_of_fails - number of unsuccessful bernouilli trials before num_successes output

Here the output ‘num_successes’ is an integer. ‘num_of_fails’ is also an integer and ‘prob_success’ is a real valued number in the range [0,1].

For more information see Negative Binomial Distribution on Wikipedia.

### Negative Binomial Likelihood Example¶

You can use the Negative Binomial Distribution in PREDICTIONS section of a PoPy Fit Script as follows:-

```
PREDICTIONS:
conc = s[X]/m[V]
p[DV_NB] = 1.0 / (1.0 + exp(-conc))
c[DV_NB] ~ negbinomial(p[DV_NB], 1)
```

The above syntax in a Fit Script specifies the likelihood of the observed `c[DV_NB]`

count data from the data file when modelled as the number of successes of a Bernoulli variable (with success rate dependent on ‘conc’ via a logistic transform) until occurrence of first failure.