将Jags模型转换为stan模型

时间:2019-12-02 03:27:19

标签: r model stan

我正在尝试将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)

}

stan:

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);

}

但是当我运行它时,它会返回如下消息:

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

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

1 个答案:

答案 0 :(得分:1)

错误消息是由于theta上没有适当的界线造成的。应该是

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

许多Stan的新用户都认为在theta上放置一个类似beta的东西意味着它在零和一之间。但是,没有这种暗示,尤其是对于theta的提议,从错误消息中可以看出,除非声明了边界,否则该提议可以为负或大于1(在这种情况下,它们由无约束的转换强制执行)变量)。