Skip to content

Noise And Model Coverage

This page explains how the model adds extra uncertainty when the spreadsheet says that the model does not capture all of an organization's true uncertainty.

Goal

Model Coverage lets the user say how much of an organization's uncertainty is already represented in the model.

Examples:

  • 1.0 means full coverage: no extra uncertainty is added.
  • 0.6 means the model captures only 60% of the organization's true uncertainty, so the engine adds extra noise to bring the total variance up.

This adjustment is applied separately for each organization.

Where The Input Lives

Two spreadsheet inputs control this feature:

  • orgmeta contains Model Coverage for each organization.
  • cov can optionally contain correlations between organization noise modifiers by using the vertical correlation format with Type = Noise.

When Noise Is Applied

Noise is added after the engine computes the base expected values for organizations and simulations, but before later-year propagation and downstream portfolio steps are completed.

At a high level:

  1. Compute base expected values from multipliers and organization characteristics.
  2. Measure the existing uncertainty of each organization's expected value distribution.
  3. Build one lognormal noise multiplier per organization.
  4. Multiply expected values by those noise multipliers.
  5. Continue with later-year propagation and portfolio construction.

Why Lognormal Noise

The current implementation uses lognormal noise because expected values are typically positive and multiplicative lognormal noise preserves that general shape.

The engine measures uncertainty using:

  • sigma = SD(log(EV))

for each organization's expected value distribution across simulations.

Noise Formula

If:

  • sigma is the standard deviation of log(EV), and
  • p is Model Coverage,

then the engine sets:

  • sdlog = sigma * sqrt((1 - p) / p)

and draws a noise multiplier from:

  • Lognormal(meanlog = 0, sdlog = sdlog)

Then it updates expected value as:

  • EV_post = EV_pre * NoiseModifier

This matches the core design in the specification.

Worked Intuition

Suppose an organization has:

  • base expected values already computed across simulations,
  • sigma = SD(log(EV)) = 0.5,
  • Model Coverage = 0.8.

Then:

  • sdlog = 0.5 * sqrt((1 - 0.8) / 0.8) = 0.25

So the engine draws a lognormal noise multiplier with meanlog = 0 and sdlog = 0.25, and multiplies the base expected values by that draw.

If instead Model Coverage = 1, then:

  • sdlog = 0

and the noise multiplier is effectively 1, so no extra variance is added.

Correlated Noise

The model supports correlations between noise modifiers.

To specify them:

  1. Use the cov sheet in vertical format.
  2. Set Type = Noise.
  3. Use organization names in Variable1 and Variable2.

Example:

Variable1 Variable2 Correlation Type
OrgA OrgB 0.4 Noise
OrgA OrgC 0.2 Noise

Implementation details:

  • If no noise correlation is supplied, each organization's noise is drawn independently.
  • If a noise correlation matrix is supplied, the engine uses a Gaussian copula to generate correlated uniforms and transforms them into lognormal noise multipliers.
  • The row and column names of the noise correlation matrix must match organization names exactly after parsing.

Practical Constraints And Defaults

The current implementation enforces:

  • Model Coverage must not be NA.
  • Model Coverage must be <= 1.
  • very small coverage values are internally capped at 0.01 when generating noise, to avoid degenerate behavior.
  • missing Model Coverage values are filled with 1 during input parsing.

So in practice:

  • full coverage means no extra noise,
  • lower coverage means more extra variance,
  • extremely small positive coverage still works but is regularized by the 0.01 floor.

How Noise Shows Up Later

The engine generates one noise modifier per organization.

These noise modifiers are exposed downstream as analysis variables with the prefix:

  • Noise:

This allows them to appear in sensitivity-analysis and related multiplier-importance workflows alongside ordinary multipliers.