How we calculate retirement success

Every number this site produces comes from one of two engines. Here is exactly what they assume, and how their output lines up against published, peer-reviewed research.

The short version

Our historical backtest reproduces Wade Pfau’s published Table 1 within about 7.1 percentage points across realistic allocations — and 66 automated tests keep it that way. Our Monte Carlo resamples real return history rather than drawing from a bell curve, so it now tracks both that backtest and Pfau’s Table 1 closely. It still runs more optimistic than Pfau’s low-yield Table 2, on purpose: it uses the long-run record rather than today’s conditions. Neither is a black box. The math below is the whole story.

Two engines

A Monte Carlo simulation builds thousands of return sequences and reports how often a portfolio survives. Ours does this by resampling contiguous multi-year blocks of real history (a block bootstrap), so every path carries the inflation regimes and recoveries that actually happened, recombined into new orders. It is forward-looking and valuation-agnostic: it does not try to read today’s market and adjust.

A historical backtest replays the actual return sequences that happened — every overlapping window in more than 150 years of Shiller data (1871 to present). Instead of resampling, it asks: across every real starting year on record, how often would this plan have lasted?

Because the Monte Carlo now resamples the same history the backtest replays, the two largely agree. The backtest uses the fixed set of real windows; the Monte Carlo recombines them into many novel sequences and reports smooth percentile bands. The comparison below shows how closely they line up.

Our assumptions, in the open

The Monte Carlo engine resamples real annual returns from the Shiller series in contiguous multi-year blocks, so it preserves the mean reversion and inflation regimes of the real record. The long-run real return and volatility of that series are summarized below — deliberately conventional, close to the numbers most retirement researchers use for US stocks and bonds after inflation. These are also the inputs to an optional simpler “Standard” Monte Carlo (independent yearly draws) we keep available for side-by-side comparison.

Monte Carlo return and volatility assumptions, real (after inflation).
Asset classExpected real returnVolatility
Stocks7%18%
Bonds2%4%

The default engine preserves the order and clustering of history (a roughly 10-year average block bootstrap), so a bad decade and its recovery travel together. The optional Standard engine instead draws each year independently. The historical backtest uses no assumptions at all — it replays the real Shiller return series directly.

Does it match published research?

The standard benchmark is Wade Pfau’s 2015 update to the Trinity Study (Journal of Financial Planning). His Table 1 reports historical portfolio success rates at a 4% inflation-adjusted withdrawal over 30 years, by stock allocation. Here is our historical backtest against it — and our Monte Carlo, which now resamples the same history and lands close to both.

Our historical backtest Pfau Table 1 (historical) Our Monte Carlo
0%25%50%75%100%0%25%50%75%100%Stock allocationSuccess rate
Portfolio success rate at a 4% inflation-adjusted withdrawal over 30 years, by stock allocation. Our historical backtest (Shiller 1871–present) tracks Pfau’s published historical Table 1; our regime-aware Monte Carlo resamples the same history, so it rises alongside both. Numbers computed June 2026.
Portfolio success rate at a 4% withdrawal over 30 years, by stock allocation, comparing our two engines with Pfau’s published Table 1 and Table 2.
Stock allocationRetireLab enginePfau 2015 (published)
Monte CarloHistorical backtestTable 1 (historical)Table 2 (low-yield MC)
0% stocks62.3%50%42%12%
25% stocks86.2%84.9%87%40%
50% stocks93.3%95.2%100%64%
75% stocks94.7%97.6%98%73%
100% stocks94.0%97.6%93%75%

The solid line (our backtest) tracks the dashed line (Pfau’s historical Table 1) closely — within about 7.1 percentage points across the realistic 50–100% stock range — and the Monte Carlo line now rises with both rather than sitting flat. The small residual differences come from documented data choices: we use Shiller data back to 1871 with long-term government bonds; Pfau used 1926–2014 with intermediate-term bonds. Those differences bite hardest at the all-bond end, where the 1966–1981 inflationary destruction of bonds is a larger share of Pfau’s shorter sample.

This is not a one-time check. 66 automated tests re-run our backtest against Pfau’s table on every build, across three withdrawal rates, three horizons, and five allocations. If our numbers ever drift off the published benchmark, the tests fail before anything ships.

