inline float sample_beta ( rng_t & rng, float alpha, float beta) { float x = sample_gamma(rng, alpha); float y = sample_gamma(rng, beta); return x / (x + y); }
void init( const Shared & shared, const Group & group, rng_t & rng) { Shared post = shared.plus_group(group); mean = sample_gamma(rng, post.alpha, 1.f / post.inv_beta); }
double LogNormalHyperPrior::init() { boost::random::lognormal_distribution<> lognormal_dist(location, scale); boost::random::variate_generator<boost::random::mt19937*, boost::random::lognormal_distribution<> > sample_gamma(mt_rng_pt, lognormal_dist); double gamma = sample_gamma(); return gamma; }
double GammaHyperPrior::init() { boost::random::gamma_distribution<> gamma_dist(shape, scale); boost::random::variate_generator<boost::random::mt19937*, boost::random::gamma_distribution<> > sample_gamma(mt_rng_pt, gamma_dist); double gamma = sample_gamma(); return gamma; }