Bootstrap方法介绍及其应用

转载 2019-11-28 20:27  阅读 13 次 评论 0 条

Bootstrap即所谓的“自举法”、“靴带法”。Bootstrap在英语中作为一个名词的话,其的意思是“拔靴带”,也就是通过自身的 力量,自己把自己抬起来。注意这个限定——“通过自身的力量”——这是Bootstrap方法的核心所在。

股票的例子

我所研究的领域是计量经济学中时间序列的变点研究,涉及的一些复杂的概念不过多说明,只用最简单的语言进行几乎所有人都可以理解的描述。

假设我有一组股票数据,\(y_{1},y_{2},...,y_{n}\),分别对应于时间节点\(x_{1},x_{2},...,x_{n}\)时的股票价格(当然你也可以理解为第一天、第二天、……、第n天的价格)。我现在想要实现的是:找到一个模型M,它以已知的数据对为基础进行构造(或者深度学习中的训练),完成后的模型以时间节点为输入,当期价格为输出——即所谓的股票预测模型

我想拥有这样一个模型是所有股民期待的事情,这里我暂且不去考虑其可实现性,单单就此问题进行讨论。

一、可能的问题1

我们知道,要想训练一个准确的模型\(M\),则对序列\(\left \{ X,Y \right \}\)中所包含信息的理解越透彻越好。比如说,我们知道分红会降低股价,如果\(n=100\),在\(x_{50}\)时进行了分红,那么股价很可能发生如下的变化:

用我们方向的术语来说,就是股价序列中存在均值变点,即均值发生了变化,生成上图中的数据时,前一半均值为5,后一半均值为2。当然,图中情况是非常理想化的,但足以说明问题。

这种情况下,如果仍然不进行任何处理仍然用这些数据进行建模的话,很可能会得到下面一个模型:

\(M=3.5\)

这意味着,股价将(至少在一段时间内)维持在3.5左右。而实际上分红已经导致了价格降低(维持在2左右),若仍用这个模型去描述股价,很明显是不明智的,更别说去采取什么买入卖出决策了。

二、可能的问题2

在上个问题中,我实际上说的是最简单的一类变点了,我们都知道实际的股票价格多么的变化无常。事实上,不仅仅是股票价格,还有其他几乎所有可能涉及到时间序列分析的领域,都会产生的大量的数据,而且这些数据往往不符合数理统计课本上的所有美好的假定——独立、正态、同分布……也就是说,序列完全有可能存在不止一个均值变点,也可能存在不止一类变点。

接下来,介绍另一种比较常见的变点——方差变点。还是先上图:

在这幅图中,仍然是在\(x_{50}\)时序列发生了方差的变化,前一段序列的离散程度比后一段的离散程度要小——即序列中存在方差变点。那么,第二个存在的问题就是,序列存在不止一类变点,例如,有可能既存在均值变点,又存在方差变点。

而实际情况是,序列的变点种类远不止均值与方差两种,还有所谓的“持久性变点”、“指数变点”以及“斜率变点”等许多种;另外,上面两幅图中展示的都是“突变”类型的变点,即序列的变化在一点完成,与之对应的还有渐变与周期性变化。

三、解决的方法

上面提到的问题,当然会对模型的准确性产生影响,一种可能的解决方案就是:引入一种统计量,并构造假设检验,根据统计量的值是否落入拒绝域而判断是否拒绝原假设。

  • 统计量:不含未知参数的、样本的已知函数。例如均值,方差都属于统计量
  • 假设检验:含原假设与备择假设。例如:原假设为不含均值变点,则备择假设为含有均值变点
  • 拒绝域:设针对某假设检验问题所构造的统计量在原假设下有分布\(F\),根据\(F\)可以计算出一个数值区间,使得满足原假设条件的序列经过统计量运算后很大概率落在该区间内。若对新的序列计算的统计量的值落在该区间之外(成为拒绝域),则有把握说原假设不对,即拒绝原假设。

通过上述方法,我们可以初步判断一个序列中是否存在指定类型的变点。在文献中,针对不同类型的变点以及满足不同条件的序列和不同的假设检验,有许多可靠的统计量用来检验是否存在变点;进一步地,如果存在,可以估计出该变点的位置。

如果知道了变点类型和变点位置,那么就可以尝试解决上述问题1,例如,我们可以在变点前建立模型\(M_{1}\),在变点后建立模型\(M_{2}\),一般来讲,这种分类模型具有更高的准确性。

四、问题二呢?

在三中,我们解决了问题一,即已经可以构造统计量来检验是否存在(单一类型的)变点及估计变点的位置。但是此类方法对问题二——存在多种类型的变点——有效吗?

一般情况下,如果统计量对于变点检验问题有很强的针对性。

通俗的讲,不同类型的变点只能用与之相对的统计量去检验。比如,变点有两类分别是\(c_{1}\)和\(c_{2}\),与之对应的检验统计量分别是\(T_{1}\)与\(T_{2}\)。如果用\(T_{1}\)去检验一个序列是否含有\(c_{1}\)类变点,假设这个序列是含有一个\(c_{2}\)类的变点的,那么\(c_{2}\)的存在在很大程度上会影响\(T_{1}\)对\(c_{1}\)的检验。考虑如下假设检验问题:

\(H_{0}:不存在c_{1}类变点\)

\(H_{1}:存在c_{1}类变点\)

如果\(c_{2}\)类变点存在,那么会使得\(T_{1}\)拒绝\(H_{0}\)的概率增加——即使序列中根本不存在\(c_{1}\)类变点。

在变点检验领域,通常用size和power来衡量一个统计量的work效果

size:原假设为真时,拒绝原假设的概率,即犯第一类错误的概率。

power:原假设为假时,拒绝原假设的概率。

