Monte Carlo · Methodology

Calibration Parameter Uncertainty

A simulation run on one fitted parameter set reports how much the market could vary, given those parameters. It says nothing about how much the parameters themselves could have been wrong. This page covers what the engine discloses about that gap by default, and the opt-in experiment that closes part of it.

The disclosure that is always on

Every run publishes an uncertainty_scope block that names each calibration parameter, classifies it, and states its actual treatment in that run. The classification is deliberately blunt, because the useful question is not “is this uncertain?” (everything is) but “did this run do anything about it?”

Fixed assumption

Declared by the request and not estimated from data. Tax rates, slippage, the horizon, a manually supplied block length.

Sampling estimate

Fitted from the calibration panel and therefore carrying sampling error. Asset means, covariance, GARCH coefficients, regime transition probabilities.

Structural scenario

A declared counterfactual with no probability attached. The deterministic stress arms.

Simulated state

Generated forward inside the simulation itself. Conditional variance paths, regime occupancy, the drawdown state.

The default remains a single fit. The asset mean receives the per-path HAC perturbation described on the drift and estimation risk page, while every other fitted quantity stays fixed at its point estimate. Under that default, an interval in the result covers conditional path variation and finite-path numerical error only. It does not cover the possibility that the covariance matrix, the block length or the GARCH coefficients were estimated on an unrepresentative sample.

parameter_uncertainty: the opt-in experiment

Setting the block turns the run into a two-level design. The engine draws between 2 and 20 complete stationary-bootstrap calibration panels, refits one internally consistent generator snapshot per panel, and gives each snapshot its own contiguous block of inner paths.

json
{
  "path_count": 50000,
  "parameter_uncertainty": {
    "method": "stationary_bootstrap_refit_v1",
    "outer_draws": 5,
    "paired_fixed_control": true
  }
}

Two arithmetic constraints are enforced at admission rather than discovered later. path_count must divide exactly across outer_draws, and each outer draw must own a whole number of 2,000-path logical blocks on the mc-stream-v2 stream layout. Both exist so a snapshot never straddles a stream boundary, which would make the run non-replayable.

Why the panels are recentred

A resampled calibration panel differs from the original in every moment, including its mean. If the panels were used as drawn, the run would apply mean uncertainty twice: once through the resampled panel mean, and again through the per-path HAC perturbation that is already on by default.

Each drawn panel is therefore recentred to the original per-asset arithmetic mean before refitting. The outer layer then propagates non-drift calibration uncertainty only, and the two layers compose cleanly instead of compounding.

What moves jointly

Covariance or empirical dependence, automatic block length, GJR-GARCH coefficients, long-run variance, residual-pool composition, Ledoit-Wolf shrinkage and regime transition probabilities all move together, where they apply to the selected generator. That joint movement is the point: refitting one parameter at a time would produce combinations no panel could actually have generated.

What stays fixed

Manually supplied block lengths and declared model choices. A declared assumption is not a sampling estimate, so resampling it would misrepresent what the request said.

The variance decomposition

The primary result is the equal-weight mixture over outer snapshots and inner paths. Its parameter_uncertainty block reports total terminal-wealth variance as the exact law of total variance decomposition:

The first term is what a single-fit run already reports. The second is what it cannot see. Publishing both separately is more useful than publishing only the total, because it answers whether widening the interval is worth the compute: if the between-snapshot term is small, the extra outer draws bought very little.

The block also reports per-draw quantiles and goal probabilities, and an optional fixed-parameter control on the same random coordinates (paired_fixed_control), so the effect of the outer layer can be read as a paired contrast rather than a difference of two independent runs.

Why adaptive precision is refused here

parameter_uncertainty and precision cannot be requested together, and the rejection is deliberate rather than a missing feature.

The adaptive stopping policy governs conditional path error: it decides when enough paths have been drawn from a fixed parameter set. It has no mechanism for outer-draw error, which is governed by the number of panels rather than the number of paths. A conditional path stopping rule that also controlled parameter error would be making a claim it cannot support, so the mode is fixed-N by construction.

Failure handling and audit trail

Every accepted and rejected fit, seed digest, panel digest, fallback, repair and inner path range is persisted, so the mixture can be reconstructed exactly rather than trusted.

A regime fit that fails on a resampled panel falls back visibly to the block bootstrap for that snapshot. GJR-GARCH assets retain their declared EWMA fallback. An outer draw that cannot be recovered fails the run after deterministic replacement attempts rather than quietly shrinking the mixture, because a mixture over four snapshots reported as five is a wrong number, not a degraded one.

What the rolling-origin study measured

The feature was scored on the leakage-safe rolling-origin harness rather than shipped on the strength of the argument for it. The study completed 2,216 of 2,216 forecast jobs with zero failures on the frozen 7,160-row India panel, over four horizons, 1,000 paths per fold and 9,999 dependence-aware resamples.

  • One of 16 coverage cells moved by more than 2.5 percentage points closer to nominal, and none moved materially farther.
  • At the annual 50% interval, coverage moved from 66.17% to 59.48%. The paired 95% interval for that -6.69 point change was [-12.27, -1.49] points.
  • Proper-score changes were mixed: annual terminal CRPS was 15.4% worse, annual maximum-drawdown CRPS 10.4% better.

Mixed evidence is why this is a sensitivity, not a new default. On a representative 10-asset, 10,000-path, 10-year run it cost 10.4% more wall time, 6.9% more traced peak allocation and 26.0% more conservative estimated peak memory than the fixed fit.

These results do not establish forecast calibration or generator superiority. They establish that the mechanism works and that its effect on calibration is small and not uniformly favourable.

References

  • Politis, D. N., & Romano, J. P. (1994). The Stationary Bootstrap. Journal of the American Statistical Association, 89(428), 1303–1313.
  • Barberis, N. (2000). Investing for the Long Run when Returns Are Predictable. Journal of Finance, 55(1), 225–264. On the size of parameter uncertainty relative to return uncertainty at long horizons.
  • Pastor, L., & Stambaugh, R. F. (2012). Are Stocks Really Less Volatile in the Long Run? Journal of Finance, 67(2), 431–478.
  • Ledoit, O., & Wolf, M. (2004). A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices. Journal of Multivariate Analysis, 88(2), 365–411.

Not investment advice. Past performance is not indicative of future results.