Why our Monte Carlo tracks history

The Monte Carlo line rises with allocation and sits close to the backtest because both draw on the same real record. Real history has mean reversion and inflation regimes: a terrible decade tends to be followed by a recovery, and bonds can bleed real value for years at a stretch (1966–1981). By resampling contiguous blocks of history rather than rolling independent dice, our engine keeps those patterns intact — so a stock-heavy plan earns its historical edge and a bond-heavy plan carries its historical inflation risk.

An honest limit: with about 155 overlapping years of data (roughly a dozen independent decade-long blocks), the bootstrap mostly re-expresses the historical record as a smooth probability distribution — many novel paths, percentile bands — rather than adding genuinely new information beyond the backtest. We show both engines precisely so the agreement, and its source, are visible.

A simpler Standard Monte Carlo, which draws each year independently from the average return and volatility above, produces a flatter and generally more conservative curve — it manufactures more unlucky-in-a-row sequences than history ever ran. We keep it available for comparison; the Allocation Comparison tool shows the Standard engine, this regime-aware engine, and the historical backtest side by side.

Why we don’t match Pfau’s Table 2 — and that’s deliberate

Pfau’s paper has a second table — a Monte Carlo built on 2015 market conditions. That was the paper’s headline: with bond yields near zero at the time, his low-yield Monte Carlo produced far lower success rates. Our Monte Carlo does not match it, and the gap is informative.

Our Monte Carlo Pfau Table 2 (low-yield Monte Carlo)
0%25%50%75%100%0%25%50%75%100%Stock allocationSuccess rate+50pp+19pp
Our Monte Carlo vs Pfau’s Table 2 (a Monte Carlo built on 2015 low-yield assumptions) at a 4% withdrawal over 30 years. The gap is small at all-stock and widens toward all-bonds — a difference in return assumptions, not method. Numbers computed June 2026.

The two agree closely at high stock and diverge sharply toward all-bonds. The reason is the bond treatment: Pfau’s Table 2 priced bonds off roughly 0% real 2015 yields, so a bond-heavy portfolio cratered. Our main engine resamples the full real bond record (1871 to present, averaging about 2% real) rather than pricing off one low-yield snapshot, so its bond-heavy survival stays higher.

That is a deliberate design choice. Our headline projection is valuation-agnostic: it uses long-run averages rather than chasing the current market, so the answer does not swing with this month’s yields. If you want a number that does condition on today’s valuations, that is exactly what the CAPE-conditioned panel in our SWR comparison tool is for.

These figures are educational illustrations of how the engine behaves under the stated assumptions, not predictions or personalized advice. Real outcomes depend on factors no model captures, and example allocations are shown for comparison, not as recommendations. Households often review withdrawal and allocation questions with a qualified financial advisor who can weigh what fits their full situation.

Methodology FAQ

How does RetireLab calculate retirement success rates?
RetireLab runs a Monte Carlo simulation that samples market returns using a stationary block bootstrap over 156 years of Shiller stock, bond, and inflation data (1871–2025). Each plan is tested across about 1,000 market sequences, and the success rate is the share of sequences in which the portfolio lasts to the planning age. The engine is validated cell-by-cell against Wade Pfau's published safe-withdrawal tables.
Why does RetireLab use a block bootstrap instead of a fixed return or independent random draws?
A stationary block bootstrap resamples multi-year blocks of history, which preserves inflation regimes, mean reversion, and sequence-of-returns risk. A single fixed return ignores volatility entirely, and independent (IID) random draws break the year-to-year structure and tend to understate the survival of stock-heavy portfolios. Block bootstrap keeps the historical shape of returns while still generating many distinct scenarios.
What market data does the model use, and how current is it?
The engine draws on Robert Shiller's long-run U.S. real-return series for stocks, bonds, and inflation, spanning 1871 through 2025 and updated from FRED. Because it samples real (inflation-adjusted) returns, results are expressed in today's dollars.
Is RetireLab financial advice?
No. RetireLab is an educational tool under U.S. Department of Labor Interpretive Bulletin 96-1, Category 4. It illustrates how retirement math works using your inputs and does not provide personalized or directive investment advice. For decisions specific to your situation, consider consulting a qualified financial professional.