35 virtual vec
link(
const vec &mu)
const {
return vec(1);}
36 virtual vec
linkinv(
const vec &eta)
const {
return vec(1);}
37 virtual vec
mu_eta(
const vec &eta)
const {
return vec(1);}
38 virtual vec
variance(
const vec &mu)
const {
return vec(1);}
43 virtual vec
dev_resids(
const vec &y,
const vec &mu,
const vec &weights)
const {
return vec(1);}
44 virtual vec
initialize(
const vec &y,
const vec &weights)
const {
return vec(1);}
46 virtual string family()
const {
return "GLMFamily";};
59 vec
link(
const vec &mu)
const {
66 return vec(eta.n_elem, fill::ones);
69 return vec(mu.n_elem, fill::ones);
71 vec
dev_resids(
const vec &y,
const vec &mu,
const vec &weights)
const {
73 return weights % square(y-mu);
75 vec
initialize(
const vec &y,
const vec &weights)
const {
79 string family()
const {
return "GaussianIdentity";}
91 vec
link(
const vec &mu)
const {
92 return log(mu / (1-mu));
95 return 1.0 / (1.0 + exp(-1.0*eta));
98 vec v = exp(-1.0*eta);
99 return v / square( 1.0 + v);
102 return mu % (1.0 - mu);
104 vec
dev_resids(
const vec &y,
const vec &mu,
const vec &weights)
const {
107 return 2.0 * weights % (y_log_y(y, mu) + y_log_y(1.0 - y, 1.0 - mu));
110 return (weights % y + 0.5)/(weights + 1.0);
113 string family()
const {
return "BinomialLogit";}
121 string family()
const {
return "QuasibinomialLogit";}
133 vec
link(
const vec &mu)
const {
140 return normcdf( clamp(eta, -thresh, thresh) );
144 return pmax(normpdf(eta), tol);
147 return mu % (1.0 - mu);
149 vec
dev_resids(
const vec &y,
const vec &mu,
const vec &weights)
const {
152 return 2.0 * weights % (y_log_y(y, mu) + y_log_y(1 - y, 1 - mu));
155 return (weights % y + 0.5)/(weights + 1.0);
158 string family()
const {
return "BinomialProbit";}
162 double tol = 2.220446e-16;
164 double thresh = 8.125891;
176 vec
link(
const vec &mu)
const {
181 return pmax(exp(eta), tol);
185 return pmax(exp(eta), tol);
190 vec
dev_resids(
const vec &y,
const vec &mu,
const vec &weights)
const {
196 vec res = mu % weights;
197 uvec idx = find(y > 0.0);
198 vec tmp = (weights % (y % log(y/mu) - (y - mu)));
199 res.elem(idx) = tmp.elem(idx);
207 string family()
const {
return "PoissonLog";}
211 double tol = 2.220446e-16;
239 vec
link(
const vec &mu)
const {
244 return pmax(exp(eta), tol);
248 return pmax(exp(eta), tol);
251 return mu + square(mu) /
theta;
253 vec
dev_resids(
const vec &y,
const vec &mu,
const vec &weights)
const {
256 return 2.0 * weights % (y % log(pmax(y, 1.0)/mu) - (y +
theta) % log((y +
theta)/(mu +
theta)));
260 return y + accu(y == 0) / 6.0;
270 double theta = std::numeric_limits<double>::quiet_NaN();
274 double tol = 2.220446e-16;
282static shared_ptr<GLMFamily> getGLMFamily(
const string &family){
284 shared_ptr<GLMFamily> fam;
286 if( family ==
"gaussian" || family ==
"gaussian/identity" ){
289 else if( family ==
"binomial/logit" ){
290 fam = shared_ptr<GLMFamily>(
new BinomialLogit());
292 else if( family ==
"binomial/probit" ){
295 else if( family ==
"poisson/log" ){
296 fam = shared_ptr<GLMFamily>(
new PoissonLog());
298 else if( family ==
"quasibinomial/logit" ){
301 else if( family ==
"quasipoisson/log" ){
304 else if( family ==
"nb" ){
305 fam = shared_ptr<GLMFamily>(
new NB());
307 else if( regex_search( family, regex(
"^nb:")) ){
308 string theta_str = regex_replace( family, regex(
"^nb:"),
"");
309 double theta = atof(theta_str.c_str());
310 fam = shared_ptr<GLMFamily>(
new NB(theta));
312 throw invalid_argument(
"Invalid GLM family: " + family );
320static bool isCountModel(
const string &family){
322 shared_ptr<GLMFamily> fam = getGLMFamily( family );
323 string famStr = fam->family();
326 if( famStr ==
"PoissonLog" ||
327 famStr ==
"QuasipoissonLog" ||
vec linkinv(const vec &eta) const
Definition glm_family.h:94
vec mu_eta(const vec &eta) const
Definition glm_family.h:97
vec variance(const vec &mu) const
Definition glm_family.h:101
vec link(const vec &mu) const
Definition glm_family.h:91
bool isCountModel() const
Definition glm_family.h:114
vec initialize(const vec &y, const vec &weights) const
Definition glm_family.h:109
vec dev_resids(const vec &y, const vec &mu, const vec &weights) const
Definition glm_family.h:104
string family() const
Definition glm_family.h:113
BinomialLogit()
Definition glm_family.h:87
bool estimateDispersion() const
Definition glm_family.h:112
~BinomialLogit()
Definition glm_family.h:89
Definition glm_family.h:126
vec mu_eta(const vec &eta) const
Definition glm_family.h:142
vec linkinv(const vec &eta) const
Definition glm_family.h:137
~BinomialProbit()
Definition glm_family.h:131
vec variance(const vec &mu) const
Definition glm_family.h:146
bool estimateDispersion() const
Definition glm_family.h:157
BinomialProbit()
Definition glm_family.h:129
vec dev_resids(const vec &y, const vec &mu, const vec &weights) const
Definition glm_family.h:149
bool isCountModel() const
Definition glm_family.h:159
vec link(const vec &mu) const
Definition glm_family.h:133
vec initialize(const vec &y, const vec &weights) const
Definition glm_family.h:154
string family() const
Definition glm_family.h:158
virtual vec mu_eta(const vec &eta) const
Definition glm_family.h:37
virtual bool estimateDispersion() const
Definition glm_family.h:45
virtual vec dev_resids(const vec &y, const vec &mu, const vec &weights) const
Definition glm_family.h:43
GLMFamily()
Definition glm_family.h:32
virtual vec initialize(const vec &y, const vec &weights) const
Definition glm_family.h:44
virtual bool isCountModel() const
Definition glm_family.h:47
virtual string family() const
Definition glm_family.h:46
virtual void setOverdispersion(const double &value)
Definition glm_family.h:48
virtual vec linkinv(const vec &eta) const
Definition glm_family.h:36
virtual vec link(const vec &mu) const
Definition glm_family.h:35
virtual vec variance(const vec &mu) const
Definition glm_family.h:38
virtual ~GLMFamily()
Definition glm_family.h:34
Definition glm_family.h:52
~GaussianIdentity()
Definition glm_family.h:57
GaussianIdentity()
Definition glm_family.h:55
vec dev_resids(const vec &y, const vec &mu, const vec &weights) const
Definition glm_family.h:71
bool isCountModel() const
Definition glm_family.h:80
bool estimateDispersion() const
Definition glm_family.h:78
vec mu_eta(const vec &eta) const
Definition glm_family.h:65
vec initialize(const vec &y, const vec &weights) const
Definition glm_family.h:75
vec variance(const vec &mu) const
Definition glm_family.h:68
vec link(const vec &mu) const
Definition glm_family.h:59
vec linkinv(const vec &eta) const
Definition glm_family.h:62
string family() const
Definition glm_family.h:79
Definition glm_family.h:221
NB()
Definition glm_family.h:224
vec initialize(const vec &y, const vec &weights) const
Definition glm_family.h:258
vec variance(const vec &mu) const
Definition glm_family.h:250
NB(const double &theta)
Definition glm_family.h:230
void setOverdispersion(const double &value)
Definition glm_family.h:266
bool ql_dispersion
Definition glm_family.h:271
vec link(const vec &mu) const
Definition glm_family.h:239
string family() const
Definition glm_family.h:263
bool estimateDispersion() const
Definition glm_family.h:262
~NB()
Definition glm_family.h:237
double theta
Definition glm_family.h:270
vec dev_resids(const vec &y, const vec &mu, const vec &weights) const
Definition glm_family.h:253
vec linkinv(const vec &eta) const
Definition glm_family.h:242
bool isCountModel() const
Definition glm_family.h:264
vec mu_eta(const vec &eta) const
Definition glm_family.h:246
Definition glm_family.h:169
bool estimateDispersion() const
Definition glm_family.h:206
vec initialize(const vec &y, const vec &weights) const
Definition glm_family.h:203
vec variance(const vec &mu) const
Definition glm_family.h:187
vec dev_resids(const vec &y, const vec &mu, const vec &weights) const
Definition glm_family.h:190
bool isCountModel() const
Definition glm_family.h:208
vec mu_eta(const vec &eta) const
Definition glm_family.h:183
vec link(const vec &mu) const
Definition glm_family.h:176
PoissonLog()
Definition glm_family.h:172
vec linkinv(const vec &eta) const
Definition glm_family.h:179
string family() const
Definition glm_family.h:207
~PoissonLog()
Definition glm_family.h:174
Definition glm_family.h:119
Definition glm_family.h:216
Definition CleanData.h:17