我目前正在尝试将一些 JAGS 模型移植到 STAN。我收到一些奇怪的错误“stan::prob::exponential_log(N4stan5agrad3varE): Random variable is nan:0, but must not be nan!” 并调试那些我想知道一些本地参数的值。
在 JAGS 中,我可以为任何变量设置监视器。STAN 仅监控参数。但是参数不能有赋值(如果我理解正确的话)。
那么如何监控中间变量呢?
我还粘贴了模型代码,以防有人看到我犯的愚蠢错误。但是请注意,我知道可以将相同的模型表示为双指数(具有两个速率)的 CDF。这是我计划的简化形式。
Model:
data {
int y[11]; //
int reps[11];
real soas[11];
}
parameters {
real<lower=0.001,upper=0.200> v1;
real<lower=0.001,upper=0.200> v2;
}
model {
int dif[11,96];
real cf[11];
real p[11];
real t1[11,96];
real t2[11,96];
for (i in 1:11){
for (r in 1:reps[i]){
t1[i,r] ~ exponential(v1);
t2[i,r] ~ exponential(v2);
dif[i,r] <- (t1[i,r]+soas[i]<=(t2[i,r]));
}
cf[i] <- sum(dif[i]);
p[i] <-cf[i]/reps[i];
y[i] ~ binomial(reps[i],p[i]);
}
}
这是一些虚拟数据:
psy_dat = {
'soas' : numpy.array(range(-100,101,20)),
'y' : [47, 46, 62, 50, 59, 47, 36, 13, 7, 2, 1],
'reps' : [48, 48, 64, 64, 92, 92, 92, 64, 64, 48, 48]
}