Я первый пользователь rstan / Stan, пытающийся настроить пользовательскую вероятность и интегрировать ее, используя integrate_1d
. Основываясь на документации , я настроил свою функцию интегрирования следующим образом:
// internal function to integrate over z
// integrate_1d is super picky: the argument types need to be real, real,
real[], real[], int[]
// e.g., cannot use vectors in place of real[] or int[]
real integrand( real x, // the observed Z-stat; value at which to evaluate integral
real xc,
real[] theta,
real[] x_r,
int[] x_i ){
// separate the parameters
real zeta = theta[1];
real eta = theta[2];
real vi = theta[3];
// significance indicator
int signif;
signif = fabs(x) > 1.96;
return( (1/eta) * (1 - signif) + signif ) * exp( normal_lpdf( x | zeta, sqrt(vi) ) );
}
Я пытаюсь протестировать и отладить эту функцию, потому что она в конечном итоге приводит к ошибкам в оценке лог-вероятности, когда Я запускаю свою модель. С этой целью я хочу иметь возможность запускать функцию в интерактивном режиме, передавая аргументы по своему выбору. Я пытаюсь использовать для этого expose_stan_functions
rstan:
code = "functions{
real integrand( real x, // the observed Z-stat
real xc,
real[] theta,
real[] x_r,
int[] x_i ){
// separate the parameters
real zeta = theta[1];
real eta = theta[2];
real vi = theta[3];
// significance indicator
int signif;
signif = fabs(x) > 1.96;
return( (1/eta) * (1 - signif) + signif ) * exp( normal_lpdf( x | zeta, sqrt(vi) ) );
}
}"
expose_stan_functions(stanc(model_code = code))
integrand(1, {1,1,1}, real[], int[], 1e-8)
integrate_1d( integrand, negative_infinity(), positive_infinity(), {1, 1, 1}, real[], int[], 1e-8 )
, но при вызовах integrand
и integrate_1d
ошибка каждого выброса
Ошибка: неожиданная ', '
, как будто я вызываю функции с принципиально неправильным синтаксисом. (При вызове integrate_1d
я не совсем знал, что делать с xc
. Я его опустил, потому что документация (раздел 9.3.2.4), похоже, предполагает, что для неопределенного интеграла должно быть NaN
.)
Я также приветствую совершенно разные предложения по интерактивной отладке integrand
, если expose_stan_functions
не идеальный способ для go.