将 Jags 模型转换为 stan 模型

Convert Jags model to stan model

我正在尝试将 Jags 模型转换为 stan 模型。

锯齿:

model{

    for (i in 1:n){

        theta[i] ~ dbeta(u*s, s-u*s)

        y[i] ~ dbin(theta[i],N[i])
    } 

    u ~ dunif(0,1)
    s ~ dlnorm(4,0.25)

}

斯坦:

data {
  int<lower=0> J;

  int y[J];

  int N[J]; 
}


parameters {

  real<lower=0, upper=1> u;

  real<lower=0> s;

  vector[J] theta;

}


model {

    s ~ lognormal(4,2);

    theta ~ beta(s*u, s*(1-u));

    y ~ binomial(N, theta);

}

但是当我运行它时,它returns消息如下:

链 1:拒绝初始值: 链 1:错误评估初始值的对数概率。 链 1:异常:beta_lpdf:随机变量 [4] 为 -1.58608,但必须 >= 0! (在第 18 行的 'model29e45483bba0_model' 中)

什么会在这个模型中产生负值?

此错误消息是由于 theta 上缺少适当的边界所致。应该是

vector<lower = 0, upper = 1>[J] theta;

许多 Stan 的新用户认为在 theta 之前放置类似 beta 的东西意味着它介于 0 和 1 之间。但是,没有这样的含义,特别是在 theta 的提案中,正如您从错误消息中看到的那样,除非声明了边界(在这种情况下,它们是由无约束的转换强制执行的),否则它可以是负数或大于 1变量)。