Introduction of moving block bootstrap (MBB)algorithm

Because we can not use usual bootstrap sampling method to get subsamples from time series dataset, then the MBB was proposed to address this issue.
Suppose we have the time series following :
X1X_1,X2X_2, ........,X10X_{10}. Note that you can extend the footnote with other number or a symbol.
First step is to split the series into several blocks in which one should figure out the size of each block. Assume we let the size of each block equal to 2, then our blocked data would look like :

X1,X2block1,X3,X4block2,......X9,X10block5\overbrace{X_1,X_2}^{block\,1},\overbrace{X_3,X_4}^{block\,2},......\overbrace{X_9,X_{10}}^{block\,5}

with the above blocks we get, now we can apply the bootstrap algorithm by taking a random sample of the blocks with replacement. The order in which the blocks are drawn is the position that they are placed in the bootstrap series. Hence, one probably blocks might be
block1,block3,block5,block1,block2 block\,1, block3\,, block \,5, block\,1,block\,2
and the corresponding original time series is
X1,X2,     X5,X6     X9,X10     X1,X2,     X3,X4,      X_1,X_2,\,\,\,\,\,X_5,X_6\,\,\,\,\,X_9,X_{10}\,\,\,\,\,X_1,X_2,\,\,\,\,\,X_3,X_4,\,\,\,\,\,

These are the basic process of MBB for time series data. This can help us to get a new sample series with similar short term dependence data structure to the original data.

In python, you can rely on the pkg of “arch”, following I present a simple toy code from the arch doc with a minor revision.

from arch.bootstrap import MovingBlockBootstrap 
from numpy.random import RandomState  
from numpy.random import standard_normal
import numpy as np
y = standard_normal((6, 1))# to generate a time series with standard norm distribution.
bs = MovingBlockBootstrap(2, y,random_state=RandomState(1234))# 2 is block size, y is your time series data, random_state #                                                        														is for reproducibility when required
i=0
bs_x=[ ] # an empty list to store the bootstrap series
#here for is to look what the bootstrap looks like for each iteration, in our demonstrated case, we do boostrap only for 2 times.
for data in bs.bootstrap(2):
    print(data)
    bs_y.append(data[0][0]) 
    print(bs_y)
    i=i+1
# fc is function to compute the bootstrap series mean value.,you can replace it with your own definition
def fc(a):
    return a.mean(0)
results = bs.apply(fc,2) ###to apply  a function defined by yourself to the bootstrap replicated data, "2" means apply the fc 2times to calculate the average of the boostrap data. of course , you can figure it with any number you want. 
print(results)

Thx for ur reading.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章