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