R2OpenBUGS错误:节点不是随机的

时间:2015-01-09 15:52:38

标签: r models stochastic volatility


我在R中运行R2OpenBUGS时遇到了一个具体问题。但它在OpenBUGS中运行得非常好。
我想了解问题所在。

这是我的代码:

模型波动;
const n = 180;
{

#可能性:联合分配ys
for(t in 1:n)
{(yisigma2 [t]< -1 / exp(theta [t]);
y [t] ~dnorm(0,yisigma2 [t]);
}

之前的分发

mu~dnorm(0,0.1);
phistar~dbeta(20,1.5);
itau2~dgamma(2.5,0.025);
beta< - exp(mu / 2);
phi< - 2 * phistar-1;
tau< - sqrt(1 / itau2);
theta0~dnorm(mu,itau2);
thmean [1]< -mu + phi *(theta0-mu);
theta [1] ~dnorm(thmean [1],itau2);
for(t in 2:n)
{
thmean [t]< -mu + phi *(theta [t-1] -mu);
theta [t] ~dnorm(thmean [t],itau2);

}
}




R代码:
svm.sim< - bug(data,inits,model.file =" C:/ Documents and Settings / code.txt",  parameters = c(" mu"," phi"," tau"),  n.chains = 1,n.iter = 1000,codaPkg = TRUE,debug = TRUE)

这是从R:

运行时OpenBUGS的日志中显示的错误



模型在语法上是正确的
数据已加载
模型编译
节点的这个分量不是随机的phi误差pos 25
无法为UpdaterNormal.StdUpdater类型的节点生成初始值 在更新之前必须初始化模型 必须在使用监视器之前初始化模型 必须在使用监视器之前初始化模型 必须在使用监视器之前初始化模型 必须在使用监视器之前初始化模型 必须在监控DIC之前初始化模型 在更新之前必须初始化模型 必须在使用监视器之前初始化模型
未设置DIC监视器


任何帮助将不胜感激
谢谢你们
Dinakar

1 个答案:

答案 0 :(得分:0)

我稍微修改了你的代码(见下文),它似乎工作正常。我确实将值n指定为数据,并让OpenBUGS自己生成初始值。这是你指定你的内容的问题吗?

    sink("stack_model.txt")
    cat("
    model{
    # likelihood: joint distribution of ys 
    for (t in 1:n) 
    { 
    yisigma2[t] <- 1/exp(theta[t])
    y[t] ~ dnorm(0,yisigma2[t])
  }
  mu ~ dnorm(0,0.1)
  phistar ~ dbeta(20,1.5) 
  itau2 ~ dgamma(2.5,0.025)
  beta <- exp(mu/2)
  phi <- 2*phistar-1
  tau <- sqrt(1/itau2)
  theta0 ~ dnorm(mu,itau2) 
  thmean[1] <- mu + phi*(theta0-mu) 
  theta[1] ~ dnorm(thmean[1],itau2) 
  for (t in 2:n) 
  { 
    thmean[t] <- mu + phi*(theta[t-1]-mu) 
    theta[t] ~ dnorm(thmean[t],itau2) 

  } 
}",fill=TRUE)
sink()
win.data<-list(n=180)
svm.sim <- bugs(win.data, inits=NULL, model.file = "stack_model.txt", parameters = c("mu", "phi", "tau"), n.chains = 2, n.iter = 1000, DIC=F, debug=TRUE,  codaPkg =TRUE)