[R] nlminb supplying NaN parameters to objective function

Jean Marchal jean.d.marchal at gmail.com
Fri May 8 23:29:03 CEST 2015


Prof. Nash,

awesome! This sounds promising.

Thank you for the explanation,

Jean

2015-05-08 14:16 GMT-07:00 Prof J C Nash (U30A) <nashjc at uottawa.ca>:

> Your problem is saying (on my machine) that it cannot compute the
> gradient. Since it does this numerically, my guess is that the step to
> evaluate the gradient violates the bounds and we get log(-something).
>
> I also get
>
> > Warning messages:
> > 1: In dnbinom(x = dummyData[, "Y"], mu = mu, size =
> params[length(params)],  :
> >   NaNs produced
> > 2: In nlminb(start = sv, objective = nLL, lower = 0, upper = Inf,
> control = list(trace = TRUE)) :
> >   NA/NaN function evaluation
> > 3: In dnbinom(x = dummyData[, "Y"], mu = mu, size =
> params[length(params)],  :
> >   NaNs produced
> > 4: In nlminb(start = sv, objective = nLL, lower = 0, upper = Inf,
> control = list(trace = TRUE)) :
> >   NA/NaN function evaluation
>
>
>
> I put lower=0.01 and got convergence OK, but that may not be suitable,
> since all but one of the parameters are at that bound.
>
> > $par
> >  [1] 0.01000000 0.01000000 0.01000000 0.01000000 0.01000000 0.01000000
> >  [7] 0.01000000 0.01000000 0.01000000 0.01000000 0.01000000 0.01000000
> > [13] 0.09168027
> >
> > $objective
> > [1] 11879.51
> >
> > $convergence
> > [1] 0
> >
> > $iterations
> > [1] 8
> >
> > $evaluations
> > function gradient
> >       13      119
> >
> > $message
> > [1] "relative convergence (4)"
>
>
> As it turns out, Duncan Murdoch, Ben Bolker and I had a meeting
> yesterday to discuss improvements in optimization and nonlinear least
> squares and derivatives. One suggestion to be implemented is a wrapper
> for objective functions to reveal when bounds are violated. It will,
> however, take a little time for me to get that organized.
>
> FYI, without the reproducible example, you would not have received this
> attempt to explain things. Thanks.
>
> JN
>
>
>
> > A follow-up to my yesterday's email.
> >
> > I was able to make a reproducible example. All you will have to do is
> > load the .RData file that you can download here:
> >
> https://drive.google.com/file/d/0B0DKwRjF11x4dG1uRWhwb1pfQ2s/view?usp=sharing
> >
> > and run this line of code:
> >
> > nlminb(start=sv, objective = nLL, lower = 0, upper = Inf,
> > control=list(trace=TRUE))
> >
> > which output the following:
> >
> >   0:     12523.401: 0.0328502 0.0744493 0.00205298 0.0248628 0.0881807
> > 0.0148887 0.0244485 0.0385922 0.0714495 0.0161784 0.0617551 0.0244901
> > 0.0784038
> >   1:     12421.888: 0.0282245 0.0697934  0.00000 0.0199076 0.0833634
> > 0.0101135 0.0189494 0.0336236 0.0712130 0.0160687 0.0616015 0.0244689
> > 0.0660129
> >   2:     12050.535: 0.00371847 0.0451786  0.00000  0.00000 0.0575667
> > 0.00000  0.00000 0.00697067 0.0697205 0.0156250 0.0608550 0.0243431
> > 0.0994355
> >   3:     12037.682: 0.00303460 0.0445012  0.00000  0.00000 0.0568530
> > 0.00000  0.00000 0.00636016 0.0696959 0.0156250 0.0608550 0.0243419
> > 0.0988824
> >   4:     12012.684: 0.00164710 0.0431313  0.00000  0.00000 0.0554032
> > 0.00000  0.00000 0.00515500 0.0696451 0.0156250 0.0608550 0.0243395
> > 0.0978328
> >   5:     12003.017: 0.00107848 0.0425739  0.00000  0.00000 0.0548073
> > 0.00000  0.00000 0.00469592 0.0696233 0.0156250 0.0608550 0.0243386
> > 0.0974616
> >   6:     11984.372:  0.00000 0.0414397  0.00000  0.00000 0.0535899
> > 0.00000  0.00000 0.00378996 0.0695782 0.0156250 0.0608550 0.0243370
> > 0.0967449
> >   7:     11978.154:  0.00000 0.0409106  0.00000  0.00000 0.0530158
> > 0.00000  0.00000 0.00340746 0.0695560 0.0156250 0.0608550 0.0243363
> > 0.0964537
> >   8:    -0.0000000:  0.00000      nan  0.00000  0.00000      nan
> > 0.00000  0.00000      nan      nan      nan      nan      nan      nan
> >
> > Regards,
> >
> > Jean
> >
> > 2015-05-06 17:43 GMT-07:00 Jean Marchal <jean.d.marchal at gmail.com>:
> >> Dear list,
> >>
> >> I am doing some maximum likelihood estimation using nlminb() with
> >> box-constraints to ensure that all parameters are positive. However,
> >> nlminb() is behaving strangely and seems to supply NaN as parameters
> >> to my objective function (confirmed using browser()) and output the
> >> following:
> >>
> >> $par
> >>  [1] NaN NaN NaN   0 NaN   0 NaN NaN NaN NaN NaN NaN NaN
> >>
> >> $objective
> >> [1] 0
> >>
> >> $convergence
> >> [1] 1
> >>
> >> $iterations
> >> [1] 19
> >>
> >> $evaluations
> >> function gradient
> >>       87      542
> >>
> >> $message
> >> [1] "gr cannot be computed at initial par (65)"
> >>
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list