#include #include #include #include using std::vector; static inline double A(vector const ¶meters) { return *parameters[0]->value(); } static inline double B(vector const ¶meters) { return *parameters[1]->value(); } DBeta::DBeta() : DistReal("dbeta", 2, DIST_PROPORTION, true) {} DBeta::~DBeta() {} bool DBeta::checkParameterValue(vector const &par) const { return (A(par) > 0.0 && B(par) > 0.0); } double DBeta::d(double x, vector const &par, bool give_log) const { return dbeta(x, A(par), B(par), give_log); } double DBeta::p(double q, vector const &par, bool lower, bool log_p) const { return pbeta(q, A(par), B(par), lower, log_p); } double DBeta::q(double p, vector const &par, bool lower, bool log_p) const { return qbeta(p, A(par), B(par), lower, log_p); } double DBeta::r(vector const &par) const { return rbeta(A(par), B(par)); } double DBeta::mean(vector const &par) const { return A(par)/(A(par) + B(par)); } double DBeta::var(vector const &par) const { double a = A(par); double b = B(par); double mu = a/(a + b); double phi = (a + b + 1); return mu * (1 - mu)/ phi; }