Which probability distribution should I use? A guide for Monte Carlo models
Choose a distribution by what you know about the uncertain number, not by its name. An expert’s low, most likely and high value calls for a PERT or a triangular distribution; a positive amount with a long upper tail, such as a cost or a duration, for a lognormal; a symmetric measurement for a normal; a time to failure for a Weibull; a count of events for a Poisson; an event that happens or not for a Bernoulli; a share between 0 and 1 for a beta, and shares that must add up to a whole for a Dirichlet; the largest value of a period for a Gumbel or a GEV; a total of losses, how many and how large, for a compound distribution; and past data for a fitted distribution. The finder below asks one or two questions and names the distribution; xellstorm offers 52 distributions in all, including your own tables.
Find your distribution
Pick what describes your uncertain number. Where one answer is not enough, a second question opens below it.
The distributions at a glance
The parameters are named as in xellstorm’s distribution menu. Every distribution also takes a truncation (keep only values between two limits) and a shift.
| Distribution | Describes | Parameters | Draw in Excel |
|---|---|---|---|
| PERT | Expert estimates with limits, most likely value trusted | min, likely, max | BETA.INV(RAND(), α, β, min, max) |
| Triangular | Expert estimates with limits, values near them possible | min, likely, max | An IF with SQRT, see the guide |
| Uniform | A range with no favoured value | min, max | min+(max-min)*RAND() |
| Normal | Symmetric variation: measurements, errors, totals of many parts | mean, sd | NORM.INV(RAND(), mean, sd) |
| Lognormal | Positive amounts with a long upper tail: costs, losses, durations | s, scale, loc | LOGNORM.INV(RAND(), LN(median), s) |
| Gamma | Positive, right-skewed; the total of several waits | a, scale, loc | GAMMA.INV(RAND(), shape, scale) |
| Beta | Shares and rates between 0 and 1 | a, b, loc, scale | BETA.INV(RAND(), α, β) |
| Weibull | Time to failure, wear-out or early failures | shape, scale, loc | scale*(-LN(1-RAND()))^(1/shape) |
| Exponential | Time between random events at a steady rate | scale, loc | -mean*LN(1-RAND()) |
| Poisson | Events in a period at an average rate | mean | A table of POISSON.DIST and COUNTIF, see the guide |
| Negative binomial | Counts more uneven than a Poisson: demand, clustered defects | n, p | A table of NEGBINOM.DIST and COUNTIF |
| Bernoulli | Whether an event happens (1) or not (0) | p | IF(RAND()<p, 1, 0) |
| Binomial | Yeses out of n tries | n, p | BINOM.INV(n, p, RAND()) |
| Integer uniform | Whole numbers in a range, all equally likely | low, high | RANDBETWEEN(low, high) |
| Discrete table | A few possible values with their probabilities | a table of values and probabilities | A lookup of cumulative probabilities |
| Triangular from percentiles | A triangular set by a low and high percentile, not limits | bottom, likely, top, bottom %, top % | – |
| Student’s t | Symmetric with heavy tails: returns, errors with outliers | df, loc, scale | loc+scale*T.INV(RAND(), df) |
| Gumbel | The largest of many values: annual peak loads, floods | loc, scale | loc-scale*LN(-LN(RAND())) |
| GEV (generalized extreme value) | The largest of many values, with a heavier tail or an upper limit | shape (c), loc, scale | loc+scale*(1-(-LN(RAND()))^c)/c |
| Metalog | A flexible shape through several percentiles | a table of values and probabilities | – |
| Compound | The total of a random number of events, each with its own size: claims, losses | frequency, severity, deductible, limit | – |
| Splice (body + tail) | One distribution below a point, another above it: a body and a heavy tail | below the point, above the point, splice point, share below | – |
| Dirichlet (shares of a total) | Shares that add up to a total in every trial: market shares, a budget split | alpha per cell, total | GAMMA.INV(RAND(), alpha, 1) in each cell, divided by their sum |
xellstorm offers 52 distributions. The app’s menu lists 29 of them, and 23 more under “More families”, most of those met in models built for Excel add-ins, which xellstorm converts on import (see moving a model from an add-in).
The workbook: every distribution as an Excel formula
The workbook on this page has one row per distribution: its parameters, a random number from RAND(), a draw, and the mean, P10 and P90 by formula. Press F9 and every draw changes. Its last columns hold the same distributions as xellstorm inputs, so a run gives Excel’s draws and xellstorm’s side by side. Each guide on this site checks the workbook’s formulas against 10,000 such draws.
| Distribution | Example and parameters | Mean | P10 | P90 |
|---|---|---|---|---|
| Normal | Demand next season (units) Mean 1,000, Standard deviation 200 | 1,000 | 744 | 1,256 |
| Lognormal | Repair cost of one claim (USD) Median 2,000, Spread of ln 0.8 | 2,754 | 717 | 5,576 |
| Triangular | Cost of one item (USD thousands) Min 80, Most likely 100, Max 140 | 106.7 | 91.0 | 124.5 |
| PERT | Cost of one item (USD thousands) Min 80, Most likely 100, Max 140 | 103.3 | 89.2 | 118.7 |
| Uniform | Unit price (USD) Min 40, Max 60 | 50 | 42 | 58 |
| Weibull | Pump life (hours) Shape 1.5, Scale 20,000 | 18,055 | 4,462 | 34,874 |
| Exponential | Time between breakdowns (hours) Mean 500 | 500 | 53 | 1,151 |
| Poisson | Complaints in a week Mean 4 | 4 | 2 | 7 |
| Negative binomial | Orders in a week, more variable Successes 4, Probability 0.5 | 4 | 1 | 8 |
| Bernoulli | A risk occurs (1) or not (0) Probability 0.3 | 0.3 | 0 | 1 |
| Binomial | Defective units in a batch of 50 Trials 50, Probability 0.04 | 2 | 0 | 4 |
| Beta | Share of customers who renew Alpha 8, Beta 2 | 80.0% | 63.2% | 93.9% |
| Gamma | Days to finish three repairs in a row Shape 3, Scale 2 | 6.0 | 2.2 | 10.6 |
Common mistakes
- A normal distribution for a cost or a duration. It is symmetric and can go negative; costs and durations overrun more than they underrun.
- A P10 and a P90 used as min and max. They cut off a fifth of the outcomes. Fit to the percentiles instead.
- The wrong parameters in
LOGNORM.INV. It takes the mean and standard deviation of the logarithm, not of the values. - Probability × impact as a fixed number. A risk costs nothing or its full impact; a Bernoulli times the impact keeps that, an expected value does not.
- Inputs that move together drawn as if independent. Prices and volumes, or the costs of trades that share a crew, often rise together; correlate them, or the spread of the total comes out too narrow.
- Percentiles added up. The P90s of several items do not add up to the P90 of their total; simulate the total (see P50, P80 and P90).
Guides to each distribution
- Guide
PERT distribution in Excel: formula, mean and when to use it
A PERT is a beta distribution from min to max with mean (min + 4 × likely + max)/6. The Excel BETA.INV formula, and PERT vs triangular. - Guide
Triangular distribution in Excel: formula, mean and how it compares with PERT
A triangular distribution turns min, most likely and max into straight-line odds. The Excel formula for random draws and percentiles, its mean, and triangular vs PERT. - Guide
Uniform distribution in Excel: random numbers between two values
A uniform distribution makes every value between a min and a max equally likely. The Excel formula, RANDBETWEEN for whole numbers, its mean and when a range alone is enough. - Guide
Normal distribution in Excel: NORM.INV, mean and standard deviation
Draw from a normal distribution in Excel with NORM.INV(RAND(), mean, sd), read its P10 and P90, and see when a bell curve fits and when it does not. - Guide
Lognormal distribution in Excel: LOGNORM.INV, parameters and when to use it
A lognormal distribution is positive with a long right tail. How LOGNORM.INV’s parameters work, how to get them from a mean and standard deviation, and when to use it. - Guide
Gamma distribution in Excel: waiting times, totals and GAMMA.INV
The gamma distribution describes positive, right-skewed quantities such as the total time of several steps. Shape and scale, GAMMA.INV and GAMMA.DIST in Excel, and gamma vs lognormal. - Guide
Beta distribution in Excel: uncertain shares, rates and percentages
The beta distribution describes an uncertain share or rate between 0 and 1. What alpha and beta mean, how to set them from a mean and standard deviation, and BETA.INV in Excel. - Guide
Weibull distribution in Excel: shape, scale and time to failure
The Weibull distribution models time to failure: shape below 1 for early failures, 1 for random ones (exponential), above 1 for wear-out. Excel formulas, B10 life and the exponential case. - Guide
Poisson distribution in Excel: counting events, and when to use negative binomial
The Poisson distribution counts events in a period at a known average rate. POISSON.DIST, random Poisson counts in Excel without an inverse, and the negative binomial for counts that vary more. - Guide
Binomial and Bernoulli distributions in Excel: yes-or-no events and counts out of n
A Bernoulli distribution is one yes-or-no event, such as a risk that occurs or not; a binomial counts the yeses out of n tries. Excel formulas, BINOM.DIST and BINOM.INV, and risk registers.
Questions
Which distribution should I use when I have no data?
Ask the people who know the quantity for a low, a most likely and a high value, and use a PERT or a triangular distribution. If their low and high are “one in ten” cases rather than limits, fit a distribution to those percentiles instead. Then check what the numbers imply (mean, P10 and P90) with the people who gave them.
Which distribution is best for cost estimates?
For each cost item, a PERT or triangular distribution from a three-point estimate, or a lognormal when there is no firm maximum. For risks that may or may not occur, a Bernoulli times the impact. The total is then simulated, not estimated: see the project cost contingency example.
Which distribution should I use for task durations?
A PERT or triangular distribution from a three-point estimate of each task, or a lognormal fitted to past durations. Both allow a long upper tail. For the schedule, simulate the network of tasks: see schedule risk analysis.
Which distribution should I use for insurance claims or operational losses?
Model how many losses a period brings and how large each one is separately, and let a compound distribution add them up: a Poisson or a negative binomial for the count, a lognormal, gamma or Pareto for the size. When the large losses follow a heavier tail than the ordinary ones, splice a generalized Pareto above a threshold to the body below it. Modeled apart, each can be checked against its own data, and a deductible or a limit applies to each loss.
How do I simulate shares that add up to 100%?
Draw them together with a Dirichlet distribution, not with a separate distribution in each cell: independent shares rarely add up to 100%. In Excel, draw GAMMA.INV(RAND(), alpha, 1) in each cell and divide each draw by their sum; in xellstorm, choose Dirichlet (shares of a total) for the range of cells.
How do I know whether a distribution fits my data?
Fit several and compare them. xellstorm’s “From data” ranks the fits by AIC, which rewards a good fit and penalizes extra parameters, and shows each one’s goodness-of-fit tests. Look at the histogram against the curve too, especially in the tail that matters for your decision, and be careful with small samples.
Does the choice of distribution change the results much?
It changes the tails more than the middle. Two shapes with the same three numbers or the same mean often give similar averages but different P90s and different chances of exceeding a budget. When it matters, run both as scenarios on the same random draws and compare.
Related
- Guide
Monte Carlo simulation in Excel, with or without add-ins
Three ways to run a Monte Carlo simulation on an Excel model: RAND() and a data table, an add-in, or a browser tool with no add-in. PERT formula included. - Guide
P50, P80 and P90: what they mean and which to budget at
P80 is the cost 80% of simulated outcomes stay under. Six building cost items’ P80s add up to 2,843, but their sum’s P80 is 2,756 (USD thousands). - Guide
Moving a model from @RISK, ModelRisk or Analytic Solver
xellstorm reads 164 distribution functions of @RISK, ModelRisk and Analytic Solver and lists what it converted and why any formula was left.
xellstorm is a browser-based Monte Carlo simulation tool for Excel models: no add-in, and the workbook never leaves your computer.