我刚刚开始尝试使用 OpenBUGS 对随机波动率模型进行贝叶斯分析。特别是,我正在尝试计算随机协方差,类似于Meyer 和 Yu (2006) 指定的 DC-MSV 模型。
我在Congdon 的 Applied Bayesian Hierarchical Methods中在线找到了 WinBUGS 代码,它实现了 DC-MSV 模型(Meyer & Yu 2006)。稍作修改,我的模型(保存为msv01.txt)如下:
model
{
for (t in 1:T)
{
D[t] <- exp(h[1,t]+h[2,t])*(1-rho.e*rho.e);
y.Prec[t,1,1] <- exp(h[2,t])/D[t];
y.Prec[t,2,2] <- exp(h[1,t])/D[t];
y.Prec[t,1,2] <- -rho.e*exp(0.5*h[1,t]+0.5*h[2,t])/D[t];
y.Prec[t,2,1]<- y.Prec[t,1,2];
y[t,1:2] ~dmnorm(nought[1:2],y.Prec[t,,]);
}
# log volatility VAR
for (p in 1:P)
{
h.st[1,p] ~dnorm(mu[p],1)
for (t in 2:T)
{
h.st[t,p] ~dnorm(h.mu[t,p],1);
h.mu[t,p] <- mu[p] + ph[p]*(h.st[t-1,p]-mu[p]);
}
}
for (t in 1:T)
{
h[1,t] <- sig.u[1]*h.st[t,1];
h[2,t] <- sig.u[2]*rho.u*h.st[t,1]+sig.u[2]*sqrt(1-rho.u*rho.u)*h.st[t,2];
}
# priors
for (p in 1:P)
{
inv.sig2.u[p] ~dgamma(1,1);
sig.u[p] <- 1/sqrt(inv.sig2.u[p]);
phstar[p] ~dbeta(19,1);
ph[p] <- 2*phstar[p] -1;
mu[p] ~dnorm(0,1);
}
rho.e ~dunif(-1,1);
rho.u ~dunif(0,1);
nought[1] <- 0;
nought[2] <- 0;
}
这个模型是否指定得很好?我正在使用R2OpenBUGS
包从 R 中调用程序。我在 R 中没有收到错误消息。OpenBUGS 日志如下:
model is syntactically correct
data loaded (variables not in the model: y.XLF, y.XLE)
model compiled
initial values generated, model initialized
model is updating
1000 updates took 2 s
model is updating
因此,模型似乎没有问题。但是,Traphandler 打开,我的多元正态规范产生未定义的实数似乎实际上可能存在一些问题。我很难弄清楚为什么?这是我的统计模型的问题还是代码的问题?我怀疑这是我的模型中的问题。Traphandler如下:
值得一提的是,我的 R 代码相对简单,如下所示:
library("R2OpenBUGS") # For SV models
y <- 100*etf[2:100,1:2]/etf[1:99,1:2]-100
myData <- c(y = y, T = nrow(y), P = 2)
msv0.bug <- bugs(data = myData, inits = NULL, parameters.to.save = c("h", "y.Prec"),
model = "msv0.txt", n.iter = 11000, n.burnin = 1000, n.chains = 1, DIC = FALSE,
OpenBUGS.pgm = "c:/Program Files (x86)/OpenBUGS/OpenBUGS323/OpenBUGS.exe", debug = TRUE)
任何指导将不胜感激。谢谢!