[R] problem using uniroot with integrate

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Wed Mar 9 18:57:33 CET 2005



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




More information about the R-help mailing list