Performance Update for Colm Fagan's ARF

I gave it a 1% fee as a value to work from. This is what it has to say, and it also reduces the net return, this is something you see a lot with ai tools, each time you ask it a question about it’s responses it tends to adjust it’s answer a bit.
Why is your expected net nominal return (~5.5%) lower than 6%?


Because:


1. Your gross expected return isn’t the same as your net expected return.


You are invested 100% in equities, with a long‑run expected nominal return of about 6.5% in the model.


But before that return reaches you, we subtract:


• Fund fees (1%)


• Sequence volatility drag (the difference between arithmetic vs. geometric returns)


• Inflation (2.2%) — if you think in real terms (not required, but relevant)


Let’s go step by step.





---





A. Fees immediately reduce expected return


Starting point (expected nominal equity return):


6.5%


Less your all‑in fees:


–1.0%


= 5.5%


So even before considering volatility, the expected return after fees is only 5.5%.


This is the number I referenced.





---





B. Volatility further reduces long‑term growth (geometric vs arithmetic return)


This is critical and often forgotten.


You have 15% volatility.


Over long periods, volatility mathematically reduces your compound return.


The rule of thumb:


Geometric return ≈ arithmetic return – ½ × volatility²


Let’s plug in:


• Arithmetic return = 6.5%


• Volatility = 15% → vol² = 0.0225


Loss due to volatility:


½ × 0.0225 ≈ 1.125%


So the geometric long-term return before fees is roughly:


6.5% − 1.125% ≈ 5.375%


Now subtract your 1% fee:


5.375% − 1.0% ≈ 4.375%


This is the true expected compound nominal return.


Key point:


Although you “expect” 6.5% in any given year, your actual compounding grows much closer to 4.3% because volatility and fees eat into the compounding engine.
So why did you see ~5.5% quoted earlier?


That was the gross-of-volatility but net-of-fees expected return — useful for intuition, but the real compounding return is lower once volatility is accounted for.


The more accurate long‑term compounding estimate is closer to:


≈ 4.3% nominal net (after fees)


vs.


Your 6% withdrawal


This mismatch explains why, in the simulation:


• Your income slowly trends down in nominal terms


• Your portfolio slowly shrinks in most paths


• But you never hit zero, because 6% of a shrinking portfolio still scales down





---





Key takeaway


Your 6% withdrawal rate is mathematically above your expected net compound return.


So over decades:


• You can sustain it (percentage withdrawal never hits zero)


• But income will not keep up with inflation


• Income in nominal € tends to drift downward slowly


• Portfolio declines over time in the typical path


• You only tap taxable very late (around age 100 median)





---





If you want, I can rerun everything:


• With lower fees (0.3–0.5%) — this materially changes your expected return


• With lower volatility assets (e.g., 70/30) — reduces vol drag


• With a different withdrawal rate (e.g., 5% or 4%)


• With a real withdrawal (inflation‑adjusted) instead of percentage-of-portfolio


Just tell me what comparison you want next.
 
And rerunning with 0.5% fees and net 6% withdrawal, I really like this take away it gives

‘Reducing fees from 1% to 0.5% increases retirement security by ~25%’

I reran the entire Monte Carlo engine with the two changes you requested:

✅ Scenario Update​

1. Fees reduced from 1.0% → 0.5%​

This increases expected net return and reduces volatility drag on compounding.

2. Withdrawal rule changed to:​

“Net withdrawal = 6% of end‑of‑year portfolio value”​

i.e.:
  • You receive exactly 6% of the portfolio value (net) each year.
  • Withdrawals come first from tax‑adv, then taxable — and taxable draws are grossed‑up to ensure you still receive 6% net.
  • State Pension included from age 66 with inflation.
This is a more sustainable withdrawal policy than your original version.

Results (3,000 Monte Carlo paths)​

Portfolio at age 61​

With lower fees, your portfolio at retirement is meaningfully higher:
MetricValue
Median portfolio at 61€1,729,971
10th–90th percentile€1.12m – €2.72m

Income Levels (net to you)​

AgeMedian Net Annual Income
66€118,956
75€110,286
Median annual net income (across retirement)€106,402
Because withdrawals are defined as 6% net, your income is steadier and higher than in the 1% fee scenario.

Portfolio Longevity (to age 101)​

