В настоящее время я пытаюсь перенести некоторые модели JAGS в STAN. Я получаю некоторые странные ошибки »stan :: prob :: exponential_log (N4stan5agrad3varE): Случайная переменная - nan: 0, но не должна быть назой!» и отлаживать те, которые я хотел бы знать значения некоторых локальных параметров.Как контролировать локальные переменные в STAN?
В 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]
}
Большое спасибо! Я попробую это. –
К сожалению, это не сработает. В блоке генерируемых величин не может быть проведена выборка. Поэтому я попытался пробовать значения в блоке модели, назначить их переменным в блоке сгенерированных величин и попытался использовать их снова в блоке модели. Но это тоже невозможно. Я попробую еще несколько вещей, но любые идеи или подсказки приветствуются. –
Еще одна вещь: я также получаю это наиболее вероятное предупреждение: 'Предупреждение (не фатальное): Левая часть оператора выборки (~) содержит нелинейное преобразование параметра или локальной переменной. Вы должны вызвать increment_log_prob() с абсолютным определителем журнала якобиана преобразования. Сэмплирование Заявление левого выражения: get_base1 (get_base1 (t1, i, "t1", 1), r, "t1", 2) ~ exponential_log (...) ', о котором я не могу понять. Тем не менее, все это не имеет никакого отношения к мониторингу переменных, поэтому я думаю, что я должен начать новую тему с этим. –