Hello, I used optim to find the MLE estimates of some parameters. See the code below. It works for data1(x). but It did not work for data2 and the error says" L-BFGS-B needs finite values of 'fn' ". data2: c(x, 32) that is, if I added the number 32 at the end of data1. The error appears "non-finite function value" etc. Any comments or suggestions? Thanks! Wenhao ################################## x<-c(8, 11, 20, 15, 21, 16, 19, 15, 19, 17, 14, 8, 20, 7, 20, 25, 4, 17, 10, 28, 14, 13, 6, 109, 11, 29, 14, 17, 43, 75, 7, 19, 14, 12, 16, 3, 42, 40, 15,42,31,33,52, 45, 46,54) n<-length(x) j<-1 int<-numeric(n) log.lik<-function(theta,x){ repeat{ integrand<-function(t,theta){ ((2*pnorm(x[j]*t)-1)^(theta[1]-1))*((1-(pnorm(x[j]*t)))^(theta[2]-1))*(dnorm(x[j]*t))*(t^theta[4]) } int[j]<-integrate(integrand, lower=0,upper=1/theta[3],theta=theta)$val j<-j+1 if(j>length(x)) break } -length(x)*(log((2^theta[2]*theta[3]^theta[4]*theta[4]/(beta(theta[1],theta[2])))))-sum(log(int)) } aaa<-optim(c(2,2,10,5),method="L-BFGS-B",fn=log.lik,lower=c(1,1,1,1), hessian=T,x=x, control=list(trace=T)) [[alternative HTML version deleted]]
When I run your problem in optimx (with all.methods=TRUE), L-BFGS-B fails because the function is evaluated out of range. optimx (actually the optfntools package) from R-forge can trap these, and it is usually a good idea to stop and figure out what is going on. Nevertheless, it seems a solution can be found by other methods, and even by L-BFGS-B if one is prepared to ignore these "glitches". A big +++ for including an executable example. Of course, I would not have answered otherwise. Note that the optimx and optfntools on R-forge are at the moment undergoing a lot of review and change. Best, JN> Message: 4 > Date: Tue, 8 May 2012 14:35:10 -0500 > From: Wenhao Gui <guiwenhao at gmail.com> > To: r-help at r-project.org > Subject: [R] optim question > Message-ID: > <CABZdO=zKr1wsXmTOQ54UieVQfpkAx=CYT0dZiP7Yt1CjB6Exyg at mail.gmail.com> > Content-Type: text/plain > > Hello, > > I used optim to find the MLE estimates of some parameters. See the code > below. It works for data1(x). but It did not work for data2 and the error > says" L-BFGS-B needs finite values of 'fn' ". > > data2: c(x, 32) that is, if I added the number 32 at the end of data1. > The error appears "non-finite function value" etc. > > Any comments or suggestions? > > Thanks! > > Wenhao >