#include #include #include #include #include using std::vector; static double MU(vector const &par) { return *par[0]->value(); } static double SIGMA(vector const &par) { return 1/sqrt(*par[1]->value()); } static double TAU(vector const &par) { return *par[1]->value(); } DNorm::DNorm() : DistReal("dnorm", 2, DIST_UNBOUNDED, true) {} DNorm::~DNorm() {} bool DNorm::checkParameterValue(vector const &par) const { return (TAU(par) > 0); } double DNorm::d(double x, vector const &par, bool give_log) const { return dnorm(x, MU(par), SIGMA(par), give_log); } double DNorm::p(double q, vector const &par, bool lower, bool give_log) const { return pnorm(q, MU(par), SIGMA(par), lower, give_log); } double DNorm::q(double p, vector const &par, bool lower, bool log_p) const { return qnorm(p, MU(par), SIGMA(par), lower, log_p); } double DNorm::r(vector const &par) const { return rnorm(MU(par), SIGMA(par)); } double DNorm::mean(std::vector const &par) const { return MU(par); } double DNorm::var(std::vector const &par) const { return 1/TAU(par); }