В Стан, я получаю следующее сообщение об ошибке:Ошибка узла: требуется декларация без ограничений. найдено симплекс
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
require unconstrained variable declaration. found simplex.
ERROR at line 48
46: for (j in 1:records) {
47: real phenology_predictor;
48: simplex[7] pi;
^
Я не совсем понимаю, в чем проблема. Когда я использовал real pi[7]
вместо simplex[7] pi
, я получил другую ошибку:
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
no matches for function name="categorical_log"
arg 0 type=int
arg 1 type=real[1]
available function signatures for categorical_log:
0. categorical_log(int, vector) : real
1. categorical_log(int[1], vector) : real
unknown distribution=categorical
ERROR at line 63
62:
63: Y[j] ~ categorical(pi);
^
64:
, которые я не понимаю, либо ... весь мой код:
data {
int sites;
int records;
int Y[records];
vector[records] yday;
int site[records];
}
transformed data {
int M[sites];
}
parameters {
real<lower=0,upper=1> psi;
real<lower=0,upper=1000> phi_phen_scale;
real phi_alpha;
real q_date;
real q_date2;
real q_site[sites];
}
model {
real p[records];
real q[records];
// priors
phi_phen_scale ~ normal(0, 10);
phi_alpha ~ normal(0, 10);
q_date ~ normal(0, 10);
q_date2 ~ normal(0, 10);
// vectorized
M ~ bernoulli(psi);
q_site ~ normal(0, 10);
for (j in 1:records) {
real phenology_predictor;
simplex[7] pi;
phenology_predictor <- q_date * yday[j] + q_date2 * yday[j]^2;
p[j] <- M[site[j]] * inv_logit(phi_alpha + phi_phen_scale * phenology_predictor);
q[j] <- inv_logit(q_site[site[j]] + phenology_predictor);
pi[1] <- 1-p[j] + p[j]*(1-q[j])^6;
pi[2] <- p[j]*q[j] ;
pi[3] <- p[j]*(1-q[j])*q[j];
pi[4] <- p[j]*(1-q[j])^2*q[j];
pi[5] <- p[j]*(1-q[j])^3*q[j];
pi[6] <- p[j]*(1-q[j])^4*q[j];
pi[7] <- p[j]*(1-q[j])^5*q[j];
Y[j] ~ categorical(pi);
}
}
Ограниченные локальные параметры, такие как симплексы, не могут быть объявлены внутри блока модели, поскольку они не проверяются. Итак, вы должны просто объявить pi равным вектором длины 7, например '' 'vector [7] pi;' ''. Тем не менее, pi должен быть на симплексе, чтобы быть допустимым аргументом категориальной функции. Не очевидно, что ваше построение pi гарантирует, что все семь элементов неотрицательны и суммируются до единицы, но, возможно, это и есть причина, и они только нарушают эти ограничения из-за числовой неточности. Если это так, вы можете попробовать перенормировать pi, прежде чем передавать его. –
@BenGoodrich, pi должен фактически суммировать до 1 по определению. Вы предполагаете, что мне, возможно, придется перенормировать только из-за ошибок округления? Это такая грандиозная сделка? Пожалуйста, отправьте это как ответ, я соглашусь. – TMS