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 >