Also I have this problem that many times the method converges to a local maximum...if I run it a few times, I often get the expected answer.
Is there any way to fix this problem by changing the convergence conditions? I have tried changing the nls.control {stats} but hasn't helped much. Any suggestions? On Tue, Sep 20, 2011 at 5:59 PM, Diviya Smith <diviya.sm...@gmail.com>wrote: > I dont think *r* is related to the problem. I am not trying to estimate *r > * and so basically I am giving the model the correct value of *r* and so > log(1-r) should not go to infinity. > > For test data, I generate data from the same model and add noise (using *r > norm*), with the following parameters - > A <- 20 > > B <- 500 > > r <- 0.6881 > > d <- (1:1000)/1000 > > y > <- > (rnorm(d)*0.005)+(((log(1-r))*exp(-A*d)*(-1+r+exp(d*(A-B)))/(r*(-A*+d*B+log(1-r))))) > > And then I try estimating A, B and C (Note: C is capturing the noise term, > and I am specifying r and d) but I get the following error - > Error in numericDeriv(form[[3L]], names(ind), env) : > Missing value or an infinity produced when evaluating the model > > Any suggestions how to fix this? > > Diviya > > > On Tue, Sep 20, 2011 at 2:37 PM, Jean V Adams <jvad...@usgs.gov> wrote: > >> >> Diviya Smith wrote on 09/20/2011 01:03:22 PM: >> >> > >> > Hello there, >> > >> > I am using NLS for fitting a complex model to some data to estimate a >> couple >> > of the missing parameters. The model is - >> > y ~ >> (C+((log(1-r))*exp(-A*d)*(-1+r+exp(d*(A-B)))/(r*(-A*d+d*B+log(1-r))))) >> > where A, B and C are unknown. >> > >> > In order to test the model, I generate data by setting values for all >> > parameters and add some noise (C). >> > >> > A <- 20 >> > B <- 500 >> > r <- 0.6881 >> > d <- (1:1000)/1000 >> > y ~ >> > (rnorm(d)*0.005)+(((log(1-r))*exp(-A*d)*(-1+r+exp(d*(A-B)))/(r*(-A*d >> > +d*B+log(1-r))))) >> > >> > I use Deoptim package to pick the optimum starting values. The model >> works >> > fine in most cases, but every now and again, I get the following error - >> > Error in numericDeriv(form[[3L]], names(ind), env) : >> > Missing value or an infinity produced when evaluating the model >> > >> > Any suggestions on how I can resolve this? Can you suggest a better way >> for >> > picking the starting parameters? >> > >> > Thanks, >> > Diviya >> >> >> I'm not sure if this is the problem, but if r grows greater than 1, >> log(1-r) will be undefined, and you'll get an error. You can impose a >> constraint on r by rewriting your formula in terms of a variable that can >> take on any real value: >> R = log(1-r) >> >> So, >> replace log(1-r) in your formula with R, >> replace (-1 + r) with -exp(R), and >> replace r with 1 - exp(R): >> y ~ (C+(R*exp(-A*d)*(-exp(R)+exp(d*(A-B)))/((1 - exp(R))*(-A*d+d*B+R)))) >> >> If that doesn't fix the problem, then you are likely getting infinite >> values as result of large numbers in your exponents. Without example data >> to work through, I can only speculate. >> >> Jean > > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.