Skip to content

Parametric vs. Historical data sources

What the Data Source toggle does — Parametric draws from a smooth normal distribution fit to each dataset, Historical resamples actual past years.

Last updated

More in Projections & Monte Carlo

The Chance of Success simulation needs to draw thousands of plausible return paths. The Data Source toggle picks how each year's return is invented. The dataset choice (e.g. Shiller S&P 500, FTSE Canada bonds) decides what numbers the draw is based on — the two choices are independent.

Parametric (default)

Each dataset is summarised by two numbers: the mean real return μ and the standard deviation σ. The simulator samples returns from a normal distribution with those parameters (correlated across asset classes via a Cholesky factor when correlation is enabled). Every year, every trial gets a fresh draw — so trials are effectively unlimited and smooth.

  • Pro: infinite distinct draws, easy to mix asset classes, math is well-understood.
  • Con: assumes returns are Gaussian. Real markets have fatter tails than a normal distribution, so true 50% drawdown years (2008, 1937, 1974) are rarer in the model than in history. The success number is therefore a slight overestimate for plans whose failure mode is a sequence-of-returns shock near retirement.

This is what Chance of Success uses today.

Historical

Instead of a smooth distribution, the simulator resamples actual past annual returns — picks a random year from 1928–2024 (Shiller) or 1980–2024 (FTSE Canada), uses that exact return, and repeats. This is sometimes called bootstrap or empirical resampling.

  • Pro: no distributional assumption. If the data has fat tails, skew, or specific crash years, the simulator inherits them — paths that look like Black Monday, the 1970s, or 2008 show up at their real historical frequency.
  • Con: the simulator can only invent return sequences that resemble history. It cannot imagine a worse year than the worst observed year, and it is sensitive to start/end dates (a 1928-start Shiller sample feels different from a 1970-start sample). It also needs an annual return array, not just (μ, σ) — so MSCI/DMS/Ibbotson datasets fall back to a parametric draw inside historical mode (the "partial bootstrap" case described below).

How year alignment works

For each simulation year the engine draws one uniform random index into the dataset's returns[] array. Both the equity sleeve and the bond sleeve read from that same index. The effect: if the simulator picks year-index 80 for Shiller (= 2008), and the bond dataset is FTSE Canada starting in 1980, that same year-index 80 indexes into FTSE Canada starting from its own first year — so equity and bonds move together as they actually did. That correlation is the whole point of historical bootstrap for sequence-of-returns analysis: a 2008-shaped year is a 2008-shaped year for every sleeve.

When the two array-backed sleeves have different lengths (Shiller = 97 yrs, FTSE Canada = 45 yrs), the year-index clamps to the shorter of the two so the index is always legal in both arrays. Choose datasets whose windows you want to bootstrap from — the methodology panel surfaces which dataset's window the simulator is currently using.

Partial bootstrap (citation-only sleeves)

The MSCI EAFE/EM/World, DMS World ex-US, and Ibbotson US bond entries in the registry are citation-only: we know the published μ and σ but don't carry the year-by-year array. If you pick one of those for a sleeve and toggle Historical, the engine falls back to a parametric draw for that sleeve only, while the array-backed sleeve still bootstraps from its real years. The methodology panel surfaces a "partial bootstrap" note when this happens, and the per-trial drill-down table shows parametric in the source-year column for the parametric sleeve.

This is a deliberate trade-off — the alternative was blocking the Historical chip whenever you picked a citation-only dataset, which would have left global-portfolio users with no way to run historical at all.

Inspecting a single trial

After a historical-mode run, click any row in the Terminal trials table to open the trial drill-down panel. You get two views of that trial:

  • Chart — a line of net worth across the drawdown years. Same shape as the main plan projection but for this one stochastic path. Useful for spotting where a failing trial breaks (look for the steep early-retirement drop).
  • Table — year-by-year rows showing net worth and the calendar year the simulator bootstrapped from for that sim-year, per sleeve. A trial that fails right after retirement and pulls a 1973, 1974, 1975 source-year sequence is exactly the sequence-of-returns risk this feature exists to surface.

Which one to use

  • Default to Parametric for forward-looking plans. It's smoother, cheaper to reason about, and the (μ, σ) you see in the dataset chip is exactly what's being sampled from.
  • Switch to Historical to stress-test plans whose chance-of-success number is close to a personal threshold (e.g. "I need 90% confidence to retire at 60"). Historical typically nudges the number down by 1–4 percentage points and widens the percentile bands, because it inherits real-world fat tails.
  • Run both on the same plan and compare. The gap between the two is a rough proxy for how much your specific plan is exposed to a 2008-style sequence-of-returns event.

The methodology page at /app/methodology lists the historical-bootstrap implementation with source code citations.

Was this helpful?

Was this article helpful?

Still stuck? Email support@havenfinance.app.