#include <config.h>
#include <functions/Phi.h>
#include <sarray/SArray.h>
#include <Rmath.h>
using std::vector;
Phi::Phi ():InverseLinkFunc ("phi", "probit")
{
}
double Phi::eval (vector <SArray const *> const &args) const
{
double q = *(args[0]->value ());
if (!R_FINITE (q)) {
return q > 0 ? 1 : 0;
}
double p = pnorm5 (q, 0, 1, 0, 0);
if (p == 0)
return DBL_EPSILON;
else if (p == 1)
return 1 - DBL_EPSILON;
else
return p;
}
double Phi::link(double mu) const
{
return pnorm (mu, 0, 1, 0, 0);
}
double Phi::gradLink(double mu) const
{
return dnorm (mu, 0, 1, 0);
}
syntax highlighted by Code2HTML, v. 0.9.1