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