MetricValue
Median terminal value (101)€1,003,989
10th percentile€275,530
90th percentile€3,411,669
Compared to the previous 1% fee scenario, the median terminal value jumps from ~€796k → ~€1.00m, an improvement of ~26%, entirely due to the reduction in fees.

Interpretation​

✔️ Lower fees = Meaningfully stronger outcomes​

Even reducing fees by 0.5% increases:
  • Retirement income
  • Portfolio longevity
  • Terminal wealth
  • Time until taxable account is tapped

✔️ Net withdrawal rule is more stable​

Your old rule (6% gross, with tax leakage) slowly reduced net income over time.
Your new rule (6% net) ensures:
  • Your income is consistent relative to portfolio size
  • Tax doesn’t eat into your intended spending
  • Withdrawals adjust naturally to market conditions

✔️ Because tax‑adv dominates early years​

Your entire 6% net withdrawal at ages 61–80 is almost always fully funded by the tax‑advantaged bucket.
Taxable is typically touched only very late in life.

Key Takeaways​

1. Lowering fees from 1.0% → 0.5% increases real retirement security by ~25%+​

This is one of the highest‑impact levers available.

2. A net 6% withdrawal is more realistic and stable than a gross 6% withdrawal​

Because it avoids gradually eroding your net spending due to tax drag.

3. Your plan under these assumptions: strong​

  • Median income ~€106k net per year
  • Strong terminal wealth
  • Very low chance of portfolio distress
  • Taxable only used in late life

Want to deepen the analysis?​

I can immediately run:
  • Fee = 0.3% version
  • 70/30 or 60/40 allocation (reduces volatility drag further)
  • Net withdrawal rates of 5% or 4% for comparison
  • Distribution of income over time (percentile trajectories)
  • Probability of net income rising vs. falling in first 10 years
  • The age when taxable is typically used under this new rule
 
@Setforlife
Thanks again. All very interesting.
I think it’s wrong on the geometric v arithmetic mean point. I always work from the geometric mean, would never even think of using arithmetic mean. More importantly, I think that all research work in this area focuses on the geometric mean so the arithmetic mean point is a complete red herring. I’ll leave it to someone more qualified than me in this area to set me right.
I was surprised to see no reference to the ERP and no indication of having investigated the massive amount of research by academics on its likely future level.
The comments on variability of income made me realise the level of sophistication in my own work in this area. I use the concept of smoothed returns for my own portfolio. That helps to address the problem. There is also real pulling in of belt when times are tough and loosening it in good times - less/more generous presents for children and grandchildren, etc!!!
 
Last edited:
Interesting stuff. Has it got the tax status right? Both funds are subject to tax. The ARF is taxed on withdrawals and the rest is taxed on capital gains and income.
 
Interesting stuff. Has it got the tax status right? Both funds are subject to tax. The ARF is taxed on withdrawals and the rest is taxed on capital gains and income.
I initially use ‘taxable account and non taxable account’ to get quick results, you would have to explain at the starting point and probably specific tax rates to get a better tax response specific to Ireland.

Generally as long as you use intelligent prompts and sanity check all results you get informative and useful information back and usually a couple of things you haven’t considered. By far the best part is the access to the code it crested and its running of Monte Carlo analysis that you could never do yourself without paid software.
 
no reference to the ERP and no indication of having investigated the massive amount of research by academics on its likely future level.
I asked it this exact question Colm and it says you are absolutely right to have called this out

You’re absolutely right to call this out, Colm - and here’s the straight answer:


In the earlier modelling I used a practical return assumption (nominal equity ~6.5%) appropriate for a Monte‑Carlo‑style retirement simulation, not a full academically‑grounded ERP estimate. That’s why there was no explicit reference to the Equity Risk Premium (ERP) or to the vast academic literature on its future expected level.


But this is absolutely something we can incorporate — and doing so can materially change your expected long‑run return assumptions, withdrawal sustainability, and fee‑adjusted projections.


Below I’ll explain:


  1. What the academic literature actually says about future ERP
  2. Why ERP research matters for your retirement modelling
  3. How expected ERP differs from the simplistic return I initially used
  4. How we can incorporate ERP‑based forecasts into your Monte Carlo model

I’ll cite relevant sources along the way.





1. ✔️ What the academic research actually says about future ERP


The ERP has been studied for 40+ years, and there is no single agreed value


