R语言随机波动率(SV)模型、MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数
模型
随机波动率模型定义如下
并为
其中 yt 是因变量,xt 是 yt 的未观察到的对数波动率。N(m,σ2) 表示均值 m 和方差 σ2 的正态分布。
α、β 和 σ 是需要估计的未知参数。
BUGS语言统计模型
文件内容 'sv.bug'
:
= cat(readLies(moelfle ), sep = )
# 随机波动率模型SV_0 # 用于随机波动率模型 y\, x\, prec\_y\ model { alha ~ dnorm(,) logteta ~ dnorm(,.) bea <- ilogit(loit_ta) lg_sima ~ dnorm(, ) sia <- exp(log_sigma) x\ ~ dnorm(, /sma^) pr_y\ <- exp(-x\[\]) y\ ~ dnorm(, prec_y\[\]) for (t in :t_max) { x\ ~ dnorm(aa + eta*(t-\]-alha, /ia^) pr_y\ <- exp(-x\[t\]) y\ ~ dnorm(, prec_y\[t\]) }
设置
设置随机数生成器种子以实现可重复性
set.seed(0)
加载模型并加载或模拟数据
= TRUE = (!sampe_ata) { = diff(log(rev(tab$ose))) = revtab$te\[-\]) = :t_max = y\[ind\] SP500\_dae\ = SP0dae_tr\[ind\] SP500\_e\ = as.Date(SP500_dtetr)
模型参数
(!smle_dta) { dat = list(=ax, =y) } { sigrue = .4; alpa_rue = 0; =.99; dat = list(t\=\_mx, =simarue, =alhatrue, bet\=e\_true) }
如果模拟数据,编译BUGS模型和样本数据
data = mdl$da()
绘制数据
对数收益率
Biips粒子边际Metropolis-Hastings
我们现在运行Biips粒子边际Metropolis-Hastings (Particle Marginal Metropolis-Hastings),以获得参数 α、β 和 σ 以及变量 x 的后验 MCMC 样本。
PMMH的参数
= = = = para\ = c('apha', 'loit\_bta', 'logsgma') = c('x')
初始化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)
参数的后验均值和置信区间
(k 1:(pram_names)) { suparam = \_pmm\[\[pam\_as\[k\]\]\] (param) }
参数的MCMC样本的踪迹
(amldata) para\_tue = c(lp\_tue, (dt/(-dta)), (smtue)) ) (k 1:(param_aes)) { smps_pm = tmmh\[\[paranesk\]\] (samlespram\[1,\]
PMMH:跟踪样本参数
点击标题查阅往期相关内容
左右滑动查看更多
01
02
03
04
参数后验的直方图和 KDE 估计
for (k in :(paramns)) { samps\_aram = out\_mmh\[\[pramnaes\[k\]\]\] (sple_param) if (sample_data) (parm_true) }
PMMH:直方图后验参数
for ( in () { kd\_pram =kde\_mm\[\[paramames\[k\]\]\] plot(, col'blue if () points(\[k\]) }
PMMH:KDE 估计后验参数
x 的后均值和分位数
x\_m\_mean = x x\_p\_quant =x (ame_at) { lines(:t\_ax, x\_true) } ( bt=
PMMH:后验均值和分位数
x 的 MCMC 样本的踪迹
) (k :length) { tk = ie_inex\ (sample_data) points(, dtax_t } (sml_aa) { plot( () }
PMMH:跟踪样本 x
x 后验的直方图和核密度估计
par(=c(2,2)) (k 1:length(tie_dex)) { tk = tmnex\[k\] hist(ot_m\[tk,\] =aste(t=', t, =) (sample_data) points(ata\[t\], } (saml_dta) { plot(0, =, =, x legend(n
PMMH:后_边际_直方图
par(=c(2,2)) (k 1:length(idx)) { tk =m_dx\[k\] plot(kmmk\]\] (alata) point(dat_r\[k\], 0) } (aldt) { plot(0, =, =, x, pt.=c(4,NA)') }
赞 (0)