Implementation Notes: Monte Carlo Simulation
Comparison of the actual implementation with the documented methodology
Alignment with Documentation
This document compares the actual implementation with the methodology described in the Monte Carlo documentation.
Correctly Implemented
- Historical Bootstrap Model: The implementation uses historical returns with bootstrap sampling (single year or block method), matching Section 3.1.
- Portfolio Configuration: Supports configurable initial amount, time horizon, and number of simulations as described in Section 4.1.
- Inflation Adjustment: Inflation-adjusted withdrawals are implemented using the formula: W_t = W_0 × (1 + inflation_rate)^year_idx, matching Appendix B.
- Rebalancing: Annual rebalancing is supported (configurable), matching Section 7.
- Survival Definition: Portfolio survival is correctly defined as maintaining a positive balance after all withdrawals, matching Section 8.
- Performance Metrics: All metrics from Section 9 are calculated: TWRR, Nominal/Real Returns, Volatility, Maximum Drawdown, Sharpe Ratio, Sortino Ratio.
- Percentile Analysis: Results are reported across percentiles (10th, 25th, 50th, 75th, 90th), matching Section 11.1.
Implementation Differences
1. Withdrawal Timing
Documentation (Section 6.1): Withdrawals are made "at the end of each year"
Implementation: Withdrawals are applied before the return for the year, which effectively means withdrawals happen at the beginning of the year period
Impact: This may slightly affect sequence-of-returns risk calculations
2. Portfolio Value Evolution Formula
Documentation (Appendix A): V_{t+1} = (V_t - W_t) × (1 + R_t)
Implementation: The current implementation applies returns first, then adjusts for withdrawals, which is mathematically equivalent but the order differs
Note: The mathematical result should be the same, but the implementation order could be clearer
3. Inflation Modeling
Documentation (Section 5.1): Uses historical CPI-U data with mean 3.93% and std 1.31%
Implementation: Uses a configurable fixed inflation rate (default 3%)
Impact: The implementation doesn't use historical inflation data with its distribution; it uses a fixed rate
4. Asset Allocation
Documentation (Section 4.2): Example shows 100% US Stock Market
Implementation: Supports multiple assets with configurable allocations
Note: This is an enhancement, not a discrepancy
5. Withdrawal Models
Documentation (Section 6.1): Describes fixed real withdrawal strategy
Implementation: Supports multiple withdrawal models (fixed amount, fixed percentage, life expectancy, custom sequence)
Note: This is an enhancement providing more flexibility
Areas for Potential Improvement
- Historical Inflation Data: Consider implementing historical inflation sampling similar to historical returns, rather than using a fixed rate.
- Withdrawal Timing Clarification: The documentation states withdrawals occur "at the end of each year," but the implementation effectively applies them at the beginning. Consider aligning the implementation or updating the documentation to match the actual behavior.
- Return and Withdrawal Order: The portfolio value evolution formula in the documentation suggests: withdraw first, then apply return. The implementation could be refactored to match this order more explicitly for clarity.
Verification Checklist
Conclusion
The implementation is largely aligned with the documentation, with the main differences being:
- Enhanced flexibility (multiple withdrawal models, multiple assets)
- Simplified inflation modeling (fixed rate vs. historical distribution)
- Minor difference in withdrawal timing interpretation
The core methodology, formulas, and metrics match the documentation, ensuring the simulation provides accurate and meaningful results.