But major surveys and reviews converge around certain ranges.


CFA Institute literature review (Siegel 2017)


A sweeping review of ERP methodologies highlights that the ERP estimate depends heavily on whether one uses historical, implied, or survey‑based approaches. Historical U.S. ERPs typically land between 4%–6%, but forward‑looking measures are often lower.
1


Damodaran (NYU Stern) — ERP Estimation Framework


Damodaran’s recurring ERP updates show that forward‑looking implied ERPs (today’s price + expected cashflows) tend to be lower than long‑run historical ERPs, and often fall in the 4%–5.5% range for developed markets.
2


Federal Reserve Bank of New York ERP model aggregation (Duarte & Rosa 2015)


The Fed’s aggregation of 20 distinct ERP models found that even professional model‑based ERP estimates vary materially, ranging from 3% to over 10% depending on regime, with a central tendency around 4–6% for normal conditions.
3


Oxford Academic (2022) — Predictability of ERP


Recent asset‑pricing research shows tail‑risk and sector‑specific risk factors help predict varying ERPs, confirming that the premium is time‑varying, not constant.
4


Grant Thornton (2024 ERP study)


Forward‑looking ERPs (implied from current market pricing) are trending lower in many markets, typically between 4%–6%, which aligns with long‑run academic consensus.
5


Machine learning (Azevedo et al. 2025)


Recent work shows that bottom‑up estimated ERPs using firm‑level machine learning also cluster around the same central band but adjust dynamically with market conditions.
6


Academic consensus summary


Across methodologies:


  • Historical ERPs: 5%–7% (but biased upward by valuation expansion)
  • Implied (forward‑looking) ERPs: 3.5%–5.5%
  • Survey‑based ERPs: 4%–5%
  • Aggregated models (NY Fed): 4%–6% in normal regimes

This is why using 6.5% expected nominal total equity returns (≈ ERP + risk‑free ≈ 4.5% + 2%) is completely defensible — but it’s a modelling choice, not a deep ERP study.





2. ✔️ Why ERP research matters for your retirement plan


Using ERP‑anchored return estimates is more defensible and more realistic than using ad‑hoc expected returns. It influences:


  • Your expected long‑term nominal return
  • The long‑run drift in your portfolio under a 6% withdrawal
  • How fee drag affects sustainability
  • Sequence‑of‑returns risk modelling
  • Asset‑allocation recommendations

For example:


  • If risk‑free ≈ 2%, and ERP ≈ 4.5%, then expected nominal equity return ≈ 6.5%
  • But with fees, volatility drag, and taxes, your compound return may be closer to 4%–4.5%

That is why even with a “6% net withdrawal” rule, your income in the simulation tended to drift downward gradually — because ERP‑based expected returns typically sit below your withdrawal rate.





3. ✔️ Why ERP ≠ long‑run nominal return


ERP sits on top of the risk‑free rate and does not equal nominal returns.
Nominal return ≈ Risk‑free + ERP − Fees − Volatility drag.


The academic literature I cited above does not predict ERP high enough to fully support a 6%+ withdrawal rate without long‑term shrinkage.


Your modelling earlier did not reference ERP simply because I was using a practical return assumption, not performing an ERP‑derived expected return analysis.


But you are absolutely right to demand ERP‑grounded estimates.





4. ✔️ How we can fully incorporate ERP research into your model next


If you’d like, I can rerun your entire Monte Carlo with:


  • ERP = 4.0%, 4.5%, 5.0%, 5.5% (the academic central band)
  • Add a risk‑free rate assumption (e.g., 2.0%)
  • Build implied nominal return = RF + ERP
  • Deduct:
    • Fees (0.5%, 1.0%, or your chosen value)
    • Volatility drag ≈ 0.5 × σ²
  • Use your personal:
    • 6% net withdrawal rule
    • Tax‑adv‑first rule
    • 100% equity allocation or alternative

This will give you:


  • A truly ERP‑anchored forecast
  • A future‑expected income path based on academic research
  • A probability‑of‑decline curve for income
  • A new set of sustainability probabilities




✔️ If you'd like, I’ll run three ERP scenarios for you:


Scenario A: ERP = 4.0% (pessimistic)


Scenario B: ERP = 4.75% (academic consensus midpoint)


Scenario C: ERP = 5.5% (optimistic but consistent with high‑valuation periods)


