Re: [R] passing formula arguments cv.glm

From: Adaikalavan Ramasamy <ramasamy_at_cancer.org.uk>
Date: Wed 27 Jul 2005 - 01:01:35 EST

It works ! Thank you very much.

Can I request this fix in the next version of boot package please if it is likely not to break compatibility with other functions. The modified cv.glm function can be found at www.cbrg.ox.ac.uk/~ramasamy/cv.glm2.R

Thank you again.

Regards, Adai

On Tue, 2005-07-26 at 13:06 +0100, Prof Brian Ripley wrote:
> On Tue, 26 Jul 2005, Adaikalavan Ramasamy wrote:
>
> > Dear Prof. Ripley,
> >
> > Thank you for your response. See below for my comments.
> >
> >
> > On Tue, 2005-07-26 at 10:57 +0100, Prof Brian Ripley wrote:
> >> Adai,
> >
> >> using traceback() helps, as does giving a reproducible example when
> >> reporting a problem.
> >
> > You are right. The traceback below indicates that your guess is correct.
> >
> > 10: model.frame(formula = formu, data = data[j.in, , drop = FALSE],
> > drop.unused.levels = TRUE)
> >
> >
> > The example is actually reproducible but you need the load the boot
> > package first (which I failed to mention).
> >
> >> However, the problem is I think the line
> >>
> >> d.glm <- update(glmfit, data = data[j.in, , drop = FALSE])
> >>
> >> in cv.glm. I think that should be
> >>
> >> d.glm <- eval.parent(update(glmfit,
> >> data = data[j.in, , drop = FALSE], evaluate = FALSE))
> >>
> >> as in add.default and many other places.
> >>
> >> Could you please confirm that is the cause?
> >
> > I believe this is the cause but the fix may need bit more tweaking. I
> > get the following error message with your fix.
> >
> > Error in "[.data.frame"(data, j.in, , drop = FALSE) :
> > Object "j.in" not found
> >
> > The traceback gives the final same output as original one but this is
> > numbered at 12 instead. Could it be because "j.in" is created within the
> > for() loop environment ? I do not know how to fix this and would
> > appreciate any help.
>
> Ah, that needs a different fix, namely
>
> Call <- glmfit$call
> Call$data <- data[j.in, , drop=FALSE]
> d.glm <- eval.parent(Call)
>
> which works for me when I modify your script accordingly. (You can take
> the first line outside the loop, for tidiness.)
>
>
> > For your convenience, you can find the script with your current fix at
> > the following URL www.cbrg.ox.ac.uk/~ramasamy/cv.glm2.R
> >
> > Thank you very much. Much appreciated.
> >
> > Regards, Adai
> >
> >
> >> Brian
> >>
> >> On Mon, 25 Jul 2005, Adaikalavan Ramasamy wrote:
> >>
> >>> I am trying to write a wrapper for the last example in help(cv.glm) that
> >>> deals with leave-one-out-cross-validation (LOOCV) for a logistic model.
> >>> This wrapper will be used as part of a bigger program.
> >>>
> >>> Here is my wrapper funtion :
> >>>
> >>> logistic.LOOCV.err <- function( formu=NULL, data=NULL ){
> >>>
> >>> cost.fn <- function(cl, pred) mean( abs(cl-pred) > 0.5 )
> >>>
> >>> glmfit <- glm( formula=formu, data=data, family="binomial" )
> >>> print("glmfit is OK")
> >>>
> >>> err <- cv.glm( data=data, glmfit=glmfit,
> >>> cost=cost.fn, K=nrow(data) )$delta[2]
> >>> print("cv.glm OK")
> >>> }
> >>>
> >>>
> >>> When I run the above function line by line with the arguments from
> >>> below, it works fine. But when I call it as function, I get this :
> >>>
> >>> rm( glmfit, formu, cv.err ) # cleanup if required
> >>> logistic.LOOCV.err( formu=as.formula(r~stage+xray+acid), data=nodal )
> >>>
> >>> logistic.LOOCV.err( formu=as.formula(r~stage+xray+acid), data=nodal )
> >>> [1] "glmfit is OK"
> >>> Error in model.frame(formula = formu, data = data[j.in, , drop =
> >>> FALSE], :
> >>> Object "formu" not found
> >>>
> >>>
> >>> I think this has something to do with formula and environments but I do
> >>> not know enough to solve it myself. I searched the archive without much
> >>> help (perhaps I was using the wrong keywords).
> >>>
> >>> Any help would be very much appreciated. Thank you.
> >>>
> >>> Regards,
> >>> --
> >>> Adaikalavan Ramasamy ramasamy@cancer.org.uk
> >>> Centre for Statistics in Medicine http://www.ihs.ox.ac.uk/csm/
> >>> Wolfson College Annexe Tel : 01865 284 408
> >>> Linton Road, Oxford OX2 6UD Fax : 01865 284 424
> >>>
> >>> ______________________________________________
> >>> R-help@stat.math.ethz.ch mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-help
> >>> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> >>>
> >>
> >
> >
>
> --
> Brian D. Ripley, ripley@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
>



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Wed Jul 27 01:07:06 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:34:01 EST