Search code examples
rmathematical-optimization

Multi-parameter optimization in R


I'm trying to estimate parameters that will maximize the likelihood of a certain event. My objective function looks like that:

event_prob = function(p1, p2) {
  x = ((1-p1-p2)^4)^67 *
    ((1-p1-p2)^3*p2)^5 *
    ((1-p1-p2)^3*p1)^2 *
    ((1-p1-p2)^2*p1*p2)^3 *
    ((1-p1-p2)^2*p1^2) *
    ((1-p1-p2)*p1^2*p2)^2 *
    (p1^3*p2) *
    (p1^4)
  return(x)
}

In this case, I'm looking for p1 and p2 [0,1] that will maximize this function. I tried using optim() in the following manner:

aaa = optim(c(0,0),event_prob)

but I'm getting an error "Error in fn(par, ...) : argument "p2" is missing, with no default". Am I using optim() wrong? Or is there a different function (package?) I should be using for multi-parameter optimization?


Solution

  • Based on Erwin Kalvelagen's comment: Redefine your function event_prob:

    event_prob = function(p) {
      p1 = p[1]
      p2 = p[2]
      x = ((1-p1-p2)^4)^67 *
        ((1-p1-p2)^3*p2)^5 *
        ((1-p1-p2)^3*p1)^2 *
        ((1-p1-p2)^2*p1*p2)^3 *
        ((1-p1-p2)^2*p1^2) *
        ((1-p1-p2)*p1^2*p2)^2 *
        (p1^3*p2) *
        (p1^4)
      return(x)
    }
    

    You may want to set limits to ensure that p1 and p2 fulfill your constraints:

    optim(c(0.5,0.5),event_prob,method="L-BFGS-B",lower=0,upper=1)