五、Bootstrap方法

根据四中的描述,当序列存在混合变点时,原本期待起作用的统计量很可能失真。这时,就需要我们的Boostrap方法上阵了。基于Bootstrap的方法种类有很多,这里不打算做太多理论总结。可以参考这里,如果想深入了解,最好去找相关文献。

简而言之,人们希望获取整体的全部信息,因为这样就可以做到“运筹帷幄”——整体都知道了,还有什么样本是我们不能掌握的吗?而实际上获取整体的信息是很难的,甚至是不可能的,所以才有了统计学中的“抽样”。也就是说,我们只能获取整体中的某些样本的信息,人们期望可以通过这些有限的样本信息来尽可能准确地估计总体,从而为决策提供依据。而Bootstrap方法认为,既然得到的样本是从总体中“抽取”的,那么为什么不可以把这些样本当做一个整体,从中进行有放回地再抽取呢?

这种方法看似简单,而实际上却是十分有效的。

来看如何解决四中的问题:

问题描述

已知序列\(\left \{ Y_{1},Y_{2},...,Y_{n}\right \}\),想检验它是否存在变点\(c_{1}\)。已知:原假设为序列含不有\(c_{1}\);序列存在不同类变点\(c_{2}\);采用的统计量为\(T_{1}\);临界值为\(v_{1}\);采用右侧拒绝(即统计量的值大于\(v_{1}\),则拒绝原假设)。

解决步骤

  • Step1. 对\(\left \{ Y_{1},Y_{2},...,Y_{n}\right \}\)进行有放回的重抽样,得到新序列\(Y_{1}^{*},Y_{2}^{*},...,Y_{n}^{*}\)。
  • Step2. 将上述\(Y_{1}^{*},Y_{2}^{*},...,Y_{n}^{*}\)代入\(T_{1}\)进行计算,得到一个值。
  • Step3. 重复Step1和Step2,一共进行B次,则从Step2中共得到B个值,分别记为\(b_{1},b_{2},...,b_{B}\)。
  • Step4. 将得到的\(b_{1},b_{2},...,b_{B}\)与\(v_{1}\)进行比较,计算大于\(v_{1}\)的个数,记为\(K\),则\(\frac{K}{B}\)为数值验证得到的size。

注意1:在Step4中得到的size是有用的,如果我们知道原假设不含变点\(c_{1}\),那么size的值应该稳定在显著性水平附近;如果不采用上述方法,则会产生size distortion,即size偏高,亦即犯第一类错误概率增加,导致的结果就是,即使序列不含有\(c_{1}\),统计量也会拒绝它。

注意2:如果我们想用这种方法去检验一个序列到底含不含有\(c_{1}\),该怎么做呢?很简单,将Step4中的\(\frac{K}{B}\)换成\(1-\frac{K}{B}\),这就是所谓的p值,检验法则是:当p小于显著性水平时,拒绝原假设。

注意3:如果是用来验证方法的有效性,通常会人为生成许多组\(\left \{ Y_{1},Y_{2},...,Y_{n}\right \}\),然后计算\(\frac{K}{B}\)得平均值即可。

————————————————————————————————————————————————

1、基本思想

Bootstrap抽样的基本思想是在全部样本未知的情况下,借助部分样本的有放回多次抽样,构建某个估计的置信区间,抽象地说,通过样本得到的估计并没有榨干样本中的信息,bootstrap利用重采样,把剩余价值发挥在构建置信区间上。

2、算法流程

对于一个样本\(x_1,x_2,...,x_n\),其总体的概率分布中的参数 \(\theta\)是未知的,(参数 \(\theta\)可以简单理解为一些指标,比如,均值、中位数、方差等,当然还有一些比较复杂的指标),现在想要利用这些有限的样本得到一个估测值 \(\hat{\theta}\)。

Step1:根据自己的需要选择确定重采样的次数i,1000或者2000等;

Step2:从\(x_1,x_2,...,x_n\)中有放回的抽取n次(这个n必须要已知样本数目相等),因为是有放回的,所以在n次抽取之后,可能有的样本被抽取多次,也可能有的样本一次都没有被抽取。

Step3:重复Step2,一共i次(Step1中的i),对每次抽取后的结果都计算出一个 \(\hat{\theta}\)值。

Step4:利用得到的\(\hat{\theta_1}, \hat{\theta_1},...,\hat{\theta_i}\)作为一个sample,计算其 \(\frac{\alpha}{2}*100\%\)和 \((1-\alpha)*100\%\)的百分位置,得到的就是近似出的,估测总体参数 \(\theta\)的置信区间的最低和最高点\([x,y]\)。

3、举例说明

想要统计全校学生的平均年龄,但是学校总体的数据比较难拿到,而且数据量很大,但是现在你已经有了一部分学生的年龄信息,比如200个学生的信息。

现在你从这200个学生信息中有放回的抽取200次,计算对应的平均年龄 \(\hat{\theta}\),重复30次(即上文中的i),这30个 \(\hat{\theta}\)的分布大概就能代表全校学生的平均年龄。

可能会有疑问,觉得这种方法结果不准确,但是我们使用这个方法的原因就是不能知道准确的全部样本,所以才使用bootstrap模拟,模拟出来的只是一个相对准确的结果。

论文下载:

1. BOOTSTRAP METHODS: ANOTHER LOOK AT THE JACKKNIFE

 

本文地址:http://51blog.com/?p=6348
关注我们:请关注一下我们的微信公众号:扫描二维码广东高校数据家园_51博客的公众号,公众号:数博联盟
温馨提示:文章内容系作者个人观点,不代表广东高校数据家园_51博客对观点赞同或支持。
版权声明:本文为转载文章,来源于 SunJW_2017 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情