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.

Reply via email to