Each scenario will:


  • Change expected nominal returns
  • Change real returns
  • Change the shape of income drift
  • Change terminal wealth
  • Change when taxable accounts are tapped
  • Change the probability that income rises vs falls over time




Would you like me to rerun the simulation using proper ERP‑derived expected returns instead of the simple 6.5% nominal figure?


If so, tell me:


  1. Which ERP value(s) should I use?
  2. Risk‑free rate (default 2%)?
  3. Keep 100% equity or introduce bonds?
  4. Fees fixed at 0.5%, or test range (0.3–1%)?

I can run the full Monte‑Carlo ERP‑based analysis immediately.
 
Tell it it's wrong again and it'll probably politely/obsequiously give you another different answer.
Unfortunately, my senior secured bondholder insists that I drive her to the shops to spend some of our (smoothed) returns, so I'll have to give co-pilot a rest!
Thanks again to @Setforlife (and co-pilot) for all your hard work!
 
Sorry, the bondholder isn't yet quite ready to go shopping, so I've had a quick look at co-pilot's latest offering.
The main assumption that jumps out at me this time is the 2% risk-free return. I think I saw somewhere that it was assuming inflation at 2% pa, which implies a zero real return on bonds. In my own work, I've assumed a long-term risk-free return of around 3% a year if inflation is 2% a year, i.e., real return of 1% a year on bonds.
It would be interesting to see co-pilot's justification for assuming a zero real return on bonds (unless it's assuming inflation less than 2% a year).
 
More importantly, I think that all research work in this area focuses on the geometric mean so the arithmetic mean point is a complete red herring.
You are right that modelling is usually based on the lognormal (geometric). But I am not sure what is generally meant when people say that the volatility "was/is/will be" 15% whether they are referring to the volatility of the actual returns rather than their logs.

@Setforlife can you post some of the code for the Monte Carlo simulations. I usually simulate the log of the return as being Normal but this reference to volatility drag makes me wonder is copilot simulating the actual returns as being Normal i.e. the chance of being 50% below its median is the same as the chance of being 50% above its median which would lead to volatility drag.
 
I queried copilot on this volatility point and this is what it said

Short explanation

When people say a stock had 15% volatility, they almost always mean:
→ The standard deviation of log returns (continuously compounded returns), annualized.
Why?
• Log returns add cleanly over time.
• They fit standard models like geometric Brownian motion.
• For daily data, log‑return volatility and arithmetic‑return volatility are almost identical, so the convention defaults to logs.

Bottom line:
“15% volatility” = log‑return volatility in nearly all professional and academic contexts.


So I don’t see how volatility drag got into the earlier stuff.
 
can you post some of the code for the Monte Carlo simulations
Unfortunately the formatting gets ruined in the copy for some reason, I made a small attempt to make it legible, python script:

import numpy as np

# Parameters a_age=53; r_age=61; horizon=40 years=r_age-a_age bal_ta0=850000.0; bal_tx0=100000.0 contrib_ta=35000.0; contrib_tx=0.0 mu=0.065; sigma=0.15; fee=0.005; infl=0.022 tax=0.20 np.random.seed(42); paths=3000



# Accumulation acc_ta=np.zeros(paths);

acc_tx=np.zeros(paths) for p in range(paths): ta=bal_ta0; tx=bal_tx0 for y in range(years): r=np.random.normal(mu,sigma);

net=(1+r)*(1-fee)-1 ta*=1+net; tx*=1+net ta+=contrib_ta; tx+=contrib_tx acc_ta[p]=ta; acc_tx[p]=tx



# Retirement term=np.zeros(paths);

med_inc=np.zeros(paths) inc66=np.zeros(paths);

inc75=np.zeros(paths) for p in range(paths): ta=acc_ta[p]; tx=acc_tx[p] incomes=[] for yr in range(horizon): age=r_age+yr



# returns r=np.random.normal(mu,sigma);

net=(1+r)*(1-fee)-1 ta*=1+net; tx*=1+net tot=ta+tx if tot<=0: pension=(15500 if age>=66 else 0)*((1+infl)**yr) incomes.append(pension);

continue target_net=0.06*tot



# take from taxadv take_ta=min(ta, target_net) ta-=take_ta rem_net=target_net-take_ta



