Completed

:speech_balloon:

Add Block Bootstrap historical sampling method

After doing a cursory review of literature and conversation online (see sources), here are some thoughts:

  • It looks like the block bootstrap is simple, reliable, and standard practice (see “relevant links”)

  • Time series data is not IID (7) – years are correlated. Thus, sampling from a normal distribution is an option, but doesn’t fully reflect the nature of the data. Rather, years are correlated, and it is this correlation which can be damning for (or a boon to) a portfolio. Bond data is correlated with stocks as well (negatively), which is further cause to not use a normal distribution that sanitizes the simulation of this important information, although I’m not sure how PL draws bonds into all of this

  • Current looping methods are useful and informative, but don’t reflect a true bootstrap/MC, which states that we should draw from a population-representative dataset at random with replacement until we have a sample the same size as the original (that is one trial). As a result, simulations are highly correlated, leading to results that have artificially low variability.

  • I think the default procedure might look something like this: sample a random start time. Define a time block (say, 5 years or some number that evenly divides the historical data). Do this until you have enough years across your time blocks to equal the number of years in the historical data. It doesn’t matter if some of the blocks overlap. I didn’t study the documentation for tsboot() closely (4), but I’m imagining it would look something like the above, at least in a basic form. It would be interesting to let the user choose the size of the time blocks.

Relevant Links: 1) https://en.wikipedia.org/wiki/Bootstrapping_(statistics) 2) http://mapageweb.umontreal.ca/goncals/documents/Goncalves-Politis-2011.pdf 3) https://stats.stackexchange.com/questions/25706/how-do-you-do-bootstrapping-with-time-series-data 4) https://rdrr.io/cran/boot/man/tsboot.html

Conversations/Threads: 5) https://discord.com/channels/869222901054857216/1325639594993258506 6) https://changemap.co/projectifi/projectifi/task/9244-change-default-historical-mc-sim/#comment-11252

Stats concepts: 7) https://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables

8 votes

Tagged as Suggestion

Suggested 04 March by user Mark Miller

Moved into Completed 13 October