[R] Predictions with GAM

Simon Wood s.wood at bath.ac.uk
Sun Jan 18 19:39:13 CET 2009


Robbert,

On Friday 16 January 2009 14:30, Robbert Langenberg wrote:
> Thanks for the swift reply,
>
> I might have been a bit sloppy with describing my datasets and problem. I
> showed the first model as an example of the type of GAM that I had been
> able to use the predict function on. What I am looking for is how to
> predict my m3:
> model3<-gam(y_no~s(day,by=mapID),family=binomial, data=mergeday)
>
> When I plot this I get 8 different graphs. Each showing me a different
> habitat type with on the x-axis days and on the y-axis s(day,2,81):mapID.
> With predict I was hoping to get the scale of the y-axis right for a
> selection of days (for example 244,304).
>
> I have tried to reform the script you gave me to match my dataset in m3,
> but it all did not seem to work.
--- Can you explain how it didn't work? What exactly was wrong with what 
predict.gam gave you? [when I try predict.gam for a gam with factor by 
variables, I seem to get what I'd expect, so I need a bit more detail to 
figure out what the issue is.] 

-- incidentally, is there any reason for omitting the main effect of `mapID' 
from the model? I'd usually expect to see 
  y_no~s(day,by=mapID)+mapID
as the model formula in this sort of situation. (see ?gam.models for details)

best,
Simon


>
> newd2 <- data.frame(day = rep(seq(244, 304, length = 100), 8),
>                    mapID = rep(levels(mergeday$mapID), each = 100))
>
> newd2 <- data.frame(day = rep(seq(244, 304, length = 100), 8),
>                    mapID = rep(sort(unique(mergeday$mapID)),
>                                each = 100))
>
> I am guessing it must have something to do with the  by in s(day,by=mapID).
> I haven't come across any examples that used a GAM with by and then used
> the predict function.
>
> (A sample of the dataset:
>           mapID                  day   y_no
> Urban Areas and Water    25      1
> Urban Areas and Water    26      1
> Early Succesional Forest  27      0
> Agriculture                       28      0
> Early Succesional Forest  29      0
> Mature Coniferous Forest  30      0)
>
>
> I am sorry that I have to bother you even more with this, and I hope that
> my additional explanation about my problem might help solve it.
>
> Sincerely yours,
>
> Robbert Langenberg
>
> 2009/1/16 Gavin Simpson <gavin.simpson at ucl.ac.uk>
>
> > On Fri, 2009-01-16 at 12:36 +0100, Robbert Langenberg wrote:
> > > Dear,
> > >
> > > I am trying to get a prediction of my GAM on a response type. So that I
> > > eventually get plots with the correct values on my ylab.
> > > I have been able to get some of my GAM's working with the example shown
> > > below:
> > > *
> > > model1<-gam(nsdall ~ s(jdaylitr2), data=datansd)
> > > newd1 <- data.frame(jdaylitr2=(244:304))
> > > pred1 <- predict.gam(model1,newd1,type="response")*
> >
> > Hi Robert,
> >
> > You want predictions for the covariate over range 244:304 for each of
> > your 8 mapID's, yes?
> >
> > This is not tested, but why not something like:
> >
> > newd2 <- data.frame(jdaylitr2 = rep(seq(244, 304, length = 100), 8),
> >                    mapID = rep(levels(datansd$mapID), each = 100))
> >
> > Then use newd2 in your call to predict.
> >
> > I am assuming that datansd$mapID is a factor in the above. If it is just
> > some other indicator variable, then perhaps something like:
> >
> > newd2 <- data.frame(jdaylitr2 = rep(seq(244, 304, length = 100), 8),
> >                    mapID = rep(sort(unique(datansd$mapID)),
> >                                each = 100))
> >
> > Does that work for you?
> >
> > HTH
> >
> > G
> >
> > > The problem I am encountering now is that I cannot seem to get it done
> >
> > for
> >
> > > the following type of model:
> > >
> > > *model3<-gam(y_no~s(day,by=mapID),family=binomial, data=mergeday)*
> > >
> > > My mapID consists of 8 levels of which I get individual plots with *
> > > plot(model3)*. When I do predict with a newdata in it just like my
> > > first model I need all columns to have the same amount of rows or else
> > > R will
> >
> > not
> >
> > > except it ofcourse, the col.names need to at least include day and
> > > mapID. This way I can not get a prediction working for this GAM, I am
> > > confused because of this part in the model: *s(day,by=mapID).
> > >
> > > *I have been reading through the GAM, an introduction with R book from
> >
> > Wood,
> >
> > > S. but could not find anything about predictions with BY in the model.
> > >
> > > I hope someone can help me out with this,
> > >
> > > Sincerely yours,
> > >
> > > Robbert Langenberg
> > >
> > >       [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help at r-project.org mailing list
> > > 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.
> >
> > --
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> >  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
> >  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
> >  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
> >  Gower Street, London          [w]
> > http://www.ucl.ac.uk/~ucfagls/<http://www.ucl.ac.uk/%7Eucfagls/> UK. WC1E
> > 6BT.                 [w] http://www.freshwaters.org.uk
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

-- 
> Simon Wood, Mathematical Sciences, University of Bath, Bath, BA2 7AY UK
> +44 1225 386603  www.maths.bath.ac.uk/~sw283




More information about the R-help mailing list