全文链接:tecdat.cn/?p=42393
原文出处:拓端数据部落公众号
分析师:Yefan Gong
在数据科学的浩瀚海洋中,我们如同探索未知宝藏的探险家,不断追寻更精准、更高效的数据分析方法。自助法(Bootstrap)作为统计学领域一颗璀璨的明珠,凭借其独特的重抽样原理,为我们在处理复杂数据结构和小样本问题时开辟了新路径。它通过模拟抽样的随机过程,在不依赖特定总体分布假设的情况下,为统计量分布的估计提供了可靠手段。
与此同时,GARCH 模型在金融时间序列分析等领域也发挥着关键作用。从 Engle 和 Bollerslev 的开创性工作,到如今不断拓展的复杂动力学模型,它在捕捉波动率、风险评估等方面展现出强大能力。
我们此次分享的内容,源于之前为客户精心打造的一个咨询项目。在项目中,我们深入运用自助法与 GARCH 模型,为客户解决了诸如样本数据处理、风险价值(VaR)预测等实际难题。经过整理与升华,将这些宝贵经验呈现给大家。
文中不仅详细阐述了自助法的原理、实施步骤、优势与局限,还展示了在 Stata 软件中运用代码实现自助法分析的全过程;对于 GARCH 模型,更是从拟合、过滤、预测、模拟到诊断工具,全方位进行剖析,并辅以 R 语言代码示例。
专题项目文件已分享在交流社群,阅读原文进群和 600 + 行业人士共同交流和成长,一起在数据科学的道路上携手前行,挖掘数据背后的无限价值。
自助法(Bootstrap)原理及其应用分析
本文深入探讨了自助法(Bootstrap)这一在统计学领域广泛应用的重抽样方法。通过详细阐述其原理、实施步骤以及相关特性,结合具体实例展示了自助法在处理样本数据、估计统计量分布等方面的优势与局限。同时,分析了在不同样本规模条件下自助法的表现,并对其在实际研究和数据分析中的应用前景进行了展望,旨在为相关领域的研究人员和数据分析从业者提供关于自助法的全面理解和应用指导。
引言
在统计学的发展历程中,随着计算技术的飞速进步,一种基于大量计算来探索统计量抽样分布的方法逐渐兴起,这便是自助法(Bootstrap)。它的出现为统计分析带来了革命性的变化,使得在传统方法受限的情况下,依然能够准确地估计统计量的分布特征。
自助法在概念上相对直观,它直接基于抽样分布的定义,通过模拟抽样的随机过程来实现对总体分布的推断。传统的统计方法在处理一些复杂数据结构或小样本问题时,往往存在诸多局限性,而自助法借助现代计算能力,通过大量的重抽样操作,为解决这些问题提供了新的途径。
自助法原理
基本思想
自助法的核心思想基于这样一个假设:原始样本能够代表其抽取自的总体。从原始样本中进行有放回的重复抽样,生成大量的重抽样样本(resamples),这些重抽样样本在一定程度上反映了从总体中抽取多个样本的情况。由此,统计量的自助分布(bootstrap distribution)便可以近似代表该统计量的抽样分布。
例如,在研究人们查看Facebook个人资料的平均时间时(如视频所示,数据呈现右偏态,且仅有21个观测值,使用传统t程序存在顾虑),自助法通过对这21个观测值进行有放回的重抽样,来模拟从总体中抽取多个样本的过程,进而估计平均时间这一统计量的分布情况。
实施步骤
- 重抽样(Resampling)
- 第一步是重抽样。具体操作是从已有的数据中进行有放回的重复抽样,创建大量的重抽样样本。每个重抽样样本的规模与原始随机样本相同。例如,假设有一组包含5个数据点(3.77, 0.23, 5.08, 4.35, 8.60,均值为4.41)的原始样本,通过有放回抽样得到多个重抽样样本,如(3.77, 0.23, 0.23, 4.35, 4.35,均值为2.59)、(3.77, 4.35, 0.23, 8.60, 8.60,均值为5.11)等。以下是一段简单的Python代码示例来展示重抽样过程:
import numpy as np# 原始样本数据original_sample = np.array([3.77, 0.23, 5.08, 4.35, 8.60])# 进行重抽样,这里设定重抽样次数为1000次num_resamples = 1000resampled_samples = []for _ in range(num_resamples): resampled_sample = np.random.choice(original_sample, size=len(original_sample), replace=True) resampled_samples.append(resampled_sample)
这段代码利用Python的numpy库,从原始样本数据中进行有放回的抽样,生成了1000个重抽样样本。
2. 构建自助分布(The Bootstrap Distribution)
- 统计量的自助分布是对所有相同规模的可能重抽样样本中该统计量取值的汇总。例如,基于3000个重抽样样本计算每个样本的均值,然后将这些均值进行统计汇总,得到的分布即为均值这一统计量的自助分布(如视频所示)。它能够提供关于抽样分布的形状和变异性等重要信息。
自助法的优势与局限
优势
从理论层面来看,自助法具有坚实的统计学基础。它通过模拟抽样过程,能够在不依赖于特定总体分布假设的情况下,较为准确地估计统计量的抽样分布。在实际应用中,尤其在处理复杂数据结构或传统方法难以适用的场景时,自助法展现出了显著的优势。
与传统统计方法相比,在具备足够计算能力(即进行大量重复抽样)的条件下,自助法的重抽样方法能够提供更为准确的估计结果。例如,在一些非参数统计推断问题中,传统方法可能因对数据分布的严格假设而受限,而自助法可以通过灵活的重抽样策略,适应各种数据分布情况,从而得到更可靠的推断结论。
局限
尽管自助法具有诸多优势,但它也并非完美无缺。在处理小样本数据时,自助法存在一定的局限性。即使总体服从正态分布,基于不同小样本构建的自助分布在形状和离散程度上也会表现出较大的差异(如视频所示)。这是因为小样本本身所包含的信息有限,难以全面准确地反映总体特征,导致自助分布无法精确地模拟抽样分布的形状和离散程度。
因此,在使用小样本数据进行推断时,包括自助法推断在内,都需要格外谨慎。不能仅仅依赖自助法分布来做出过于绝对的结论,需要结合其他方法或进一步增加样本量来提高推断的可靠性。
Stata代码实现自助法分析解读
视频展示了在Stata软件中使用代码进行自助法(Bootstrap)分析的过程,以下是对代码和操作的详细解读:
- 初始设置与数据导入
set more off
:关闭分屏显示,使结果能一次性全部显示,方便查看。clear all
:清除Stata内存中的所有数据、程序等内容,为新的分析做准备 。import excel data_bootstrap_demo.xlsx, sheet("recycle") firstrow clear
:从名为data_bootstrap_demo.xlsx
的Excel文件中导入名为 “recycle” 工作表的数据,firstrow clear
表示将Excel第一行作为变量名,并清除之前可能存在的数据 。
- 单总体均值的自助法推断
- 代码功能
bootstrap x_bar=r(mu_1), reps(3000) bca saving(bspaper1,replace) : ttest Newspaper=0
:使用自助法对Newspaper
变量进行单样本t检验(检验均值是否为0 )。reps(3000)
表示进行3000次重复抽样;bca
是偏差校正加速(bias - corrected and accelerated)方法,用于计算置信区间;saving(bspaper1,replace)
表示将自助法结果保存到名为bspaper1
的文件中并覆盖原有内容 。estat bootstrap,all
:显示所有四种类型的置信区间(正态近似置信区间(N)
、百分位置信区间(P)
、偏差校正置信区间(BC)
和偏差校正加速置信区间(BCa)
)。
- 两样本均值比较的自助法分析
- 代码功能
ttest Newspaper, by(Citysuburb)
:按Citysuburb
分组对Newspaper
变量进行两样本t检验 。bootstrap t=r(mu_1), reps(100) : ttest Newspaper, by(Citysuburb)
:使用自助法进行两样本t检验,重复抽样100次,计算t统计量 。bootstrap diff=r(mu_1)-r(mu_2), bca rep(1000) strata(Citysuburb) saving(bspaper2,replace) : ttest Newspaper, by(Citysuburb)
:计算两组均值差异的自助法估计,使用偏差校正加速方法,重复1000次,按Citysuburb
分层抽样,并保存结果到bspaper2
文件 。
- 结果查看与可视化
use bspaper1,clear
:调用之前保存的bspaper1
文件中的数据 。histogram x_bar,frac xtitle(Bootstrapped X_Bar) normal
:绘制自助法得到的x_bar
变量的直方图,并叠加正态分布曲线,frac
表示显示频率而非频数,xtitle
用于设置x轴标题 。graph export x_bar_dist.png,replace
:将绘制的图形以x_bar_dist.png
文件名导出并覆盖原有文件 。
结果分析
从视频中的结果表格可以看到:
- 单样本t检验中,观测到的均值(Observed Coef.)为2.180405 ,自助法标准误(Bootstrap Std. Err.)为0.0806095 ,z值为27.05 ,P值小于0.0001 ,说明在统计上显著拒绝原假设(均值为0 )。不同方法计算的95%置信区间略有差异 。
- 两样本t检验中,给出了两组的均值、标准误等信息,以及合并后的统计量。通过自助法可以更稳健地估计组间差异的分布情况,帮助判断差异是否真实存在。
通过这些Stata代码和操作,实现了基于自助法的统计推断,从数据导入、检验设置到结果呈现与可视化,全面展示了自助法在分析样本均值相关问题中的应用。
R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模拟可视化
最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。
介绍
Box 等人的开创性工作(1994) 在自回归移动平均模型领域的相关工作为波动率建模领域的相关工作铺平了道路,分别由 Engle (1982) 和 Bollerslev (1986) 引入了 ARCH 和 GARCH 模型。这些模型的扩展包括更复杂的动力学,例如阈值模型来捕捉新闻影响的不对称性,以及除正态之外的分布来解释实践中观察到的偏度和过度峰度。在进一步的扩展中,
相关视频:时间序列分析:ARIMA GARCH模型分析股票价格数据
时间序列分析模型 ARIMA-ARCH GARCH模型分析股票价格数据
相关视频:马尔可夫链蒙特卡罗方法MCMC原理与R语言实现
马尔可夫链蒙特卡罗方法MCMC原理与R语言实现
,时长08:47
相关视频:什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例
什么是Bootstrap自抽样及R语言Bootstrap线性回归预测置信区间
,时长05:38
本文旨在为单变量 GARCH 过程建模提供一套全面的方法,包括拟合、过滤、预测、模拟以及诊断工具,包括绘图和各种测试。用于评估模型不确定性的其他方法(例如滚动估计、引导预测和模拟参数密度)为这些过程的建模提供了丰富的环境。
示例
拟合对象属于 uGARCHfit 类,可以传递给各种其他方法,例如 show (summary)、plot、ugarchsim、ugarchforecast 等。
> fit = ugarchfit(spec = spec)
拟合诊断
稳健标准误差基于 White (1982) 的方法,该方法通过计算参数 (θ) 的协方差 (V) 来生成渐近有效的置信区间:
其中,
这是最佳分数的Hessian和协方差。稳健标准误差是 V 的对角线的平方根。拟合或过滤对象上的 inforcriteria 方法返回 Akaike (AIC)、贝叶斯 (BIC)、Hannan-Quinn (HQIC) 和 Shibata (SIC) 信息标准,以通过以不同速率惩罚过拟合来启用模型选择。形式上,它们可以定义为:
Q-statistics 和 ARCH-LM 检验已被 Fisher 和 Gallagher (2012) 的 Weighted Ljung-Box 和 ARCH-LM 统计量取代,这更好地说明了来自估计模型。ARCH-LM 检验现在是一个加权组合检验,用于检验充分拟合的 ARCH 过程的原假设,而 Ljung-Box 是另一个组合检验,其 ARMA 拟合的充分性为零。signbias 计算 Engle 和 Ng (1993) 的 Sign Bias Test,也显示在摘要中。这测试了标准化残差中杠杆效应的存在(以捕捉 GARCH 模型可能的错误指定),
其中 I 是指标函数, ^t 是 GARCH 过程的估计残差。原假设是 H0:ci = 0(对于 i = 1、2、3),并且联合 H0:c1 = c2 = c3 = 0。从先前拟合的总结可以推断,存在显着的负和对冲击的积极反应。使用诸如 apARCH 之类的模型可能会减轻这些影响
gof 计算卡方拟合优度检验,将标准化残差的经验分布与所选密度的理论分布进行比较。该实现基于 Palm (1996) 的测试,该测试通过重新分类标准化残差而不是根据它们的值(如在标准测试中),而是根据它们的大小,计算在存在非独立同分布观察的情况下的测试,计算观察到小于标准化残差的值的概率,该残差应该是相同的标准均匀分布。该函数必须采用 2 个参数,即拟合对象以及用于对值进行分类的箱数。在拟合摘要中,使用了 (20, 30, 40, 50) 个 bin 的选择,
nymblom 检验计算了 Nyblom (1989) 的参数稳定性检验,以及联合检验。显示用于比较结果的临界值,但在超过 20 个参数的情况下,这不适用于联合测试。
最后,一些信息图可以交互绘制(which = 'ask'),单独绘制(which = 1:12),或者一次全部绘制(which = 'all'),如图 2 所示。
过滤
有时希望使用一组预定义的参数简单地过滤一组数据。例如,当新数据到达并且人们可能不希望重新拟合时,可能就是这种情况。
> filt = ugarchfilter(spec = spe)> show(filt)
预测和 GARCH bootstrap程序
2 种类型的预测。一种滚动方法,其中基于拟合例程中设置的 out.sample 选项创建连续 1-ahead 预测,以及用于 n>1 超前预测的无条件方法。(也可以将两者结合起来创建一个相当复杂的对象)。在后一种情况下,也可以使用 Pascual 等人描述的 bootstrap程序。 bootstrap 方法基于从拟合模型的经验分布中重新采样标准化残差,以生成序列和 sigma 的未来实现。实现了两种方法:一种通过模拟和重新拟合建立参数的模拟分布来考虑参数不确定性,另一种只考虑分布不确定性,从而避免昂贵且冗长的参数分布估计。在后一种情况下,1-ahead sigma 预测的预测区间将不可用,因为在这种情况下,只有参数不确定性与 GARCH 类型模型相关。
> sec = ugrspc(are.e=list(model="csGARCH"),ititin="std")> fi = grit(sc,sp5et)bot(fit, mehod = c("Pl", "Full")[1],
完整 GARCH bootstrap程序总结如下:
- 从估计对象中提取标准化残差。如果是具有固定参数的规范,首先使用提供的数据集进行过滤,然后从过滤后的对象中提取标准化残差。
- 使用 spd 或基于内核的方法从原始标准化残差中采样大小为 N 的 n.bootfit 集(原始数据集减去任何样本周期外)。
模拟
模拟可以直接在拟合对象上进行:
其中 n.sim 表示模拟的长度,而 m.sim 表示独立模拟的数量。出于速度的原因,当 n.sim 相对于 m.sim 较大时,仿真代码在 C 中执行,而对于较大的 m.sim,使用了特殊用途的 C++ 代码(使用 Rcpp 和 RcppArmadillo),发现这会导致速度显着提高。
滚动估计
对模型/数据集组合执行滚动估计和预测,可选择返回指定水平的 VaR。更重要的是,它返回计算预测密度所需的任何度量所必需的分布预测参数。以下示例说明了该方法的使用,其中还使用了并行功能并在 10 个内核上运行。
> cl = mkSluter(10)> spec = uarpc(vaaneoel = list(model = "eGARCH"), ditrtonodel = "jsu")> roll = ghrospe,se .at = 1000, ef.every= 10,refit.windw =moing, calult.V= TRUE,V.ha = c(0.01, 0.05), cser = c, eep.oef = TUE)> report
蒙特卡罗实验:模拟参数分布和RMSE
通过多次模拟和拟合模型并针对不同的“窗口”大小来执行蒙特卡罗实验。这允许通过查看均方根误差的下降率以及我们是否具有 √ N 一致性,在数据窗口增加时对参数估计的一致性有所了解。
> spec = urhprnmel = list(model = "gjrGARCH"),+ distuto.el "ged")> dist = ugacdsribton(fiOspec spec, n.sm = 2000),+ user = cl)> stopCluster(cl)> show(dist)
常见问题解答和指南
问:我应该使用多少数据对 GARCH 过程进行建模?
但是,使用 100 个数据点来尝试拟合模型不太可能是一种合理的方法,因为您不太可能获得非常有效的参数估计。提供了一种方法(ugarchdistribution),用于从预先指定的模型、不同大小的数据进行模拟,将模型拟合到数据,并推断参数的分布以及作为数据长度的 RMSE 变化率增加。这是检查参数分布的一种计算成本非常高的方法(但在非贝叶斯世界中是唯一的方法),因此应谨慎使用并在有足够计算能力的情况下使用。
关于分析师
在此对Yefan Gong所作的贡献表示诚挚感谢,她在西安交通大学完成了数量经济与金融专业的学习,专注数理金融与数据处理领域。擅长软件 Python、Stata。
Yefan Gong是一名具备专业能力的分析师,拥有数理金融与数据处理方面的背景,涵盖数据处理、数理金融分析等领域。她在运用专业知识帮助解决数据分析、金融建模等问题方面拥有广泛的专业知识,并且擅长通过 Python 和 Stata 等工具实现数据处理与分析,具备从数据中挖掘价值的能力。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。