Re: [R] passing formula arguments cv.glm

From: Adaikalavan Ramasamy <ramasamy_at_cancer.org.uk>
Date: Tue 26 Jul 2005 - 20:57:19 EST

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.

  1. 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.

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
> >
>



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 Tue Jul 26 21:01:03 2005

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