统计学中的Bootstrap方法介绍及其应用

article/2025/10/10 10:36:30

说明:本来这只是一篇学生时期对研究方向进行总结的文章,没想到能够给其他人带来了一些的帮助。两年多以来,有许多人留言及私信问我相关的问题,我也不止一次地改正文章中的一些纰漏。但限于时间久远以及水平有限,这篇文章仍然只能作为入门读物,希望文中的一些描述不要给大家带来误解。
2020年7月28日

最近的论文写作中,需要用到Bootstrap方法,即所谓的“自举法”、“靴带法”。Bootstrap在英语中作为一个名词的话,其的意思是“拔靴带”,也就是通过 自身的 力量,自己把自己抬起来。注意这个限定——“通过自身的力量”——这是Bootstrap方法的核心所在。本篇博文旨在根据自身的实际工作,对Bootstrap方法进行带有实例的说明,有些冗长,但主要是为了总结一下最近的工作,如果可以为别人的工作带来帮助,那么我将感到十分高兴。

股票的例子

我所研究的领域是计量经济学中时间序列的变点研究,涉及的一些复杂的概念不过多说明,只用最简单的语言进行描述,力图让其他领域的人也能够理解。

假设我有一组股票数据, y 1 , y 2 , . . . , y n y_{1},y_{2},...,y_{n} y1,y2,...,yn,分别对应于时间节点 x 1 , x 2 , . . . , x n x_{1},x_{2},...,x_{n} x1,x2,...,xn时的股票价格(当然你也可以理解为第1天、第2天、……、第n天的价格)。我现在想要实现的是:找到一个模型 M M M,它以已知的数据为基础进行构造(或者机器学习中的训练),完成后的模型基于历史数据,预测未来一段时间内(比如下一个交易日)的股票价格——即所谓的股票预测模型

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

一、可能的问题1

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

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

这种情况下,如果仍然不进行任何处理仍然用这些数据进行建模的话,很可能会得到下面一个模型:
M = 3.5 M=3.5 M=3.5
这意味着,股价将(至少在一段时间内)维持在3.5左右。而实际上分红已经导致了价格降低(维持在2左右),若仍用这个模型去描述股价,很明显是不明智的,更别说据此来作出正确的买入卖出决策了。

二、可能的问题2

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

接下来,介绍另一种比较常见的变点——方差变点。还是先上图:
这里写图片描述
在这幅图中,仍然是在 x 50 x_{50} x50时序列发生了方差的变化,前一段序列的离散程度比后一段的离散程度要小——即序列中存在方差变点。

那么,第二个存在的问题就是,序列存在不止一类变点,例如,有可能既存在均值变点,又存在方差变点。

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

三、解决的方法

上面提到的问题,当然会对模型的准确性产生影响。从上面的分析也可以看出,既然变点的存在导致了模型的失准,那么一个直观的想法就是剔除变点的影响。而想要剔除变点的影响,首先就要搞清楚原始时间序列中是否存在变点以及存在什么类型的变点。

为了解决“时间序列中是否存在变点”以及“存在什么样的变点”的问题,我们可以利用假设检验的方法:对样本的分布作出某种假设,然后构造合适的统计量,由样本可以计算出统计量的值,根据这个值是否落入拒绝域作出拒绝或接受愿假设的判定。

事实上,说“接受原假设”是不严谨的。因为我们获取到的永远都是总体的一部分而非全部的总体,所以,只能说根据当前收集到的样本来看,没有理由拒绝原假设,但这并不意味着其他的样本不会使统计量得出拒绝原假设的结论。因此,更为稳妥的说法是“不拒绝原假设”,这种说法隐含的意思就是:不排除以后会获得使原假设不成立的样本。

这里对几个术语做一个简单的说明:

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

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

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

四、问题二呢?

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

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

换句话说,不同类型的变点只能用与之相对应的统计量去检验,而且这些统计量对于变点的数量及种类是非常敏感的。比如,有两类变点,分别是 c 1 c_{1} c1 c 2 c_{2} c2,与之对应的检验统计量分别是 T 1 T_{1} T1 T 2 T_{2} T2。如果序列中只存在一个 c 1 c_{1} c1变点,这时候用 T 1 T_{1} T1去检验,能够得出正确的结论;然而,如果序列中还存在一个 c 2 c_{2} c2变点,那么它就极有可能会影响 T 1 T_{1} T1 c 1 c_{1} c1变点的检验。

