#include #include #include #include using std::vector; static inline double SHAPE(vector const &par) { return *par[0]->value(); } static inline double SCALE(vector const &par) { return 1/(*par[1]->value()); } static inline double RATE(vector const &par) { return *par[1]->value(); } DGamma::DGamma() : DistReal("dgamma", 2, DIST_POSITIVE, true) {} DGamma::~DGamma() {} bool DGamma::checkParameterValue(vector const &par) const { return (SHAPE(par) > 0 && RATE(par) > 0); } double DGamma::d(double x, vector const &par, bool give_log) const { return dgamma(x, SHAPE(par), SCALE(par), give_log); } double DGamma::p(double q, vector const &par, bool lower, bool give_log) const { return pgamma(q, SHAPE(par), SCALE(par), lower, give_log); } double DGamma::q(double p, vector const &par, bool lower, bool log_p) const { return qgamma(p, SHAPE(par), SCALE(par), lower, log_p); } double DGamma::r(vector const &par) const { return rgamma(SHAPE(par), SCALE(par)); } double DGamma::mean(std::vector const &par) const { return SHAPE(par) * SCALE(par); } double DGamma::var(std::vector const &par) const { return SHAPE(par) * SCALE(par) * SCALE(par); }