[Rd] predict.glm(..., type="response") loses names (was RE: [R] A sugg estion for predict function(s))

Liaw, Andy andy_liaw at merck.com
Thu Apr 14 03:46:28 CEST 2005


> From: Ross Darnell 
> 
> Liaw, Andy wrote:
> >>From: Liaw, Andy
> >>
> >>
> >>>From: Ross Darnell 
> >>>
> >>>A good point but what is the value of storing a large set of 
> >>>predicted 
> >>>values when the values of the explanatory variables are lost 
> >>>(predicted 
> >>>values of what?). I thought the purpose of objects was that 
> >>
> >>they were 
> >>
> >>>self explanatory (pardon the pun).
> >>>
> >>>Maybe we could make it optional.
> >>
> >>If what you are looking for is a way to track the 
> >>observations, I'd suggest
> >>simply adding rownames of newdata as names of the predicted 
> >>values.  Storing
> >>names is much cheaper than the entire data frame of 
> >>predictors.  (And in R,
> >>data frames _must_ have unique row names.)
> > 
> > 
> > And as a matter of fact, predict.lm() and predict.glm() 
> > (and probably most other predict() methods) already do 
> > that.
> > 
> > Andy
> > 
> > 
> >>Cheers,
> >>Andy
> >> 
> >>
> >>>Ross Darnell
> >>>-- 
> >>>Email: <r.darnell at uq.edu.au>
> >>>
> Hi Andy
> 
> Where?
> 
> Try predict.glm example
>       ## example from Venables and Ripley (2002, pp. 190-2.)
>       ldose <- rep(0:5, 2)
>       numdead <- c(1, 4, 9, 13, 18, 20, 0, 2, 6, 10, 12, 16)
>       sex <- factor(rep(c("M", "F"), c(6, 6)))
>       SF <- cbind(numdead, numalive=20-numdead)
>       budworm.lg <- glm(SF ~ sex*ldose, family=binomial)
>       ld <- seq(0, 5, 0.1)
>       row.names(predict(budworm.lg, data.frame(ldose=ld,
>          sex=factor(rep("M", length(ld)), levels=levels(sex))),
>          type = "response"))

[You'd want names() rather than row.names(), since predict() 
in this case returns a vector.]
 
I don't know if this is intended (and if it is, I don't 
understand why):  the names are missing only for 
type="response".  For the other types, the names are 
there.  The problem seems to be the order of arguments
in pmin() inside make.link():

            eta <- pmin(thresh, pmax(eta, -thresh))

which should probably be:

            eta <- pmin(pmax(eta, -thresh), thresh)

This is because pmin/pmax preserve the names of it's first 
argument, not the second.

There are quite a few other places in make.link() like
this.  Question to R Core:  Would such fixes be considered
`trivial' enough to make it into R-2.1.0?

Andy 


 
> I'm using
> 
>  > version
>           _
> platform i386-pc-mingw32
> arch     i386
> os       mingw32
> system   i386, mingw32
> status
> major    2
> minor    0.1
> year     2004
> month    11
> day      15
> language R
>  >
> 
> What have I done wrong? I didn't send this to the R list to avoid 
> embarrassing myself.
> 
> Cheers
> 
> Ross Darnell
> -- 
> Email: <r.darnell at uq.edu.au>
> 
> 
>



More information about the R-devel mailing list