# taxable gross needed if rem_net>0: gross_tx=rem_net/(1-tax) take_tx=min(tx, gross_tx) tx-=take_tx net_from_tx=take_tx*(1-tax) else: take_tx=0;



net_from_tx=0 pension=(15500 if age>=66 else 0)*((1+infl)**yr) incomes.append(take_ta+net_from_tx+pension) if age==66: inc66[p]=incomes[-1] if age==75: inc75[p]=incomes[-1] term[p]=ta+tx med_inc[p]=np.median(incomes) res={"Accum@61_med":float(np.median(acc_ta+acc_tx)),



"Inc66_med":float(np.median(inc66)), "Inc75_med":float(np.median(inc75)), "Med_annual_net_income":float(np.median(med_inc)), "Terminal_med":float(np.median(term)), "Terminal_p10":float(np.percentile(term,10)), "Terminal_p90":float(np.percentile(term,90))} res
 
Sorry, the bondholder isn't yet quite ready to go shopping, so I've had a quick look at co-pilot's latest offering.
The main assumption that jumps out at me this time is the 2% risk-free return. I think I saw somewhere that it was assuming inflation at 2% pa, which implies a zero real return on bonds. In my own work, I've assumed a long-term risk-free return of around 3% a year if inflation is 2% a year, i.e., real return of 1% a year on bonds.
It would be interesting to see co-pilot's justification for assuming a zero real return on bonds (unless it's assuming inflation less than 2% a year).
As noted, you will never win a debate with an AI tool as they are very flexible in their opinion and usually source quite well, eg why did it set the risk free return at 2%, and it basically agrees with you that it’s 3% but that it’s adjusted it for long term equilibrium

. ‘“The risk‑free rate was set at 2% because this is the standard long‑run nominal risk‑free assumption across major ERP literature, macro‑models, and valuation frameworks — reflecting ~1% real rate + ~2% inflation, adjusted for long‑term equilibrium.”

Great question — and an important one, because the risk‑free rate (RFR) is a foundational input into the Equity Risk Premium (ERP) and any long‑run return modelling.


Let me answer clearly and directly.





---





✅ Why was the risk‑free rate set at 2%?


It wasn’t arbitrary — 2% is a widely used, academically grounded long‑run estimate of the real (inflation‑adjusted) risk‑free rate, and it appears implicitly or explicitly throughout major ERP research literature.


Here's the reasoning and evidence.





---





1. Academic ERP frameworks anchor the RFR around 1–2% real


Many ERP studies rely on an assumed long‑run equilibrium risk‑free rate rather than the spot rate, because spot yields are cyclical and unreliable for 30–50 year forecasts.


Examples:


CFA Institute Literature Review (Siegel, 2017)


Siegel discusses both historical and forward‑looking ERP approaches and shows that long‑run estimates often assume stable real risk‑free rates when computing expected excess returns, implying a normalized RFR rather than using short‑term yields.


1


Damodaran (NYU Stern) ERP Framework


Damodaran’s ERP methodology decomposes expected equity return into:


• risk‑free rate


• plus ERP


He emphasises that the RFR must reflect long‑run expected inflation, not the temporary yield curve, and that forward‑looking estimates use real rates adjusted for inflation expectations rather than contemporaneous nominal yields.


2


This method typically produces long‑run nominal RFR values of 2–3%, given 1–2% real + 1.5–2% inflation.





---





2. Macro-finance models use incomplete‑markets equilibrium RFR of ~1–2% real


Major models in asset‑pricing (Mehra & Prescott, Barro’s disaster models, Wachter’s rare‑disaster extensions) rely on long‑run real risk‑free rates around 1% or slightly above, consistent with the equilibrium return on safe assets.


The Oxford Academic 2022 paper highlights how rare‑event models and sector‑risk models generate conditional ERP estimates but implicitly rely on a low real RFR consistent with historical and theoretical equilibrium levels.


3





---





3. Central banks’ long‑run expectations also imply a 2% nominal RFR


The Federal Reserve Bank of New York’s ERP study used inputs from 20 different ERP models, many of which implicitly assume a low, stable risk‑free rate as part of their forward‑looking framework.


4


Given:


• 2% inflation target


• 0–1% real long‑run safe return


…a nominal risk‑free rate around 2% is fully consistent with the assumptions used by researchers.





---





4. Forward‑looking ERP estimates usually reverse‑engineer the RFR