考虑如下假设检验问题:
H 0 : 不 存 在 c 1 变 点 H_{0}:不存在c_{1}变点 H0:c1 H 1 : 存 在 c 1 变 点 H_{1}:存在c_{1}变点 H1:c1

如果 c 2 c_{2} c2类变点存在,那么一个可能的后果就是使得 T 1 T_{1} T1拒绝 H 0 H_{0} H0的概率增加——即使序列中根本不存在 c 1 c_{1} c1类变点。

在变点检验领域,通常用size和power来衡量一个统计量的work效果
size:原假设为真时,拒绝原假设的概率,即犯第一类错误的概率。
power:原假设为假时,拒绝原假设的概率。

五、Bootstrap方法

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

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

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

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

问题描述

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

解决步骤

  • Step1. { Y 1 , Y 2 , . . . , Y n } \left \{ Y_{1},Y_{2},...,Y_{n}\right \} {Y1,Y2,...,Yn}进行有放回的重抽样,得到新序列 Y 1 ∗ , Y 2 ∗ , . . . , Y n ∗ Y_{1}^{*},Y_{2}^{*},...,Y_{n}^{*} Y1,Y2,...,Yn
  • Step2. 将上述 Y 1 ∗ , Y 2 ∗ , . . . , Y n ∗ Y_{1}^{*},Y_{2}^{*},...,Y_{n}^{*} Y1,Y2,...,Yn代入 T 1 T_{1} T1进行计算,得到一个值。
  • Step3. 重复Step1和Step2,一共进行B次,则从Step2中共得到B个值,分别记为 b 1 , b 2 , . . . , b B b_{1},b_{2},...,b_{B} b1,b2,...,bB
  • Step4. 将得到的 b 1 , b 2 , . . . , b B b_{1},b_{2},...,b_{B} b1,b2,...,bB v 1 v_{1} v1进行比较,计算大于 v 1 v_{1} v1的个数,记为 K K K,则 K B \frac{K}{B} BK为数值验证得到的size。

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

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

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


http://chatgpt.dhexx.cn/article/tahoypoT.shtml

相关文章

bootstrap的使用方法

Bootstrap 有趣的栅格网格系统 Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕 或视口(viewport)尺寸的增加,系统会自动分为最多 12 列。栅格系统用于通 过一系列的行(row)与列&#xf…

SetupFactory简单制作安装包流程

最近让我给项目做安装包,小白一个,开始找各种安装包打包工具。有的简单,但是功能差点意思,有的功能很强大,但是略复杂而且有的还收费。就发现SetupFactory(安装工厂),这个工具还挺好…

setuptools的下载安装

setuptools的下载安装 *第一步,登录网址:https://pypi.org/project/setuptools/#files并下载压缩包。 第二步,将下载下来的压缩包解压到桌面。 第三步,按住shift键鼠标右键进入命令行窗口。 第四步,在命令行窗口输入…

使用setup

