> On Feb 12, 2016, at 10:33 AM, Jacob Wegelin <jacobwege...@fastmail.fm> wrote:
> 
> To check that a regression object comes from logistic regression, I employ 
> the following two lines:
> 
>       stopifnot(glmObject$family$family=="binomial")
> 
>       stopifnot(glmObject$family$link=="logit")
> 
> For instance:
> 
> toyfunction<-function(glmObject) {
>       stopifnot(inherits(glmObject, "glm"))
>       stopifnot(glmObject$family$family=="binomial")
>       stopifnot(glmObject$family$link=="logit")
>       cat("okay, I guess\n")
>       glmObject
> }
> 
> mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv";)
> 
> someobject<- glm(admit~gre+gpa, data=mydata)
> 
> toyfunction(someobject)
> 
> someobject<- glm(admit~gre+gpa, data=mydata, family="binomial")
> 
> toyfunction(someobject)
> 
> But Doug Bates once stated that it's preferable to use extractor functions 
> (and perhaps other ready-made functions?) rather than "deconstructing" an 
> object (his term), as I do here.
> 
> Accordingly, is there a smarter way to perform the check that I perform 
> inside toyfunction?
> 
> Thanks for any insight
> 
> Jacob A. Wegelin


Hi Jacob,

The rationale behind Doug's comment is that if there is a pre-existing 
extractor function, you are at less risk due to future possible changes in the 
underlying object structure, than if you try to access an object element 
directly. 

If the underlying object structure should change in the future, you never know 
what result you might get by accessing the element directly, if you get one at 
all. 

If you use the extractor function, that would be (or should be) modified to 
reflect the change in the underlying object.

For your examples above, ?family should work, but returns more than just the 
'family' and 'link' components, which print.family() displays:

someobject<- glm(admit~gre+gpa, data=mydata)
> family(someobject)

Family: gaussian 
Link function: identity 


someobject<- glm(admit~gre+gpa, data=mydata, family="binomial")
> family(someobject)

Family: binomial 
Link function: logit 


So, you could feasibly use:

  family(someobject)$family
  family(someobject)$link

and so forth, to perform your checks. If you look at the output of 
str(family(someobject)), you will see the other elements contained.

Regards,

Marc Schwartz

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to