[R] problem using uniroot with integrate

Ken Knoblauch knoblauch at lyon.inserm.fr
Wed Mar 9 20:19:30 CET 2005


Thank you very much.  Yes, that was the problem, partial matching.  
I saw a warning about that in integrate and some discussion from 1999
in the archives and so added the m0 for integrate but somehow
I wasn't bright enough to see that I had the same problem
in uniroot.  

Sorry about no working example, but I'm not sure what I could
have added, if I understand what you mean by working example,
because my function wasn't working.

best,

ken


Quoting Sundar Dorai-Raj <sundar.dorai-raj at pdf.com>:

> 
> 
> Ken Knoblauch wrote on 3/9/2005 10:27 AM:
> > Hi, 
> > 
> > I'm trying to calculate the value of the variable, dp, below, in the
> > argument to the integral of dnorm(x-dp) * pnorm(x)^(m-1).  This
> > corresponds to the estimate of the sensitivity of an observer in an
> > m-alternative forced choice experiment, given the probability of
> > a correct response, Pc, a Gaussian assumption for the noise and
> > no bias.  The function that I wrote below gives me an error:
> > 
> > Error in f(x, ...) : recursive default argument reference
> > 
> > The problem seems to be at the statement using uniroot,
> > because the furntion est.dp works fine outside of the main function.
> > I've been using R for awhile but there are still many nuances
> > about the scoping and the use of environments that I'm weak on
> > and would like to understand better.  I would appreciate any
> > suggestions or solutions that anyone might offer for fixing
> > my error.  Thank you.
> > 
> > dprime.mAFC <- function(Pc, m) {
> > 		est.dp <- function(dp, Pc = Pc, m = m) {
> > 		
> > 		  pr <- function(x, dpt = dp, m0 = m) {
> > 		    	dnorm(x - dpt) * pnorm(x)^(m0 - 1)
> > 			    }
> > 		
> > 		  Pc - integrate(pr, lower = -Inf, upper = Inf, 
> > 		  dpt = dp, m0 = m)$value
> > 		}
> > 		
> > 	dp.res <- uniroot(est.dp, interval = c(0,5), Pc = Pc, m = m)
> > 	dp.res$root	
> > 	}
> > 
> 
> Ken,
> 
> Look at the argument list for ?uniroot and think "partial matching". 
> You're "m" is being interpretted for "maxiter". Simply change to
> 
> dp.res <- uniroot(est.dp, interval = c(0,5), Pc = Pc, m0 = m)
> 
> and in other places for consistency and the error goes away. Of course, 
> since you gave no working example, I'm not sure if other errors are 
> present that I'm missing.
> 
> --sundar
> 



____________________
Ken Knoblauch
Inserm U 371
Cerveau et Vision
18 avenue du Doyen Lepine
69675 Bron cedex
France
tel: +33 (0)4 72 91 34 77
fax: +33 (0)4 72 91 34 61
portable: 06 84 10 64 10




More information about the R-help mailing list