统计学中的Bootstrap ⽅法介绍及其应⽤
说明:本来这只是⼀篇学⽣时期对研究⽅向进⾏总结的⽂章,没想到能够给其他⼈带来了⼀些的帮助。两年多以来,有许多⼈留⾔及私信问我相关的问题,我也不⽌⼀次地改正⽂章中的⼀些纰漏。但限于时间久远以及⽔平有限,这篇⽂章仍然只能作为⼊门读物,希望⽂中的⼀些描述不要给⼤家带来误解。
另外,我也会抽时间继续写⼀些相关的博客,⼀⽅⾯作为⾃我学习,另⼀⽅⾯也可以同⼤家进⾏交流。
2020年7⽉28⽇
最近的论⽂写作中,需要⽤到Bootstrap⽅法,即所谓的“⾃举法”、“靴带法”。Bootstrap在英语中作为⼀个名词的话,其的意思是“拔靴带”,也就是通过 ⾃⾝的 ⼒量,⾃⼰把⾃⼰抬起来。注意这个限定——“通过⾃⾝的⼒量”——这是Bootstrap⽅法的核⼼所在。本篇博⽂旨在根据⾃⾝的实际⼯作,对Bootstrap⽅法进⾏带有实例的说明,有些冗长,但主要是为了总结⼀下最近的⼯作,如果可以为别⼈的⼯作带来帮助,那么我将感到⼗分⾼兴。
股票的例⼦
我所研究的领域是计量经济学中时间序列的变点研究,涉及的⼀些复杂的概念不过多说明,只⽤最简单的语⾔进⾏描述,⼒图让其他领域的⼈也能够理解。
假设我有⼀组股票数据,,分别对应于时间节点时的股票价格(当然你也可以理解为第1天、第2天、……、第n 天的价格)。我现在想要实现的是:到⼀个模型,它以已知的数据为基础进⾏构造(或者机器学习中的训练),完成后的模型基于历史数据,预测未来⼀段时间内(⽐如下⼀个交易⽇)的股票价格——即所谓的股票预测模型。
我想拥有这样⼀个模型是所有股民期待的事情,这⾥我暂且不去考虑其可⾏性及准确性,单单就此问题进⾏讨论。
⼀、可能的问题1
我们知道,要想训练⼀个准确的模型,则对序列中所包含信息的理解越透彻越好。⽐如说,我们知道分红会降低股价,如果,在
时进⾏了分红,那么股价很可能发⽣如下的变化:
⽤时间序列中的术语来说,就是股价序列中存在均值变点,即均值发⽣了变化,⽣成上图中的数据时,前⼀半均值为5,后⼀半均值为
2。当然,图中情况是⾮常理想化的,但⾜以说明问题。
y ,y ,...,y 12n x ,x ,...,x 12n M M X ,Y {}n =100x 50
这种情况下,如果仍然不进⾏任何处理仍然⽤这些数据进⾏建模的话,很可能会得到下⾯⼀个模型:
这意味着,股价将(⾄少在⼀段时间内)维持在3.5左右。⽽实际上分红已经导致了价格降低(维持在2左右),若仍⽤这个模型去描述股价,很明显是不明智的,更别说据此来作出正确的买⼊卖出决策了。
⼆、可能的问题2
在上个问题中,我实际上说的是最简单的⼀类变点了,我们都知道实际的股票价格的变化是更加复杂的⼀个过程。事实上,不仅仅是股票价格,还有其他⼏乎所有涉及到时间序列分析的领域,都会产⽣的⼤量的数据,⽽且这些数据往往不符合数理统计课本上的所有美好的假定——独⽴、正态、同分布……也就是说,序列完全有可能存在不⽌⼀个均值变点,也可能存在不⽌⼀类变点。
接下来,介绍另⼀种⽐较常见的变点——⽅差变点。还是先上图:
在这幅图中,仍然是在时序列发⽣了⽅差的变化,前⼀段序列的离散程度⽐后⼀段的离散程度要⼩——即序列中存在⽅差变点。那么,第⼆个存在的问题就是,序列存在不⽌⼀类变点,例如,有可能既存在均值变点,⼜存在⽅差变点。
⽽实际情况是,序列的变点种类远不⽌均值与⽅差两种,还有所谓的“持久性变点”、“指数变点”以及“斜率变点”等许多种;另外,上⾯两幅图中展⽰的都是“突变”类型的变点,即序列的变化在⼀点完成,与之对应的还有渐变与周期性变化。
三、解决的⽅法
上⾯提到的问题,当然会对模型的准确性产⽣影响。从上⾯的分析也可以看出,既然变点的存在导致了模型的失准,那么⼀个直观的想法就是剔除变点的影响。⽽想要剔除变点的影响,⾸先就要搞清楚原始时间序列中是否存在变点以及存在什么类型的变点。
为了解决“时间序列中是否存在变点”以及“存在什么样的变点”的问题,我们可以利⽤假设检验的⽅法:对样本的分布作出某种假设,然后构造合适的统计量,由样本可以计算出统计量的值,根据这个值是否落⼊拒绝域作出拒绝或接受愿假设的判定。
事实上,说“接受原假设”是不严谨的。因为我们获取到的永远都是总体的⼀部分⽽⾮全部的总体,因此,只能说根据当前收集到的样本来看,没有理由拒绝原假设,但这并不意味着其他的样本不会使统计量得出拒绝原假设的结论。因此,更为稳妥的说法是“不拒绝原假设”。
这⾥对⼏个术语做⼀个简单的说明:
M =3.5
x 50
统计量:不含未知参数的、样本的已知函数。例如均值,⽅差都属于统计量。
假设检验:含原假设与备择假设。例如:原假设为不含均值变点,则备择假设可以设置为含有均值变点。
拒绝域:设针对某假设检验问题所构造的统计量在原假设正确的条件下有分布,根据可以计算出⼀个数值区间,使得满⾜原假设条件的序列经过统计量运算后很⼤概率落在该区间内。若对新的序列计算出的统计量的值落在该区间之外(称为拒绝域),则有把握说原假设不对,即拒绝原假设。
通过上述⽅法,我们可以初步判断⼀个序列中是否存在指定类型的变点。在⽂献中,针对不同类型的变点、满⾜不同条件的序列以及不同的原假设和备择假设,有许多可靠的统计量⽤来检验是否存在变点;进⼀步地,如果存在,可以估计出该变点的位置。
如果知道了变点类型和变点位置,那么就可以尝试解决上述问题1,例如,我们可以在变点前建⽴模型,在变点后建⽴模型,⼀般来讲,这种分类模型具有更⾼的准确性。
四、问题⼆呢?
在第三部分,我们到了⼀种解决问题⼀的⽅案,即构造统计量来检验是否存在(单⼀类型的)变点及估计变点的位置。但是此类⽅法对问题⼆——存在多种类型的变点——有效吗?
请记住:⼀般情况下,检验统计量对于变点检验问题有很强的针对性。
通俗的讲,不同类型的变点只能⽤与之相对应的统计量去检验,⽽且这些统计量对于变点的数量及种类是⾮常敏感的。⽐如,有两类变点,分别是和,与之对应的检验统计量分别是与。如果序列中只存在⼀个变点,这时候⽤去检验,能够得出正确的结论;然⽽,如果序列中还存在⼀个变点,那么它就极有可能会影响对变点的检验。
考虑如下假设检验问题:
如果类变点存在,那么⼀个可能的后果就是使得拒绝的概率增加——即使序列中根本不存在类变点。
在变点检验领域,通常⽤size和power来衡量⼀个统计量的work效果
size:原假设为真时,拒绝原假设的概率,即犯第⼀类错误的概率。
power:原假设为假时,拒绝原假设的概率。
五、Bootstrap ⽅法
根据四中的描述,当序列存在混合变点时,原本起作⽤的统计量很可能失真。这时,就需要我们的Boostrap⽅法上阵了。基于Bootstrap 的⽅法种类有很多,这⾥不打算做太多理论总结。可以参考,如果想深⼊了解,最好去相关⽂献。
简⽽⾔之,⼈们希望获取整体的全部信息,因为这样就可以做到“运筹帷幄”——整体都知道了,还有什么样本是我们不能掌握的吗?⽽实际上获取整体的信息是很难的,甚⾄是不可能的,所以才有了统计学中的“抽样”。也就是说,我们只能获取整体中的某些样本的信息,⼈们期望可以通过这些有限的样本信息来尽可能准确地估计总体,从⽽为决策提供依据。⽽Bootstrap⽅法认为,既然得到的样本是从总体中“抽取”的,那么为什么不可以把这些样本当做⼀个整体,从中进⾏ 有放回地再抽取 呢?
这种⽅法看似简单,⽽实际上却是⼗分有效的。
来看如何解决四中的问题:
问题描述
已知序列,想检验它是否存在变点。已知:原假设为序列含不有;序列存在不同类变点;采⽤的统计量为;临界值为;采⽤右侧拒绝(即统计量的值⼤于,则拒绝原假设)。
bootstrap检验方法解决步骤
F F M 1M 2c 1c 2T 1T 2c 1T 1c 2T 1c 1H :0不存在c 变点
1H :1存在c 变点
1c 2T 1H 0c 1Y ,Y ,...,Y {12n }c 1c 1c 2T 1v 1v 1
Step1. 对进⾏有放回的重抽样,得到新序列。
Step2. 将上述代⼊进⾏计算,得到⼀个值。
Step3. 重复Step1和Step2,⼀共进⾏B次,则从Step2中共得到B个值,分别记为。Step4. 将得到的与进⾏⽐较,计算⼤于的个数,记为,则为数值验证得到的size。注意1: 在Step4中得到的size是有⽤的,如果我们知道原假设不含变点,那么size的值应该稳定在显著性⽔平附近;如果不采⽤上述⽅法,则会产⽣size distortion,即size偏⾼,亦即犯第⼀类错误概率增加,导致的结果就是,即使序列不含有,统计量也会拒绝它。注意2: 如果我们想⽤这种⽅法去检验⼀个序列到底含不含有,该怎么做呢?很简单,将Step4中的换成,这就是所谓的p值,检验法则是:当p⼩于显著性⽔平时,拒绝原假设。
注意3: 如果是⽤来验证⽅法的有效性,通常会⼈为⽣成许多组,然后计算得平均值即可。六、后记
这是⼀⽓呵成的,可能还有不完善甚⾄错误的地⽅,欢迎指出!Y ,Y ,...,Y {12n }Y ,Y ,...,Y 1∗2∗n ∗
Y ,Y ,...,Y 1∗2∗n ∗T 1b ,b ,...,b 12B b ,b ,...,b 12B v 1v 1K B K c 1c 1c 1B K 1−B K Y ,Y ,...,Y {12n }B K
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论