Hi, R guys: I'm using L-BFGS-B method of optim for minimization problem. My function called besselI function which need non-negative parameter and the besselI will overflow if the parameter is too large. So I set the constraint box which is reasonable for my problem. But the point outside the box was test, and I got error. My program and the error follows. This program depends on CircStats package.
Anyone has any idea about this? Thanks in advance. Li #################### source code ################################### Dk2<- function(pars,theta) { kappa<- pars[1]; mu<- pars[2]; IoK<- besselI(kappa, nu=0); res<- besselI(2*kappa, nu=0)/2/IoK^2 - mean(exp(kappa*cos(theta-mu)))/IoK; if(is.na(res)||is.infinite(res)){ print(pars); # assign("Theta", theta, env=.GlobalEnv); } return(res); } mse.Dk2<- function(pars, s, n) { sum.est <- SSE <- numeric(2); j<- 0; while(j<=n){ theta<- rvm(s, pi, k=pars[1]) - pi; est<- optim(par=pars, fn=Dk2, lower=c(0.001, -pi), upper=c(10, pi), method="L-BFGS-B", theta=theta); i<- 0; while(est$convergence!=0 && i< 30){ est<- optim(par=est$par, fn=Dk2, lower=c(0.001, -pi), upper=c(10, pi), method="L-BFGS-B", theta=theta); i<- i+1; } if(est$convergence!=0) { #print(j); next; } else { j<- j+1; } #est<- nlm(p=pars, f=Dk2, theta=theta); mu.hat<- est$par[2]; while(mu.hat< -pi) mu.hat<- mu.hat + 2*pi; while(mu.hat > pi) mu.hat<- mu.hat -2*pi; est<- c(est$par[1], mu.hat); sum.est <- sum.est + est; SSE <- SSE + (est - pars)^2; } Est <- sum.est/n; Bias<- Est - pars; MSE<- SSE/n; res<- c(Kappa=pars[1], Kappa.hat= Est[1], Kappa.Bias=Bias[1], Kappa.MSE=MSE[1], Mu.hat=Est[2], Mu.MSE=MSE[2]) return(res); } kappas <- c(0.01, 0.05, 0.1, 0.20, 0.5, 1, 2, 5); N<- 10000; for ( s in c(5, 10, 20, 30, 50)){ cat("\nSample size = ", s); cat("\n=====================================\n"); res<- NULL; for(i in 1:8){ res<- rbind(res, mse.Dk2(c(kappas[i], 0), s, N)); } print(round(res,4)); } #Error message. -32.7 is far lower then the lower limit 0.001. Sample size = 5 ===================================== [1] -32.736857 -3.141593 Error in optim(par = pars, fn = Dk2, lower = c(0.001, -pi), upper = c(10, : L-BFGS-B needs finite values of fn In addition: Warning messages: 1: NaNs produced in: besselI(x, nu, 1 + as.logical(expon.scaled)) 2: NaNs produced in: besselI(x, nu, 1 + as.logical(expon.scaled)) ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help