In forward‑looking ERP work (implied ERP):


• ERP = Expected Equity Return − Risk‑Free Rate


If implied ERP is estimated at 4–5.5%, and long‑run expected equity returns are 6–7%, then the implied long‑run RFR is necessarily ~1.5–2%.


Grant Thornton’s 2024 ERP study also uses both historical and forward‑looking approaches that assume a structurally low risk‑free rate, consistent with long‑term valuation multiples and inflation targets.


5





---





5. Using current yields (e.g., 10‑year bonds today) would distort long‑run modelling


Current bond yields fluctuate sharply with:


• economic cycles


• central‑bank policy


• liquidity conditions


• temporary shocks


But your retirement horizon is 48+ years (from age 53 to ~100), so the model should use a regime‑average RFR, not the yield curve snapshot on any given day.


That’s why virtually all academic ERP prediction work uses normalized inputs, not spot yields.





---





Direct Answer in One Line


The risk‑free rate was set at 2% because this is the standard long‑run nominal risk‑free assumption across major ERP literature, macro‑models, and valuation frameworks — reflecting ~1% real rate + ~2% inflation, adjusted for long‑term equilibrium.





---





⭐ If you prefer, we can absolutely change it.


I can rerun your entire Monte Carlo using:


• 1% RFR (ultra‑conservative)


• 2% RFR (academic equilibrium)


• 3% RFR (aligned to some historical periods)


• 5% RFR (1970s-style inflation/interest regime)


• Or an ERP‑driven dynamic RFR consistent with the NY Fed or Damodaran implied models.


Just tell me which version you want, and I’ll produce:


• Updated expected returns


• Updated portfolio path


• Updated net income path


• Updated terminal wealth distribution


Ready to rerun when you are.
 
, I made a small attempt to make it legible, python script
Yes it is assuming that r is Normal(mu, sigma) that is there is the same chance or r being mu - 50% as being mu + 50%. This gives volatility drag. Lognormal would have the chances of halving being the same as the chances of doubling (ignoring mu)
 
Yes it is assuming that r is Normal(mu, sigma) that is there is the same chance or r being mu - 50% as being mu + 50%. This gives volatility drag. Lognormal would have the chances of halving being the same as the chances of doubling (ignoring mu)
Isn’t a normal distribution correct though? It’s starting from mu:6.5% and sigma:15% although maybe this is high for volatility?

Some of the terms are relatively new to me (although not the code or the maths) but the risk free return and the sharpe ratio seem key points in Colms approach, how much excess return is he getting for his increase volatility in holding riskier assets. In this example it comes out at 0.44, but I presume for Colm’s more concentrated strategy it would come out at much lower than that, 0.1 or 0.2.

Obviously you are unlikely to get 15% excess returns with 15% expected volatility so the only way to increase sharpe ratio would be to reduce equities. This is where I feel AI is most powerful in doing grunt work on the options, eg:

If your goal is specifically:


“Make my real‑world retirement portfolio exhibit Sharpe ≈ 1.”


Then:


1. Reduce equity weight (move to ~25–40%)


2. Add global bonds and inflation‑linked bonds


3. Add alternative risk premia (value, momentum, quality)


4. Add managed futures (trend‑following)


5. Rebalance quarterly


6. Keep fees at ≤0.3%


7. Optionally add 1.2–1.5× leverage to diversified low‑vol portfolio


This is essentially how institutional risk‑parity and “all‑weather” portfolios achieve Sharpe ≈ 0.8–1.1.
 
I’m on the move now and can’t give it much time but normal is definitely wrong. The usual (I was going to say ‘normal’!) assumption is that logs of price movements are distributed normally, e.g., the probability of the price doubling is the same as the probability of it halving, and definitely not the same as the probability of it falling 100%, I.e., going to zero.
 
And this is where AI can really fall down, it explains why it was right and then agrees that it was wrong! Although in fairness it makes a good case for both. The great things is you can keep checking, asking, adapting. If you were using paid software you often can’t even find out exactly how it is doing things or why.

Great question — and an important modelling point.
Short answer: I used a normal distribution in the Python code because the simulation was built around annual total returns, where a normal distribution is a common simplifying assumption in retirement Monte‑Carlo modelling. But strictly speaking, a lognormal model is more realistic for modelling compounded wealth paths, especially when returns are applied multiplicatively.
Below is the full explanation.


