# What is an appropriate method for providing bounds when performing maximum likelihood parameter estimation?

I have successfully implemented a maximum likelihood estimation of model parameters with bounds by creating a likelihood function that returns NA or Inf values when the function is out of bounds. I optimize the function using optim in R.

detailed example available on github

Quick example:

likelihood.fun<-function(par, ...){

likelihood<- -sum(dnorm(..., log=T))

if(any(c(par<0,
par>5,
par>5,
par<0)){likelihood<-NA}

return(likelihood)

}


Is this equivalent to box optimization or deprecated compare to box optimization?

If this is not equivalent:

How can I implement this using

optim(..., method="L-BFGS-B", lower=c(...), upper=c(...))

from example, this does not seem to work:
optim(..., method="L-BFGS-B", lower=c(0,0), upper=c(5,5))


or

constrOptim()


This is linked to this question on constrOptim.

What you are doing in your first code block is indeed equivalent to box-constrained optimisation. Here's some sample code, with some unnecessary output removed to save space:

> foo.unconstr <- function(par, x) -sum(dnorm(x, par, par, log=TRUE))
>
> foo.constr <- function(par, x)
+ {
+   ll <- NA
+   if (par > 0 && par < 5 && par > 0 && par < 5)
+   {
+     ll <- -sum(dnorm(x, par, par, log=TRUE))
+   }
+   ll
+ }
>
> x <- rnorm(100,1,1)
> par <- c(1,1)
> optim(par, foo.constr, x=x)
$par  1.147690 1.077712$value
 149.3724

>
> par <- c(1,1)
> optim(par, foo.unconstr, lower=c(0,0), upper=c(5,5), method="L-BFGS-B", x=x)
$par  1.147652 1.077654$value
 149.3724


They won't give quite the same answers, because they are different algorithms.

I'll answer your constrOptim question over there, so other people who might be interested will see it.

• Do you get the same answer if you use the same algorithm (ie. use "L-BFGS-B" with -Inf and Inf bounds)? Apr 25, 2012 at 21:14
• I admit I haven't run it, but I'd expect to get the same answer for the example case, since there is a single, global, max to the log likelihood function for this problem. The bounds are only there for show, as it were. Apr 25, 2012 at 22:23