1 #ifndef __STAN__PROB__DISTRIBUTIONS__UNIVARIATE__DISCRETE__BETA_BINOMIAL_HPP__
2 #define __STAN__PROB__DISTRIBUTIONS__UNIVARIATE__DISCRETE__BETA_BINOMIAL_HPP__
16 template <
bool propto,
22 typename return_type<T_size1,T_size2>::type
28 static const char*
function =
"stan::prob::beta_binomial_log(%1%)";
45 if (!
check_nonnegative(
function, N,
"Population size parameter", &logp, Policy()))
47 if (!
check_finite(
function, alpha,
"First prior sample size parameter", &logp,
50 if (!
check_positive(
function, alpha,
"First prior sample size parameter",
53 if (!
check_finite(
function, beta,
"Second prior sample size parameter",
56 if (!
check_positive(
function, beta,
"Second prior sample size parameter",
61 "Successes variable",
"Population size parameter",
"First prior sample size parameter",
"Second prior sample size parameter",
73 size_t size =
max_size(n, N, alpha, beta);
75 for (
size_t i = 0; i < size; i++) {
76 if (n_vec[i] < 0 || n_vec[i] > N_vec[i])
83 for (
size_t i = 0; i < size; i++) {
87 logp +=
lbeta(n_vec[i] + alpha_vec[i], N_vec[i] - n_vec[i] + beta_vec[i])
88 -
lbeta(alpha_vec[i],beta_vec[i]);
93 template <
bool propto,
100 const T_size1& alpha,
const T_size2& beta) {
101 return beta_binomial_log<propto>(n,N,alpha,beta,
105 template <
typename T_n,
113 const T_size1& alpha,
const T_size2& beta,
115 return beta_binomial_log<false>(n,N,alpha,beta,Policy());
118 template <
typename T_n,
124 const T_size1& alpha,
const T_size2& beta) {
125 return beta_binomial_log<false>(n,N,alpha,beta,