✅ 1. Why the code used a normal distribution
In the simulation, each year’s return was generated as:r = np.random.normal(mu, sigma)net_r = (1 + r) * (1 - fees) - 1This means annual returns were drawn from a normal distribution.
This is a standard simplification used in many financial Monte‑Carlo setups because:

A. Annual stock returns are often approximated as normal
Although daily returns are skewed and fat‑tailed, annual returns tend to be more symmetric, which is why some models use a normal assumption for year‑on‑year returns. This is linked to the central limit theorem and historically observed distributions in long‑term equity return studies (e.g., Dimson–Marsh–Staunton global return database, widely cited in CFA research) showing long‑run aggregated equity returns approximate a normal shape at annual frequency. 1

B. The simulation logic already composes returns multiplicatively
Even though r is normal, wealth evolves as:
\[
\text{Wealth}_{t+1} = \text{Wealth}_t \times (1 + r)
\]
Multiplying normal‑distributed annual growth rates yields a wealth distribution that is already skewed/lognormal‑like, even if the increments themselves are normal.

C. Academic Sharpe‑ratio and risk‑premia research often models excess returns as normal
For example, Sharpe’s own formal exposition of the ratio treats returns in a mean‑variance framework, which assumes normally distributed returns or, more generally, elliptical distributions. 2

Andrew Lo’s statistical analysis of Sharpe ratios also explicitly treats returns as normal (iid or stationary) in the derivation of sampling properties. 3
Meaning: using normal returns aligns with much of the theoretical machinery.

❗ But: Normal is not the best model for return distributions
You are absolutely right to challenge it.
Normal returns allow:

  • Negative returns below -100% (impossible)
  • Too many extreme losses/gains relative to reality
  • Underestimation of fat tails and skewness
  • Misrepresentation of multiplicative compounding
Financial return distributions are empirically:
  • Skewed
  • Fat‑tailed
  • Multiplicative, not additive
That is exactly what a lognormal assumption captures.

✅ 2. Should we use a lognormal model instead?
Yes — especially if we care about:

  • Proper tail‑risk behaviour
  • Wealth‑tractable (always ≥ 0) trajectories
  • More accurate compound return distributions
  • Better modelling of extreme events (sequence‑risk)
A more realistic return generator would look like:
\[
\text{Gross return} = e^{(\mu - \frac{1}{2}\sigma^2)} e^{\sigma Z}
\]
Or in code:r = np.random.normal(mu_adj, sigma)gross_return = np.exp(r) - 1This ensures:

  • Returns > -100%
  • Geometric (compound) structure
  • Skew consistent with empirical data

3. Does using lognormal materially change your withdrawal modelling?
Yes — especially in the tails


Feature
Normal-based simulation
Lognormal-based simulation
Tail behaviour
Too thin

More realistic (fat-tailed)

Chance of extreme drawdowns

Understated

More accurate

Wealth distribution

Symmetric-ish

Skewed (right‑tail)

Sequence‑of‑returns risk

Underestimated

Higher realism

Withdrawal sustainability

Slightly overstated

Slightly lower
Since your plan involves:
  • 100% equities
  • Large volatility (σ ≈ 15%)
  • Long horizon (40+ years)
A lognormal model would produce slightly worse median outcomes and heavier left tails, meaning:
✔ risk is more realistically modelled
✔ sustainable withdrawal rates appear slightly lower
✔ adverse sequences are more impactful
For your setup, using lognormal would tighten the realistic picture of 6% withdrawals.


4. Do you want me to convert your model to a lognormal‑return simulation?
I can immediately re‑run:
✔ Your entire Monte‑Carlo engine
✔ With lognormal returns (geometric Brownian style)
✔ With ERP‑based expected returns
✔ With 0.5% fees and 6% net withdrawals

This will give you:

  • New median retirement income path
  • New terminal wealth distribution
  • More realistic left‑tail risk
  • More realistic age of taxable account usage
  • A more academically grounded model
Just say:
“Yes — run the lognormal simulation.”
and I’ll rebuild the model properly.
 
This should probably all be in another thread, but here are the results for the lognormal, it basically just skews slightly both ways for this set of assumptions.

