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 :
X
1
X_1
X1,
X
2
X_2
X2,
.
.
.
.
....
....,
X
10
X_{10}
X10. 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 :
X 1 , X 2 ⏞ b l o c k 1 , X 3 , X 4 ⏞ b l o c k 2 , . . . . . . X 9 , X 10 ⏞ b l o c k 5 \overbrace{X_1,X_2}^{block\,1},\overbrace{X_3,X_4}^{block\,2},......\overbrace{X_9,X_{10}}^{block\,5} X1,X2 block1,X3,X4 block2,......X9,X10 block5
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
b
l
o
c
k
1
,
b
l
o
c
k
3
,
b
l
o
c
k
5
,
b
l
o
c
k
1
,
b
l
o
c
k
2
block\,1, block3\,, block \,5, block\,1,block\,2
block1,block3,block5,block1,block2
and the corresponding original time series is
X
1
,
X
2
,
X
5
,
X
6
X
9
,
X
10
X
1
,
X
2
,
X
3
,
X
4
,
X_1,X_2,\,\,\,\,\,X_5,X_6\,\,\,\,\,X_9,X_{10}\,\,\,\,\,X_1,X_2,\,\,\,\,\,X_3,X_4,\,\,\,\,\,
X1,X2,X5,X6X9,X10X1,X2,X3,X4,
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.
本文介绍了一种处理时间序列数据的特殊抽样方法——移动块 bootstrap(MBB),并详细展示了其基本过程。通过将时间序列数据分为多个块,然后进行有放回的随机抽样,可以得到保留原始数据短期依赖结构的新样本系列。文中还提供了一个使用 Python 的 'arch' 包实现 MBB 的示例代码。
867





