I want to fit a linear model by R with family=binomial(link="identity"), however, binomial family do not have identity link. What should I do?

  • $\begingroup$ I think there's an underlying statistical issue here. $\endgroup$ – Glen_b Mar 2 '15 at 5:00
  • $\begingroup$ yes, the following question will ask about Adjust the standard error for overdispersion. $\endgroup$ – david Mar 2 '15 at 5:20
  • $\begingroup$ But for the first one, I need use the identity link in the binomial family, but R does not permit it. $\endgroup$ – david Mar 2 '15 at 5:22
  • 1
    $\begingroup$ Note that if you need to both deal with overdispersion and use an identity link you should consider going directly to a quasi- model with binomial variance function. An intercept-only binomial model can be fitted by hand. $\endgroup$ – Glen_b Mar 2 '15 at 5:26
  • 2
    $\begingroup$ (And if you wanted the dispersion parameter fixed at one: family=binomial(link=make.link("identity")). $\endgroup$ – Scortchi - Reinstate Monica Mar 2 '15 at 10:57

See Wikipedia on the linear probability model, & CV posts here & here for the statistical background. Though not "wrong", you'd want a good reason for using an identity link to model a Bernoulli probability.

According to the family manual

the binomial family [accepts] the links logit, probit, cauchit, (corresponding to logistic, normal and Cauchy CDFs respectively) log and cloglog (complementary log-log)


The link and variance arguments have rather awkward semantics for back-compatibility. The recommended way is to supply them is as quoted character strings, but they can also be supplied unquoted (as names or expressions). In addition, they can also be supplied as a length-one character vector giving the name of one of the options, or as a list (for link, of class "link-glm"). The restrictions apply only to links given as names: when given as a character string all the links known to make.link are accepted.

So family=binomial(link="identity") works but family=binomial(link=identity) doesn't. (If you find differently it might be to do with the R version.) To allow for over-dispersion, then usefamily=quasi(link="identity", variance = "mu(1-mu)").

| cite | improve this answer | |
  • $\begingroup$ the link="identity" vs. link=identity fix was a huge help. This is a workout in Agresti's CDA textbook. The code he provides is the quasi(link...) you discuss, however the simplicity of adding " " is elegant fix. To my understanding the link="identity" call represents the binomial as a linear model. $\endgroup$ – Justin Peterson Oct 3 '15 at 17:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.