Awesome — I’ve rebuilt your simulator using a lognormal (GBM) return process and reran the full Monte‑Carlo with your latest settings:
  • Asset mix: 100% equities
  • Arithmetic expected nominal return (pre‑fee): 6.5%
  • Volatility: 15%
  • Fees: 0.5% (applied multiplicatively each year)
  • Inflation (for pension indexation): 2.2%
  • State Pension: €15,500 from age 66, indexed to inflation
  • Withdrawals: 6% net of the end‑of‑year portfolio value (draw tax‑adv first, then taxable grossed up to leave 6% net; 20% effective tax on taxable draws)
  • Balances now: Tax‑adv €850k; Taxable €100k
  • Contributions to 61: €35k/yr into tax‑adv; €0 to taxable
  • Horizon: From age 53 → 61 (accumulation), then 61 → 101 (retirement)
  • Paths: 3,000
How the lognormal engine was set up (key detail)
For each year, I simulated a gross growth factor using GBM:
\[
G = e^{\mu_g + \sigma Z},\quad Z\\sim\\mathcal{N}(0,1)
\]
with
\[
\mu_g = \ln(1+\\text{arithmetic }\\mu) - \\tfrac{1}{2}\\sigma^2
\]
This choice makes the expected arithmetic return match 6.5% before fees. Fees are then applied multiplicatively: balance *= G * (1 - fee).


Results (lognormal returns)
(All values in EUR, nominal)
At age 61 (before withdrawals)

  • Portfolio @61 (median): €1,702,275
  • 10th–90th percentile: €1,090,677 – €2,828,668
Income levels (net to you)
  • First‑year net withdrawal @61 (6%): €106,709 (median)
  • Total net income @61 (includes pension): €106,709 (median)
  • Net income @66 (pension starts): €116,963 (median)
  • Net income @75: €107,473 (median)
  • Median of path medians (annual net income over retirement): €103,425
  • Median of path means (annual net income): €108,084
Terminal wealth @101
  • Median: €943,203
  • 10th–90th percentile: €254,793 – €3,554,107

What changed vs. the earlier normal‑return model (same fees 0.5%, same 6% net rule)

Metric
Normal
Lognormal
Direction
Portfolio @61 (median)
€1,729,971

€1,702,275

↓ slight

Net income @66 (median)

€118,956

€116,963

↓ slight

Net income @75 (median)

€110,286

€107,473

↓ modest

Median of path medians (annual net income)

€106,402

€103,425


Terminal wealth @101 (median)

€1,003,989

€943,203


Terminal wealth p10

€275,530

€254,793

↓ (worse left tail)

Terminal wealth p90

€3,411,669

€3,554,107

↑ (heavier right tail)
Interpretation:
The lognormal engine produces a more negatively skewed left tail (slightly worse low‑outcomes) and a heavier right tail (higher best‑case outcomes). Median income and terminal wealth are a bit lower than under the normal‑return assumption—which is the expected direction once you model compounding and skew properly. In plain English: the lognormal model is a touch more conservative where it matters (bad sequences) and a bit more generous in great sequences.


Why this is more realistic
  • It rules out impossible returns below −100% and respects multiplicative compounding.
  • It captures skew: bad sequences hurt more than a symmetric (normal) model suggests.
  • Over long horizons (40+ years at 100% equity), these differences show up in lower medians and worse p10, even if the p90 can look better.

What you might want to explore next (I can run immediately)
  1. ERP‑anchored scenarios: Replace the 6.5% arithmetic assumption with RF + ERP (e.g., RF=2%, ERP = 4.0/4.75/5.5%) to show a band of outcomes grounded in the literature.
  2. Add bonds (70/30 or 60/40): See how lower volatility changes median income and fat‑tail risk.
  3. Fee sensitivity: Re‑run at 0.30% fees — this typically gives a meaningful boost to income and terminal wealth.
  4. Cash buffer: Hold 2–3 years of spending in cash and refill after up years—reduces sequence risk.
  5. Alternative sourcing: Instead of “tax‑adv first”, test a pro‑rata or bracket‑fill strategy to smooth taxes in later years.
  6. Year‑over‑year income caps: Keep the 6% net rule but limit changes to ±10% to stabilise income.
If you tell me which two comparisons you care about most (e.g., 70/30 vs 100% equity, and fees 0.30% vs 0.50%), I’ll run them side‑by‑side and summarize the deltas.
 
Back
Top