[R] nlminb supplying NaN parameters to objective function

Prof J C Nash (U30A) nashjc at uottawa.ca
Fri May 8 23:16:42 CEST 2015


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)"
>>



More information about the R-help mailing list