# Resampling correlated data using bootstrap

I have a dataset of $$n×m$$ numbers, where the $$m$$ variables ($$m$$ is in the order of 5–10) exhibit various degrees of correlation with one another. The format of the data is not necessarily a timeseries, it could be a discrete or continuous timeseries, and it could be various timeseries grouped together. The dataset is oversampled ($$n>10000$$).

I want to cull the amount of data (rows) such that the reduced dataset will have the same CDF and PDF as the original data for all $$m$$ variables. Simple bootstrapping will not do as that technique assumes that the variables are independent. However, I have the impression that multi-stage bootstrapping might actually be something that could be used here.

Does anyone have an answer to my question, or can anyone refer me to some literature where I could find an answer on this? If you happen to have some coding examples yourself, I am writing in Matlab.

• I'm not sure it's very clear what you're trying to do here. Are you trying to resample your columns? Bootstrapping happens over observations, not predictors. You can do the bootstrap on time series data by resampling in blocks, see en.wikipedia.org/wiki/… Commented Jan 23, 2017 at 0:33
• Apologies for the confusing, but I would like to resample the rows, or observations, not the columns or predictors. Is your reference to 'block data' in your link to en.wikipedia.org/wiki/… the same as multi-stage bootstrapping or is that something else again? Commented Jan 23, 2017 at 0:38
• I'm not familiar with multi-stage bootstrap, but I want to say no. In time series data you have data in fixed time steps, so they have a certain order. Block bootstrapping is to sample some number of consecutive observations together instead of sampling observations independently of one another. Commented Jan 23, 2017 at 0:45
• Wikipedia mentions that block bootstrapping can be used on data that is correlated. As I have no experience with block bootstrapping, I am not questioning that statement, but at the same time wikipedia is not regarded as a scientific appropriate source of information. I can of course 'google' block bootstrapping for more information, but any useful tips or relevant links to a mathematical analysis and discussion on the appropriateness of the technique would be most useful. And of course, if anyone has other suggestions to how I could try to address my main question I would appreciate too. Commented Jan 23, 2017 at 0:55

The wikipedia reference is excellent. It has a number of references to several books. My book Chernick (2007) covers time series. But the most thorough text on dependent data is Lahiri's text. I will provide these additional references.

The two references are

1) Bootstrap Methods: A Practitioners Guide 2nd Edition, Michael R. Chernick (2007) Wiley.

www.wiley.com/WileyCDA/WileyTitle/productCd-0471756210.html

2) Resampling Methods for Dependent Data, S. N. Lahiri (2003) Springer.

• Great, Thanks for the information. I will have a look on whether block bootstrapping might be useful for solving my issue. Commented Jan 23, 2017 at 1:38

I have discussed the bootstrap for multi-variate in How can you draw samples from a multidimensional time series?.

If your n * m data set only correlation every row, you can draw a sample with fewer rows using simple random functions like sample() in R. Just make sure that all m elements in some selected row are set as one observation, which is illustrated in How should I bootstrap multivariate variables?.

For elements in the column with different rows, block bootstrap can be used to preserve the dependence. For example, if a 9 * 2 multi-variate time series to be sampled, it is divided into blocks first. Then, blocks are sampled and connected. If you want to draw a sample with fewer rows, just choose fewer blocks. Note that the connection of selected blocks does not have to follow the original sequence.

             x           y
1   -1.49475115 -0.54611868
2    1.13926435  0.74103376
3    1.41939200  2.67440879
4    1.30836462 -3.11768804
---------------------------
5   -0.15411482  0.30669856
6    1.68698582  0.80915333
7    1.76670354 -0.03077288
8    0.92443653  2.92956932
---------------------------
9    0.83239816 -4.41182710


When the number of blocks is small, slightly complex methods have to be introduced, which are discussed in books in other answer.