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 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.