我正在尝试将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”中)
在此模型中什么会产生负值?
答案 0 :(得分:1)
错误消息是由于theta
上没有适当的界线造成的。应该是
vector<lower = 0, upper = 1>[J] theta;
许多Stan的新用户都认为在theta
上放置一个类似beta的东西意味着它在零和一之间。但是,没有这种暗示,尤其是对于theta
的提议,从错误消息中可以看出,除非声明了边界,否则该提议可以为负或大于1(在这种情况下,它们由无约束的转换强制执行)变量)。