# [R] logistic regression

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Oct 11 17:01:00 CEST 2004

```On Mon, 11 Oct 2004, Heike Zimmermann wrote:

> Hello,
>
> I have a problem concerning logistic regressions.  When I add a quadratic
> term to my linear model, I cannot draw the line through my scatterplot
> anymore, which is no problem without the quadratic term.
> In this example my binary response variable is "incidence", the explanatory
> variable is "sun":
> > model0<-glm(incidence~1,binomial)
> > model1<-glm(incidence~sun,binomial)
> > anova(model0,model1,test="Chi")
> Analysis of Deviance Table
>
> Model 1: incidence ~ 1
> Model 2: incidence ~ sun
>   Resid. Df Resid. Dev  Df Deviance P(>|Chi|)
> 1       299     332.94
> 2       298     287.19   1    45.74 1.349e-11
> > qsun<-sun^2
> > model2<-glm(incidence~sun+qsun,binomial)
> > anova(model1,model2,test="Chi")
> Analysis of Deviance Table
>
> Model 1: incidence ~ sun
> Model 2: incidence ~ sun + qsun
>   Resid. Df Resid. Dev  Df Deviance P(>|Chi|)
> 1       298    287.194
> 2       297    280.623   1    6.571     0.010
>
> So the second, non-linear, model explains more than the first.
> Now to create a graph I write:
>
> > plot(sun,incidence)
> > min(sun)
> [1] 0
> > max(sun)
> [1] 90
> > xsun<-seq(0,90,1)
>
> >lines(xsun,predict(model2,type="response",data.frame(sun=xsun)))

Why are you predicting using a new data frame containing just one of the
two predictors?

>
> Error in model.frame(formula, rownames, variables, varnames, extras,
> extranames,  :
>         variable lengths differ
> >
>
> So this is the message I receive everytime I try to draw the fitted values
> of my model. I know for sure that exactly the same command works in S-Plus
> (with the same data).

If so, you have been trapped by a bug in S-PLUS, for you have at no point
supplied the quadratic term needed for prediction.  I suspect more likely
that the command is accepted but gives incorrect answers.  See the
warnings in MASS, for example.

> How is ist possible to do this in R?

NB: note the use of spaces for readability.

mydata <- data.frame(sun)
model2 <- glm(incidence ~ sun + I(sun^2), binomial, data=mydata)
plot(sun, incidence)
lines(xsun, predict(model2, type="response", data.frame(sun=0:90)))

PLEASE use a meaningful subject line.

--
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

```