# Bootstrap SOR


this content generated by ChatGPT 5.2 Instance, 2/13/2026

# Block Bootstrap Sequence-of-Returns (SOR) Model

    method = "bootstrap_sor"

## Overview

The Block Bootstrap SOR model generates retirement return paths by
**resampling historical return blocks** rather than drawing from a
parametric distribution.

Instead of assuming normality or AR structure, this method:

- Preserves empirical multi-year crisis shapes
- Preserves cross-asset correlation
- Preserves volatility clustering
- Preserves skew and fat tails
- Avoids distributional assumptions

This makes it particularly well suited for modeling
**sequence-of-returns risk** in retirement.

------------------------------------------------------------------------

# 1. Core Concept

Let historical data exist for years:

\[ 1928, , 2025\]

For each year we have:

\[ r_t = \[, , , \]\]

Instead of modeling a distribution, we **resample contiguous blocks** of
historical returns.

# 2. Why Blocks (Not Single Years)?

If we resampled single years independently:

\[ r_t ()\]

We would destroy:

- Multi-year crashes
- Recovery phases
- Volatility clustering
- Persistent inflation regimes

Block bootstrapping preserves **time dependence** inside each block.

# 3. Algorithm Structure

## Step 1 — Choose Block Length

Let:

\[ L = \]

Typical values:

| Block Length | Interpretation                           |
|--------------|------------------------------------------|
| 1            | Independent resampling (not recommended) |
| 3–5          | Short market cycles                      |
| 5–10         | Crisis-length persistence                |
| 10+          | Great Depression / lost decade modeling  |

## Step 2 — Partition Historical Data

Historical data of length ( T ) yields:

\[ T - L + 1\]

overlapping blocks:

\[ \[r_1, , r_L\], \[r_2, , r\_{L+1}\], \]

Each block is a ( L ) matrix.

## Step 3 — Sample Blocks

To generate an ( N )-year retirement horizon:

1.  Randomly sample blocks with replacement
2.  Concatenate them
3.  Truncate to length ( N )

\[ = \_3 \| \_17 \| \_5 \]

# 4. What This Preserves

Within each block:

- Serial correlation
- Volatility clustering
- Crisis shape
- Inflation regime persistence
- Cross-asset correlation

Across blocks:

- Independence

So dependence is **piecewise persistent**.

# 5. Model Properties

| Property              | Behavior                   |
|-----------------------|----------------------------|
| Distribution          | Empirical (nonparametric)  |
| Fat tails             | Preserved                  |
| Skew                  | Preserved                  |
| Volatility clustering | Preserved within block     |
| Regime switching      | Preserved if block large   |
| Stationarity          | Weak (depends on sampling) |
| Mean reversion        | Emergent from data         |

# 6. Mathematical Form

Let historical data be:

\[ {r_1, r_2, …, r_T}\]

Define block starting index ( i ):

\[ B_i = {r_i, r\_{i+1}, …, r\_{i+L-1}}\]

Sample:

\[ i_1, i_2, …, i_k (1, T-L+1)\]

Construct:

\[ R = B\_{i_1} \| B\_{i_2} \| \]

Truncate to ( N ).

# 7. Variants of Block Bootstrap

### 7.1 Fixed Block Bootstrap

All blocks length = L.

Simplest and most common.

### 7.2 Moving Block Bootstrap (MBB)

Same as above, but overlapping blocks allowed.

This is typically what is implemented.

### 7.3 Stationary Bootstrap (Politis & Romano)

Block lengths are random (geometric distribution).

This smooths block boundary artifacts.

### 7.4 Circular Bootstrap

Blocks wrap around end of dataset.

Useful when using full historical range cyclically.

# 8. Block Length Tradeoffs

Small L:

- More mixing
- Less persistence
- Less crisis realism

Large L:

- Strong regime persistence
- Fewer unique paths
- Risk of overfitting to specific eras

Typical retirement modeling sweet spot:

    block_length = 5–8 years

# 9. Cross-Asset Structure

Because entire historical rows are sampled:

- Stock–bond correlation is preserved
- Stock–inflation correlation preserved
- Bond–inflation correlation preserved

No covariance matrix required.

# 10. Interaction with OWL Parameters

Bootstrap integrates cleanly with:

- `reverse_sequence`
- `roll_sequence`
- `rate_seed`
- `reproducible_rates`

Reverse and roll apply **after block assembly**.

# 11. Behavior in Retirement Modeling

Bootstrap tends to produce:

- More clustered crashes
- Realistic multi-year downturns
- Authentic inflation spikes
- Natural recovery sequences

It captures:

- 1930–32
- 1973–74
- 2000–02
- 2008–09
- 2022 inflation spike

without needing parametric modeling.

# 12. Comparison vs Toeplitz

| Feature               | Toeplitz    | Bootstrap             |
|-----------------------|-------------|-----------------------|
| Distribution          | Parametric  | Empirical             |
| Crisis shape          | Approximate | Exact                 |
| Fat tails             | Optional    | Automatic             |
| Volatility clustering | Modeled     | Preserved             |
| Structural breaks     | No          | Yes (if blocks large) |
| Smoothness            | Smooth      | Piecewise             |
| Stress test control   | High        | Moderate              |
| Overfitting risk      | Low         | Moderate              |

# 13. Advantages

- No normality assumption
- Preserves true crisis dynamics
- Simple to implement
- Empirically grounded
- Strong SOR realism

# 14. Disadvantages

- Limited to available history
- Cannot generate unprecedented events
- Block boundaries introduce mild artifacts
- Long blocks reduce path diversity

# 15. Recommended Default Parameters

For retirement modeling:

    method = "bootstrap_sor"
    from = 1928
    to = 2025
    block_length = 6
    rate_seed = 42
    reproducible_rates = true

# 16. Interpretation in Retirement Risk Context

Bootstrap answers:

> “What if your retirement experienced something structurally like
> 1973–74 or 2008–09?”

Toeplitz answers:

> “What if returns exhibit realistic statistical persistence?”

Both model sequence risk differently.

# 17. Advanced Extensions (Optional)

You could extend bootstrap to:

- Regime-weighted sampling
- Crisis oversampling
- Inflation-regime conditional sampling
- Block-length randomization
- Stress-augmented bootstrap (e.g. scale returns by factor)

# 18. When to Prefer Bootstrap

Use bootstrap when:

- You prioritize historical realism
- You want authentic crisis clustering
- You distrust parametric assumptions
- You want empirically grounded SOR modeling
