分享

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

 拓端数据 2024-01-18 发布于浙江

模型

随机波动率模型定义如下

并为

其中 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:跟踪样本参数


点击标题查阅往期相关内容

使用R语言随机波动模型SV处理时间序列中的随机波动率

左右滑动查看更多

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多