Bootstrapping: simulating from the data you have
Bootstrapping treats the observed sample as the population and draws from it at random, with replacement, so each observation has a 1/n chance on every draw. It needs no assumed distribution and gives standard errors and confidence intervals, but it cannot produce an outcome outside the observed data.
Before this: Historical simulation and historical value at risk
On the exam
- Describe bootstrap resampling, and explain how it can be used in investment applications
Describe bootstrap resampling and explain its uses. Expect the contrast with historical simulation (with versus without replacement; sample as population versus past as population), the probability of a draw (count ÷ n, whatever came before), its strengths and weaknesses, and its use for standard errors and confidence intervals.
How deeply to learn each part
- Know the idea
- Understand it in general. It frames other topics, but you will not calculate with it.
- Use it
- Understand it well enough to solve a question with it. Recognize when it applies.
- Memorize
- Learn it by heart. The exam will not give it to you.
You know this one. The full lesson is folded away. The takeaways, formulas and checkpoint below are your quick refresher, and the checkpoint is a fair test of whether you still do.
You tested strong here. The full lesson is folded away. The takeaways, formulas and checkpoint below are your quick refresher, and the checkpoint is a fair test of whether you still know it.
How can you simulate without assuming a distribution?
Use the data you already have. Bootstrap resampling pretends the sample you hold is the whole population and draws from it at random. You never see the true population, but a random sample should resemble it, so repeated draws from the sample play the part of repeated draws from the population. Each data point has the same chance, 1/n, of being picked on every draw, because it goes back into the pool each time.
Monte Carlo asks you to choose a distribution. Bootstrapping skips that choice: the empirical distribution , the pattern of values actually observed, is the distribution.
Historical simulation also uses past data, but differently: it replays each date once, as it happened (lesson 2). Bootstrapping redraws the data at random, so the same observation can appear twice and others not at all.
Try this 0 of 3
- Draw until a tile repeats in one path.
- Leave out the crash month and compare the share of 12-month paths that lose more than 20%.
- Build the volatility interval, then leave out the crash month.
1,000 bootstrapped 6-month returns drawn with replacement from 24 observed monthly log returns, each path the sum of its draws: mean +2.40%, standard deviation 10.14%, skewness −0.70. 3.1% of paths are worse than −20%, against 1.4% under a normal curve. Nothing in the simulation is worse than the history allows.
Observed sample: 24 monthly log returns (%)
- +2.1%M1
- +1.4%M2
- −0.8%M3
- +3.2%M4
- +0.6%M5
- −16.5%M6
- +3.4%M7
- +1.9%M8
- −2.3%M9
- +2.7%M10
- +1.1%M11
- +3.6%M12
- −8.2%M13
- +2.4%M14
- +0.9%M15
- +1.7%M16
- −1.2%M17
- +3.0%M18
- +2.2%M19
- −4.6%M20
- +1.5%M21
- +4.1%M22
- +0.3%M23
- +2.6%M24
Mean +0.21%, standard deviation 4.52%, skewness −2.48 (a long left tail). The tile just drawn is outlined; it stays in the pool.
This path: 6 of 6 draws
- +3.2%M4 again
- +1.1%M11
- +3.2%M4 again
- −4.6%M20
- −2.3%M9
- +1.7%M16
Path log return: +2.30% (log returns add). A share at 80.00 ends at 81.86, a +2.33% return. A month appears twice: draws are with replacement.
1,000 simulated 6-month returns
- Bootstrap paths
- Normal, same mean and σ
- Worse than −20%
Show working
Bootstrap: treat the 24 observed months as the population. Draw a month at random, record it, put it back (each month has a 1/n chance on every draw); repeat for each month of the path.
Log returns add: the path's log return is the sum of its draws, and the end price is P₀ × e^(sum).
1,000 paths of 6 months: mean +2.40%, standard deviation 10.14%, skewness −0.70 (the sample's −2.48 is diluted as months are added together, but the left tail survives).
Paths worse than −20%: 3.1% in the bootstrap against 1.4% under the normal curve.
Worst simulated path: −34.5%. It can only be built from months in the pool; the worst month there is −16.5%.
This path: 3.2 + 1.1 + 3.2 − 4.6 − 2.3 + 1.7 = 2.3%. End price 80.00 × e^0.023 = 81.86.
A call with a strike of 80.00 expiring at the end of this path pays max(81.86 − 80.00, 0) = 1.86. Average such payoffs over thousands of paths for an estimate, but not a fair price: the draws carry the past drift, not the risk-free rate.
- 3.2+1.1+3.2+4.6+|-+2.3+|-+1.7=2.3
- ÷100=2NDe^x×80=81.86
+|- change sign · 2ND second function (the shifted label above a key) · e^x e to the power x
- 3.2ENTER1.1+3.2+4.6CHS+2.3CHS+1.7+2.3
- 100÷ge^x80×81.86
ENTER enter (on the HP, puts the number on the stack) · CHS change sign · g blue shift key · e^x e to the power x
Display: 81.86
Draw months to build a path, then run a thousand paths and compare the bootstrap histogram with the normal curve. The bootstrap keeps whatever skew the data had. On the second tab, run 2,000 resamples to see how uncertain a volatility estimate from 24 months really is.
How does it work?
Memorize
Bootstrap simulation runs the four steps of every simulation. Only step 2 is special: draw one observation at random, record it, put it back, and repeat.
- 1. Setup collect the sample; define the output and its formula
- 2. Scenario generation
- Draw a random position from 1 to n Memorize RANDBETWEEN in a spreadsheet
- Look up that observation
- Put it back Memorize with replacement, probability 1/n every draw
- Repeat for every step of the path
-
- 3. Scenario evaluation sum the log returns, price, payoff or statistic
- 4. Results thousands of paths, then mean, spread, percentiles
The rule that matters is sampling with replacement : each item drawn goes back into the pool before the next draw, so it can be drawn again. Drawing a new sample from the one you hold in this way is resampling : in a resample the same size as the original, some items appear several times and others not at all.
Because every draw faces the same n observations, each one has the same selection probability 1/n on every draw, whatever was drawn before. Take 50 returns, 10 of them above +3%. The chance that a draw is above +3% is 10 ÷ 50 = 20%, even if the last three draws were all above +3%. Taking the earlier draws out of the count (7 ÷ 47 = 14.89%) is the without-replacement trap.
To simulate a path, number the observed returns, draw a position at random, copy that return into the path, put it back, and repeat once per step. A path’s log return is the sum of its draws, and the end price is the start price times e raised to that sum.
That average is not a fair price for the option. The draws carry whatever drift the share had in the past, while option pricing grows the share at the risk-free rate (lesson 4). With a strong past uptrend, the bootstrapped value comes out well above the closed-form value.
The simulated end prices spread fairly symmetrically, but the payoffs are heavily skewed: many paths pay zero and a few pay a lot, because the payoff is not linear in the price.
The time grid must match the data. Monthly observations feed monthly steps, so a year of simulated returns needs 12 draws. Everything after the draws is identical to Monte Carlo: compute the outcome on each path, repeat thousands of times, then summarize. Only the source of the random numbers differs.
Bootstrapping is also a tool for statistics. Draw many resamples of the same size as the data, compute the statistic in each (a mean, variance, skewness, kurtosis) and look at how it varies. That gives the sampling distribution of a statistic without an analytical formula.
How does bootstrapping estimate a standard error or a confidence interval?
Draw a resample of the same size as the data, with replacement. Compute the statistic you care about (a mean, a median, a volatility, a correlation). Repeat thousands of times. The standard deviation of those statistics is the bootstrap standard error . The 2.5th and 97.5th percentiles of them give a 95% interval, a bootstrap percentile confidence interval .
In a spreadsheet, =INDEX(B:B, RANDBETWEEN(2, N)) makes one draw, STDEV() gives each resample’s volatility, SMALL() and LARGE() read the percentiles, and CONFIDENCE.NORM() gives a normal-theory margin. Confidence intervals built from a formula are in Learning Module 7.
Strengths and weaknesses
A bootstrap path is built only from what has been seen. With log returns between −8% and +15%, a three-draw path can fall at most 3 × 8% = 24% in log terms (the price ends at e^−0.24 = 78.7% of its start) and rise at most 45% (e^0.45 = 156.8%). No bootstrap path can leave that range, however many are run.
So a calm sample gives calm results. Ten quiet years contain no crash, and a bootstrap from them cannot invent one. Monte Carlo can, if its distribution allows it.
- Strengths Memorize
- Minimal assumptions no distribution needed
- Works with small samples reliable variability estimates from limited data
- Simple no analytical solution needed
- Standard errors and confidence intervals for almost any statistic
- Dilutes outliers compared with historical simulation, an extreme point is drawn only now and then
- No large external data set works from the sample at hand
-
- Weaknesses Memorize
- Computationally intensive thousands of resamples
- Sensitive to sample quality a biased sample gives biased results
- Breaks time links not ideal for autocorrelated data
- Limited extrapolation nothing beyond the observed range
- No analytical insight estimates, not explanations
-
| Historical | Bootstrap | Monte Carlo | |
|---|---|---|---|
| Source of draws | the past data as it happened | the observed sample | a distribution you specify |
| Replacement | no | yes | not applicable |
| Assumes | past = future | sample = population | process can be modeled |
| Unseen extremes | no | no | yes |
| Typical use | risk management, stress tests | standard errors, confidence intervals | complex securities, what-if analysis |
| Main risk | window not representative | sample not representative | wrong model |
- Historical each past date once, no replacement
- Bootstrap Memorize observed data, with replacement
- Monte Carlo an assumed distribution
Like Monte Carlo, bootstrapping gives statistical estimates rather than exact results and complements analytical methods.
Exam tip Draws from a specified distribution: Monte Carlo. Draws from observed data, with replacement: bootstrap.
Go deeper Why plain bootstrapping breaks time patterns
Each draw is independent, so any link between one observation and the next (autocorrelation, volatility clustering) is lost. Specialized versions resample whole blocks of consecutive observations; they are not examined at this level.
Memorize this
MemorizeBootstrap versus its neighbors
| Historical | Bootstrap | Monte Carlo | |
|---|---|---|---|
| Draws | each date once | random, with replacement | random, from a distribution |
| Assumes | past = future | sample = population | process can be modeled |
| Draw probability | not random | 1/n every draw | from the distribution |
| Beyond the data? | no | no | yes |
| Typical use | risk management | standard errors, confidence intervals | complex securities |
Memory hook Bootstrap = pull yourself up by your own data. Nothing new goes in, so nothing new comes out.
Know it cold Each draw: probability 1/n, whatever was drawn before. Path log return = sum of the draws; price = .
- 1. Setup collect the sample; define the output and its formula
- 2. Scenario generation
- Draw a random position from 1 to n Memorize RANDBETWEEN in a spreadsheet
- Look up that observation
- Put it back Memorize with replacement, probability 1/n every draw
- Repeat for every step of the path
-
- 3. Scenario evaluation sum the log returns, price, payoff or statistic
- 4. Results thousands of paths, then mean, spread, percentiles
- Historical each past date once, no replacement
- Bootstrap Memorize observed data, with replacement
- Monte Carlo an assumed distribution
- Strengths Memorize
- Minimal assumptions no distribution needed
- Works with small samples reliable variability estimates from limited data
- Simple no analytical solution needed
- Standard errors and confidence intervals for almost any statistic
- Dilutes outliers compared with historical simulation, an extreme point is drawn only now and then
- No large external data set works from the sample at hand
-
- Weaknesses Memorize
- Computationally intensive thousands of resamples
- Sensitive to sample quality a biased sample gives biased results
- Breaks time links not ideal for autocorrelated data
- Limited extrapolation nothing beyond the observed range
- No analytical insight estimates, not explanations
-
Quick example
Start at 45.00; three draws of log returns 0.9%, −1.5% and 2.2% sum to 1.6%. = 45.73.
- 0.9+1.5+|-+2.2=÷100=2NDe^x×45= 45.73
+|- change sign · 2ND second function (the shifted label above a key) · e^x e to the power x
- 0.9ENTER1.5CHS+2.2+100÷ge^x45× 45.73
ENTER enter (on the HP, puts the number on the stack) · CHS change sign · g blue shift key · e^x e to the power x
How it is asked
-
How is each draw made?
In a bootstrap simulation, each simulated return is drawn…
At random from the observed data, with replacement. Without replacement and from a fitted normal are the traps.
-
Bootstrap or historical?
Which method resamples with replacement?
Bootstrap. Historical simulation uses each date once.
-
Weakness of a calm sample
A bootstrap uses ten calm years. The most likely weakness?
Understates extreme losses, since none are in the data.
-
Probability of a draw
50 returns, 10 above +3%; the first three draws were all above +3%. Chance the fourth is too?
10 ÷ 50 = 20%. Earlier draws do not matter with replacement; 7 ÷ 47 is the trap.
-
Implicit assumption
Bootstrapping implicitly assumes…
The sample represents the population.
Exam traps
- Saying bootstrapping draws without replacement. Each draw is put back, so a value can appear more than once.
- Saying bootstrapping needs a normal (or any) distribution. It uses the observed data directly.
- Thinking bootstrapping can generate returns outside the observed range, fill in missing data or correct a biased sample. It only recombines what is there.
- Treating a bootstrap from a short or calm sample as a full picture of risk.
- Removing earlier draws when computing a draw probability. With replacement, every draw has the same n observations to choose from.
- Calling a bootstrapped option value a fair price. It carries the sample's historical drift, not the risk-free rate.
Checkpoint
7 exam-style questions. About 90 seconds each.
1In a bootstrap simulation, each simulated return is drawn:
2Compared with Monte Carlo simulation, bootstrapping's main advantage is that it:
3A risk manager's bootstrap uses ten years of calm market returns. The most likely weakness of the results is that they:
4In a bootstrap, each resample drawn from an original sample of 60 observations contains:
5An analyst bootstraps from 60 observed weekly returns, 9 of which are below −2%. In one simulated path, the first two draws were both below −2%. The probability that the third draw is also below −2% is closest to:
6A share is priced at 120.00. A bootstrap path draws four weekly log returns: 1.8%, −0.6%, 2.4% and 1.8%. The share's price at the end of the path is closest to:
7An analyst bootstraps a new fund's 30 monthly returns to build a 95% confidence interval for its volatility. The interval is most likely to mislead if:
Key takeaways
- Bootstrap: draw from the observed sample at random, with replacement; each draw has probability 1/n.
- No distribution assumed, so the sample's skew and fat tails are kept; nothing beyond the sample can appear.
- The spread of a statistic across resamples is its standard error; its 2.5th and 97.5th percentiles give a 95% interval.
- It differs from historical simulation in the replacement and from Monte Carlo in the source of the draws.
Quick example
Start at 45.00; three draws of log returns 0.9%, −1.5% and 2.2% sum to 1.6%. = 45.73.
- 0.9+1.5+|-+2.2=÷100=2NDe^x×45= 45.73
+|- change sign · 2ND second function (the shifted label above a key) · e^x e to the power x
- 0.9ENTER1.5CHS+2.2+100÷ge^x45× 45.73
ENTER enter (on the HP, puts the number on the stack) · CHS change sign · g blue shift key · e^x e to the power x
All Quantitative Methods formulas, every lesson
Practice exam-style questions on Simulating Prices and Returns
Questions about this lesson?
Where this comes back
- Monte Carlo simulation Simulating Prices and Returns
- Introduction to Risk Management Portfolio Construction
Questions candidates ask
What is bootstrapping in finance?
Bootstrapping treats an observed sample as if it were the population and repeatedly draws from it at random, with replacement. Each draw feeds a simulated outcome, such as a year of returns. It needs no assumed distribution and keeps the data's real skew and fat tails.
What is the difference between bootstrapping and historical simulation?
Both use past data and assume no distribution. Historical simulation replays each date once, in order. Bootstrapping draws at random with replacement, building many new combinations. Historical simulation is easier to explain; bootstrapping is the tool for standard errors and confidence intervals.
Why is bootstrapping done with replacement?
Replacing each draw keeps the pool unchanged, so every draw has the same chances and an observation can be drawn again. This mimics repeated sampling from a population. Without replacement, a resample the size of the sample would only reorder it.
How do you get a confidence interval by bootstrapping?
Resample the data with replacement, compute the statistic each time, and read the 2.5th and 97.5th percentiles of the results. For 24 monthly returns, the volatility interval came out at about 1.64% to 6.61%.
Spotted an error? Tell us and we will fix it.