Полное сообщение об ошибке
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
Probabilty functions with suffixes _lpdf, _lpmf, _lcdf, and _lccdf,
require a vertical bar (|) between the first two arguments.
error in 'model2a7252aef8cf_probit' at line 7, column 27
-------------------------------------------------
5: }
6: real myprobit_lpdf(real y, real mu, real sigma) {
7: return normal_lpdf(mu, sigma)^y * (1 - normal_lpdf(mu, sigma))^(1-y);
^
8: }
-------------------------------------------------
, который говорит вам, что функция normal_lpdf
исключает три входа и вертикальную черту, отделяющую первый от второго.
Также не рекомендуется давать вашей функции то же имя, что и функции, уже существующей в языке Stan, например normal_lpdf
.
Но написанные вами функции в любом случае не реализуют логарифмическую вероятность пробитной модели. Во-первых, стандартное отклонение ошибок не идентифицируется данными, поэтому вам не нужно sigma
. Тогда правильные выражения будут выглядеть примерно так:
real Phi_mu = Phi(mu);
real log_Phi_mu = log(Phi_mu);
real log1m_Phi_mu = log1m(Phi_mu);
for (n in 1:N)
target += y[n] == 1 ? log_Phi_mu : log1m_Phi_mu;
хотя это просто медленный способ сделать
target += bernoulli_lpmf(y | Phi(mu));