文章目录 setup函数返回值是一个对象setup函数返回值是一个渲染函数 setup是一个配置项,其值是一个函数。 组件用到的数据、方法等都放在setup这个配置项中。 setup函数的返回值,可以是一个对象,也可以是一个函数(且是渲染函数&a…

初始setup

setup setup作为vue3里面的一个配置项,可以在里面写方法,变量,声明周期,计算属性等等 export default {name: setup,// setup作为vue3里面的一个配置项,可以在里面写方法,变量,声明周期&#…

Setup函数

Setup vue 3.0 setup是一个新的组件选项,作为组件中使用组合API的起点。 从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中this 还不是组件实例,this此时是undefined 在模版中需要使用的数…

setup factory使用方法(转)

推荐使用“Setup Factory ”,它是一个强大的安装程序制作工具。提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序。可建立快捷方式,也可直接在Windows 系统的Register加入内容,还能在Win.…

安装包制作工具 SetupFactory 使用详解

Setup Factory是一个强大的安装程序制作工具。提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序。可建立快捷方式,也可直接在 Windows 系统的注册表加入内容,还能在 Win.ini 和 System.ini 内加入设定…

1、setup

setup函数的两种返回值 1、若返回一个对象&#xff0c;则对象中的属性&#xff0c;放在&#xff0c;在模板中均可以直接使用&#xff08;重点关注&#xff09; <template><div class"setup"><div>姓名&#xff1a;{{name}}</div><div>…

使用Setup Factory 给应用程序打包

1.这几天闲得慌&#xff0c;突然又想着怎么给生成的exe打包成安装包&#xff0c;好久以前学着用InstallShield打包&#xff0c;学起来还真是麻烦&#xff0c;索性放弃了&#xff0c;这次就直接想找个简单好用的&#xff0c;最后选择了Setup Factory –》这里是Setup Factory v…

Setup Factory安装结束自动启动程序

用Setup Factory制作安装程序时&#xff0c;怎么实现制作出的程序安装时自动运行安装程序里的某个程序或脚本&#xff1f; 例如&#xff1a;现在要使用Setup Factory 制作一个安装程序&#xff0c;安装程序包里有一个exe需要在安装结束时运行它&#xff0c;以便我们把开发出的程…

安装setuptools

使用setuptools安装第三方插件&#xff0c;如何安装setuptools恩。一样的方法。 http://blog.csdn.net/DongGeGe214/article/details/52199439 下载setuptools源码setuptools-25.2.0.tar.gz 地址&#xff1a;https://pypi.python.org/pypi/setuptools 这是一个压缩文件&#x…

教你玩转 Setup factory 7.0

作品做到一定阶段了&#xff0c;也尝试着生成exe文件去运行&#xff0c;可是当我们将exe运行程序移到别的电脑或者其他地方时&#xff0c;就不能正常的运行了。后来想到很多软件都是需要我们安装才能用&#xff0c;所以网上一查&#xff0c;加上同学老师的点拨&#xff0c;我找…

使用Setup Factory如何制作程序安装包

步骤一&#xff1a;自己网上下载Setup Factory工具并安装 可下载地址&#xff08;若时间比较久网站不可用&#xff0c;就自己在网上找一下下载地址&#xff09;&#xff1a;setup factory中文版下载-setup factory汉化版(安装包制作工具)下载v9.5.3 正式版-极限软件园​​​​…

Setup Factory打包教程整合

一些简单的过程就不详细写了&#xff0c;就写一些可能会遇到的问题。 我使用的是Setup Factory 9.0.3.0 汉化版&#xff0c;资源地址&#xff1a; https://download.csdn.net/download/woaishapi/7789171 这个是我参考的打包教程&#xff1a; https://dominick-li.blog.csdn.ne…

安装包制作工具 SetupFactory使用 详解

Setup Factory 是一个强大的安装程序制作工具。提供了安装制作向导界面&#xff0c;即使你对安装制作不了解&#xff0c;也可以生成专业性质的安装程序。可建立快捷方式&#xff0c;也可直接在 Windows 系统的注册表加入内容&#xff0c;还能在 Win.ini 和 System.ini 内加入设…

SetupFactory 制作软件安装包使用详解

文章目录 1.新建工程2.软件信息填写3.选择平台4.源文件夹5.窗口设置6. 主题选择7. 选择语言8. 选择依赖项9 功能选择10 设置主程序文件11 设置属性12. 附加步骤&#xff08;主题修改&#xff09;12.1 页面顺序排列12.2 页面编辑12.3 删除界面12.4 添加界面12.4.1 Welcome to Se…

下载安装setuptools

复制下面这段代码存为python格式&#xff0c;运行&#xff0c;可自动下载 #!/usr/bin/env python""" Setuptools bootstrapping installer.Maintained at https://github.com/pypa/setuptools/tree/bootstrap.Run this script to install or upgrade setuptools…

Setup Factory安装及程序安装包制作教程

阅读前提&#xff1a; 1.已制作好exe之类的可运行文件 一、软件安装 1、下载软件&#xff0c;这里以setup-factory 9.0.3.0.exe为例 下载地址&#xff1a;https://download.csdn.net/download/u010188178/10652645 2、安装该软件 3、汉化&#xff08;如果有这个需要的话&a…

C#程序打包工具SetupFactory入门使用

SetupFactory是一款能够用于工程向导、自定义对话框、生成MD5序列化以及两百多个功能函数的脚步编辑器、授权支持等等众多的特性。总体来说使用起来比较简单&#xff0c;在这里俺就介绍一下如何打包C#项目&#xff0c;至于其他使用如果有时间后续俺会再介绍的。 在这里俺使用的…