1 #ifndef __STAN__PROB__DISTRIBUTIONS__UNIVARIATE__DISCRETE__HYPERGEOMETRIC_HPP__
2 #define __STAN__PROB__DISTRIBUTIONS__UNIVARIATE__DISCRETE__HYPERGEOMETRIC_HPP__
4 #include <boost/math/distributions.hpp>
21 template <
bool propto,
33 static const char*
function =
"stan::prob::hypergeometric_log(%1%)";
56 if (!
check_bounded(
function, n, 0, a,
"Successes variable", &logp, Policy()))
58 if (!
check_greater(
function, N, n,
"Draws parameter", &logp, Policy()))
60 for (
size_t i = 0; i <
size; i++) {
61 if (!
check_bounded(
function, N_vec[i]-n_vec[i], 0, b_vec[i],
"Draws parameter minus successes variable", &logp, Policy()))
63 if (!
check_bounded(
function, N_vec[i], 0, a_vec[i]+b_vec[i],
"Draws parameter", &logp, Policy()))
68 "Successes variable",
"Draws parameter",
"Successes in population parameter",
"Failures in population parameter",
77 for (
size_t i = 0; i <
size; i++)
85 template <
bool propto,
99 template <
typename T_n,
111 return hypergeometric_log<false>(n,N,a,b,Policy());
114 template <
typename T_n,
133 using boost::variate_generator;
135 boost::math::hypergeometric_distribution<>
dist (b, N, a + b);
136 std::vector<double> index(a);
137 for(
int i = 0; i < a; i++)
138 index[i] = cdf(dist, i + 1);
145 mid = (min +
max) / 2;