[R] Help MLE

Ben Bolker bolker at ufl.edu
Fri Oct 10 00:15:33 CEST 2008


LFRC <feliperiehs <at> yahoo.com.br> writes:

> 
> 
> Dear, 
> 
> I'm starting on R language. I would like some help to implement a MLE
> function.
> 
> I wish to obtain the variables values (alpha12, w_g12, w_u12) that maximize
> the function LL = Y*ln(alpha12 + g*w_g12 + u*w_u12).
> 


  You're running into a problem because your linear combination
goes negative in the course of the optimization, which makes
the logarithm NaN, which crashes the optimizer.  The quick
hack would be to calculate the linear combination and then
set it to max(value,some_small_positive_number) -- this will
(probably) work if the solution is not on the boundary.
Alternatively you can use constrOptim (see below),
because you need to impose a linear inequality constraint.

 rm(list=ls())   
 ls()
 library(stats4)

Model = function(alpha12,w_g12,w_u12)
  {
    Y = 1
    u = 0.5
    g = -1
    comb = alpha12 + g*w_g12 + u*w_u12
    r = Y*log(comb)
    cat(alpha12,w_g12,w_u12,comb,log(comb),r,"\n") ## debug
    r
  }

res = mle(minuslog=Model,start=list(alpha12=0.1,w_u12=0.1,w_g12=0.1),
  method = "BFGS")

model2 <- function(p) {
  do.call("Model",as.list(p))
}

constrOptim(theta=c(0.1,0.1,0.1),f=model2,
            grad=NULL,
            ui = c(1,-1,0.5),
            ci = rep(0,3))
            

  Ben Bolker



More information about the R-help mailing list