﻿ Statistical Functions

# Statistical Functions

This section describes the following Builtins:

The statistical Builtins generate sequences of random numbers, each conforming to its specific distribution. The statistical functions thus enable you to introduce randomness into your models.

The software will sample from the distribution you have specified, each DT in the model simulation. Unless you have specified a seed for the distribution as a non-negative integer, the sample set drawn from the distribution will not be replicable.

## EXPRND(<lambda>[,<seed>])

The EXPRND function generates a series of exponentially distributed random numbers with a mean of lambda. EXPRND samples a new random number in each iteration (that is, each DT) of a model run. If you wish to replicate the stream of random numbers, specify seed as an integer between 1 and 32767. To replicate a simulation, all variables that use statistical functions must have seeds specified. Each variable using a statistical function should use a separate seed value.

Examples:

EXPRND (1) gives a non-replicable exponentially distributed stream of numbers (mean=1)

EXPRND (2,456) gives a replicable exponentially distributed stream of numbers (mean=2)

## LOGNORMAL(<mean>,<std>[,<seed>])

The LOGNORMAL function generates a series of random numbers that conform to a Log-Normal distribution (that is, the log of the independent variable follows a normal distribution) with a specified mean and standarddeviation. LOGNORMAL samples a new random number in each iteration of a simulation. If you wish to replicate the stream of random numbers, specify seed as an integer between 1 and 32767. To replicate a simulation, all variables that use statistical functions must have seeds specified. Each variable using a statistical function should use a separate seed value.

Examples:

LOGNORMAL(0,1) gives a non-replicable stream of numbers following a log-normal distribution (mean=0, standard deviation=1)

LOGNORMAL(0,1,147) gives a replicable stream of numbers following a log-normal distribution (mean=0, standard deviation=1)

LOGNORMAL(5,1,12) gives a replicable stream of numbers following a log-normal distribution (mean=5, standard deviation=1)

LOGNORMAL(10,5,102) gives a replicable stream of numbers following a log-normal distribution (mean=10, standard deviation=5)

## MONTECARLO(<probability>[,<seed>])

The MONTECARLO function randomly generates a series of zeros and ones, based on the probability you have provided. The probability is the percentage probability of an event happening per unit of simulation time. Probability can be a variable or a constant, but should evaluate to a number between 0 and 100 (numbers outside the range will be set to 0). Note that the probability you specify, divided by 100, is the mean number of occurrences per unit time.

MONTECARLO is equivalent to the following logic:

IF (RANDOM(0,100,<seed>) <= probability*DT THEN 1 ELSE 0

MONTECARLO samples a new random number in each iteration of a model. If you wish to replicate the stream of random numbers, specify seed as an integer between 1 and 32767. To replicate a simulation, all variables that use statistical functions must have seeds specified. Each variable using a statistical function should use a separate seed value.

Examples:

MONTECARLO(20,1577) gives a replicable stream of numbers which are equal to 1 20% of the time and equal to 0 the remaining 80% of the time. This means that the mean number of occurrences generated by this distribution is 20/100, or 0.2 per unit time.

## NORMAL(<mean>,<std>[,<seed>])

The NORMAL function generates a series of normally distributed random numbers with a specified mean and standard deviation. NORMAL samples a new random number in each iteration of a simulation. If you wish to replicate the stream of random numbers, specify seed as an integer between 1 and 32767. To replicate a simulation, all variables that use statistical functions must have seeds specified. Each variable using a statistical function should use a separate seed value.

Examples:

NORMAL(0,1) gives a non-replicable normally distributed stream of numbers (mean=0, standard deviation=1)

NORMAL(0,1,147) gives a replicable normally distributed stream of numbers (mean=0, standard deviation=1)

NORMAL(5,1,12) gives a replicable normally distributed stream of numbers (mean=5, standard deviation=1)

NORMAL(10,5,102) gives a replicable normally distributed stream of numbers (mean=10, standard deviation=5)

## NORMALCDF(<left>, <right>[, <mean>, <stddev>])

The NORMALCDF calculates the cumulative Normal distribution function between the specified z-scores, or, when the mean and standard deviation are given, between two data values. The cumulative distribution function integrates (sums) all values of the Normal probability distribution function between the left and right endpoints. To sum from negative infinity, use a z-score of -99. To sum to positive infinity, use a z-score of 99.

The graph below shows the behavior of the NORMALCDF function for -4 = z = 4. The equation NORMALCDF(-99, TIME) was used to make this graph. Note that the NORMALCDF very closely approximates the logistic function, or S-shaped growth. It can be used to formulate, using an equation, several types of common graphical functions:

S-shaped growth – Use the entire function

Exponential growth – Use the left side of the function

Saturation curve – Use the right side of the function

Note: A z-score can be calculated with the formula: (data_value - mean)/stddev.

## POISSON(<mu>[,<seed>])

The POISSON function generates a series of random numbers that conform to a Poisson distribution. The mean per unit time for the distribution is given by mu. POISSON samples a new random number in each iteration of a model run (i.e., every DT). If you wish to replicate the stream of random numbers, specify seed as an integer between 1 and 32767. To replicate a simulation, all variables that use statistical function must have seeds specified. Each variable using a statistical function should use a separate seed value.

Examples:

POISSON (1) gives a non-replicable Poisson sample set with mean of 1, per unit of simulation time.

POISSON (10, 256) gives a replicable Poisson sample set with mean of 10, per unit of simulation time.

## RANDOM(<min>,<max>[,<seed>])

The RANDOM function generates a series of uniformly distributed random numbers between min and max. RANDOM samples a new random number in each iteration of a model run. If you wish to replicate the stream of random numbers, specify seed as an integer between 1 and 32767. To replicate a simulation, all variables that use statistical functions must have seeds specified. Each variable using a statistical function should use a separate seed value.

Examples:

RANDOM(0,1) creates a non-replicable uniformly distributed stream of numbers between 0 and 1.

RANDOM(0,1,147) creates a replicable uniformly distributed stream of numbers between 0 and 1.

RANDOM(0,10,12) gives a replicable uniformly distributed stream of numbers between 0 and 10.

RANDOM(10,13,12) gives a replicable uniformly distributed stream of numbers between 10 and 13.

## Sampling from Non-uniform Distributions

In many cases you may wish to draw samples from distributions other than the ones explicitly provided by the software. A straightforward technique, known as inversion, allows you to transform a sample drawn from RANDOM into any distribution whose density function can be integrated and then inverted.

For example, it is possible to follow this technique to use the RANDOM function to generate Weibull variates. The expression below provides the transformation:

Weibull = b * (-LOGN(RANDOM(0,1,1575)))^(1/c) + a

where

a >= 0 the location parameter

b >0 the scale parameter

c >0 the shape parameter

Transformations of this ilk can be quite useful, but are best left to the analytically inclined. For an in-depth coverage of techniques for sampling from non-uniform distributions, see: Naylor, T.H., J. Balintfy, D.S., and K. Chu, Computer Simulation Techniques, Wiley, 1966.