Example #1
0
 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);
 }
Example #2
0
 void init(
         const Shared & shared,
         const Group & group,
         rng_t & rng) {
     Shared post = shared.plus_group(group);
     beta = sample_beta(rng, post.alpha, post.beta);
 }
Example #3
0
 float score_data(
         const Shared & shared,
         rng_t &) const {
     Shared post = shared.plus_group(*this);
     float score = fast_lgamma(shared.alpha + shared.beta)
                 - fast_lgamma(post.alpha + post.beta);
     score += fast_lgamma(post.alpha) - fast_lgamma(shared.alpha);
     score += fast_lgamma(post.beta) - fast_lgamma(shared.beta);
     return score;
 }
Example #4
0
 void init(
         const Shared & shared,
         const Group & group,
         rng_t &) {
     Shared post = shared.plus_group(group);
     score_coeff = -fast_log(1.f + post.inv_beta);
     score = -fast_lgamma(post.alpha)
                  + post.alpha * (fast_log(post.inv_beta) + score_coeff);
     post_alpha = post.alpha;
 }
Example #5
0
 float score_data(
         const Shared & shared,
         rng_t &) const {
     Shared post = shared.plus_group(*this);
     float score = fast_lgamma(post.alpha) - fast_lgamma(shared.alpha);
     score += shared.alpha * fast_log(shared.inv_beta)
            - post.alpha * fast_log(post.inv_beta);
     score += -log_prod;
     return score;
 }
Example #6
0
 void init(
         const Shared & shared,
         const Group & group,
         rng_t &) {
     Shared post = shared.plus_group(group);
     post_beta = post.beta;
     alpha = post.alpha + shared.r;
     score = fast_lgamma(post.alpha + post.beta)
           - fast_lgamma(post.alpha)
           - fast_lgamma(post.beta)
           + fast_lgamma(alpha);
 }
Example #7
0
 float score_value(
         const Shared & shared,
         const Value & value,
         rng_t &) const {
     Shared post = shared.plus_group(*this);
     float alpha = post.alpha + shared.r;
     float beta = post.beta + value;
     float score = fast_lgamma(post.alpha + post.beta)
                 - fast_lgamma(alpha + beta);
     score += fast_lgamma(alpha) - fast_lgamma(post.alpha);
     score += fast_lgamma(beta) - fast_lgamma(post.beta);
     return score;
 }
Example #8
0
 float score_data(
         const Shared & shared,
         const std::vector<Group> & groups,
         rng_t &) const {
     const float shared_part = fast_lgamma(shared.alpha + shared.beta)
                             - fast_lgamma(shared.alpha)
                             - fast_lgamma(shared.beta);
     float score = 0;
     for (auto const & group : groups) {
         if (group.count) {
             Shared post = shared.plus_group(group);
             score += fast_lgamma(post.alpha)
                    + fast_lgamma(post.beta)
                    - fast_lgamma(post.alpha + post.beta);
             score += shared_part;
         }
     }
     return score;
 }
Example #9
0
    float score_data(
            const Shared & shared,
            const std::vector<Group> & groups,
            rng_t &) const {
        const float alpha_part = fast_lgamma(shared.alpha);
        const float beta_part = shared.alpha * fast_log(shared.inv_beta);

        float score = 0;
        for (auto const & group : groups) {
            if (group.count) {
                Shared post = shared.plus_group(group);
                score += fast_lgamma(post.alpha) - alpha_part;
                score += beta_part - post.alpha * fast_log(post.inv_beta);
                score += -group.log_prod;
            }
        }

        return score;
    }