模型 随机波动率模型定义如下 并为 其中 yt 是因变量,xt 是 yt 的未观察到的对数波动率。N(m,σ2) 表示均值 m 和方差 σ2 的正态分布。 α、β 和 σ 是需要估计的未知参数。 BUGS语言统计模型文件内容 = 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:跟踪样本参数 点击标题查阅往期相关内容 左右滑动查看更多 参数后验的直方图和 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)') }
|
|