[R] passing formula arguments cv.glm

Adaikalavan Ramasamy ramasamy at cancer.org.uk
Tue Jul 26 12:57:19 CEST 2005


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. 

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




More information about the R-help mailing list