1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > R语言随机波动率(SV)模型 MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数

R语言随机波动率(SV)模型 MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数

时间:2023-03-30 06:40:24

相关推荐

R语言随机波动率(SV)模型 MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数

最近我们被客户要求撰写关于随机波动率(SV)的研究报告,包括一些图形和统计输出。

在这个例子中,我们考虑随机波动率模型 SV0 的应用,例如在金融领域。

相关视频:随机波动率SV模型原理和Python对标普SP500股票指数时间序列波动性预测

随机波动率SV模型原理和Python对标普SP500股票指数时间序列波动性预测

统计模型

随机波动率模型定义如下

并为

其中 yt 是因变量,xt是 yt 的未观察到的对数波动率。N(m,σ2) 表示均值 m和方差 σ2 的正态分布。

α、β和 σ是需要估计的未知参数。

BUGS语言统计模型

文件内容'sv.bug'

moelfle = 'sv.bug' # BUGS模型文件名cat(readLies(moelfle ), sep = "\n")

# 随机波动率模型SV_0# 用于随机波动率模型var y[t_max], x[t_max], prec_y[t_max]model{alha ~ dnorm(0,10000)logteta ~ dnorm(0,.1)bea <- ilogit(loit_ta)lg_sima ~ dnorm(0, 1)sia <- exp(log_sigma)x[1] ~ dnorm(0, 1/sma^2)pr_y[1] <- exp(-x[1])y[1] ~ dnorm(0, prec_y[1])for (t in 2:t_max){x[t] ~ dnorm(aa + eta*(t-1]-alha, 1/ia^2)pr_y[t] <- exp(-x[t])y[t] ~ dnorm(0, prec_y[t])}

设置

设置随机数生成器种子以实现可重复性

set.seed(0)

加载模型并加载或模拟数据

sample_data = TRUE # 模拟数据或SP500数据t_max = 100if (!sampe_ata) {# 加载数据 tab = read.csv('SP500.csv')y = diff(log(rev(tab$ose)))SP5ate_str = revtab$te[-1])ind = 1:t_maxy = y[ind]SP500_dae_r = SP0dae_tr[ind]SP500_e_num = as.Date(SP500_dtetr)

模型参数

if (!smle_dta) {dat = list(t_ma=ax, y=y)} else {sigrue = .4; alpa_rue = 0; bettrue=.99;dat = list(t_mx=_mx, sigm_tue=simarue,alpatrue=alhatrue, bet_tue=e_true)}

如果模拟数据,编译BUGS模型和样本数据

data = mdl$da()

绘制数据

对数收益率

Biips粒子边际Metropolis-Hastings

我们现在运行Biips粒子边际Metropolis-Hastings(Particle Marginal Metropolis-Hastings),以获得参数 α、β和 σ以及变量 x 的后验 MCMC 样本。

PMMH的参数

n_brn = 5000 # 预烧/适应迭代的数量n_ir = 10000 #预烧后的迭代次数thn = 5 #对MCMC输出进行稀释n_art = 50 # 用于SMC的nb个粒子para_nmes = c('apha', 'loit_bta', 'logsgma') # 用MCMC更新的变量名称(其他变量用SMC更新)。latetnams = c('x') # 用SMC更新的、需要监测的变量名称

初始化PMMH

运行 PMMH

update(b_pmh, n_bun, _rt) #预烧和拟合迭代

samples(oj_mh, ter, n_art, thin=hn) # 采样

汇总统计

summary(otmmh, prob=c(.025, .975))

计算核密度估计

density(out_mh)

参数的后验均值和置信区间

for (k in 1:length(pram_names)) {suparam = su_pmm[[pam_as[k]]]cat(param$q)}

参数的MCMC样本的踪迹

if (amldata)para_tue = c(lp_tue, log(dt$bea_rue/(-dta$eatru)), log(smtue)))for (k in 1:length(param_aes)) {smps_pm = tmmh[[paranesk]]plot(samlespram[1,]

PMMH:跟踪样本参数

参数后验的直方图和 KDE 估计

for (k in 1:length(paramns)) {samps_aram = out_mmh[[pramnaes[k]]]hist(sple_param)if (sample_data)points(parm_true)}

PMMH:直方图后验参数

for (k in 1:length(parm) {kd_pram =kde_mm[[paramames[k]]]plot(kd_arm, col'blueif (smpldata)points(ar_true[k])}

PMMH:KDE 估计后验参数

x 的后均值和分位数

x_m_mean = x$meanx_p_quant =x$quantplot(xx, yy)polygon(xx, yy)lines(1:t_max, x_p_man)if (ame_at) {lines(1:t_ax, x_true)} elselegend(bt='n)

PMMH:后验均值和分位数

x 的 MCMC 样本的踪迹

par(mfrow=c(2,2))for (k in 1:length) {tk = ie_inex[k]if (sample_data)points(0, dtax_t}if (sml_aa) {plot(0legend('center')}

PMMH:跟踪样本 x

x 后验的直方图和核密度估计

par(mfow=c(2,2))for (k in 1:length(tie_dex)) {tk = tmnex[k]hist(ot_m$x[tk,]main=aste(t=', t, se='')if (sample_data)points(ata$x_re[t], }if (saml_dta) {plot(0, type='n', bty='n', xlegend('centerbty='n')}

PMMH:后边际直方图

par(mfrow=c(2,2))for (k in 1:length(idx)) {tk =m_dx[k]plot(kmmk]] if (alata)point(dat_r[k], 0)}if (aldt) {plot(0, type='n', bty='n', x, pt.bg=c(4,NA)')}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。