Skip to content

MAXIMIZATION WITH CONSTRAINTS

2 messages · miri.dago at virgilio.it, Thomas Lumley

#
Dear R users, 
I?m a graduate students and in my master thesis I  must 
obtain the values of the parameters x_i which maximize this  
Multinomial log?likelihood function
log(n!)-sum_{i=1]^4 log(n_i!)+sum_
{i=1}^4 n_i log(x_i)

under the following constraints:
a) sum_i x_i=1, 
x_i>=0, 
b) x_1<=x_2+x_3+x_4
c)x_2<=x_3+x_4
I have been using the 
?ConstrOptim? R-function with the instructions I report below, and I 
have tried to implement them with different values of ?n?. BUT I have 
encountered 2 problems:

1) the result of the maximization is the same 
of the minimization, i.e. the maximum value of the   function is equal 
to the minimum (TOO OFTEN)
2) a lot of times the algorithm returns 
errors such as ?value out of range in 'gammafn'? 

In both cases 1) 2) 
I don?t know where is the problem, which is my mistake. Can you help 
me?! Do you know another way to solve my problem of maximization under 
constraints? 
THANKS!

My R instructions

n=c(10,20,3,5)
n1=n[1]
n2=n
[2]
n3=n[3]
n4=n[4]

logfr=function(x) { ##function to maximize 
x1= x
[1] 
x2= x[2] 
x3= x[3]
x4= x[4]
log(factorial(sum(n)))-sum(log
(factorial(n)))+sum(n*log(x)) 
} 
grr.log <- function(x) { ## Gradient 
of 'log fr'
x1=x[1] 
x2=x[2] 
x3=x[3]
x4=x[4]
return(n/x)
} 
par.start= 
c(.19999999,.15,.4,.25)
constr.coeff = rbind(diag(1,4,4),c(-1,1,1,1),c
(0,-1,1,1),c(-1,-1,-1,-1), c(1,1,1,1))
constr.tn= c(0,0,0,0,0,0,-1,.
9999999)
min= constrOptim(par.start, logfr, grr.log, ui=constr.coeff, 
ci=constr.tn)
max=constrOptim(par.start, logfr, grr.log, ui=constr.
coeff, ci=constr.tn, control=list(fnscale=-1))
#
On Fri, 8 Dec 2006, miri.dago at virgilio.it wrote:

            
The problem is that the first constraint is not an inequality but an 
equality. Writing it as two inequalities results in the feasible region 
for the optimization being a very narrow slice of four-dimensional space, 
which makes the optimization difficult.

There are at least two ways to fix the problem.  The first is to note that 
the loglikelihood is monotone in each x, so that sum_i x_i <=1 is 
sufficient when maximizing.  The second is to reparametrize in terms of 
three parameters.

Minimization is more challenging, because the loglikelihood does not have 
a minimum. It is negative infinite when any x_i is zero and the 
corresponding n is non-zero.

 	-thomas


My R instructions

n=c(10,20,3,5)
n1=n[1]
n2=n
[2]
n3=n[3]
n4=n[4]

logfr=function(x) { ##function to maximize 
x1= x
[1] 
x2= x[2] 
x3= x[3]
x4= x[4]
log(factorial(sum(n)))-sum(log
(factorial(n)))+sum(n*log(x)) 
} 
grr.log <- function(x) { ## Gradient 
of 'log fr'
x1=x[1] 
x2=x[2] 
x3=x[3]
x4=x[4]
return(n/x)
} 
par.start= 
c(.19999999,.15,.4,.25)
constr.coeff = rbind(diag(1,4,4),c(-1,1,1,1),c
(0,-1,1,1),c(-1,-1,-1,-1), c(1,1,1,1))
constr.tn= c(0,0,0,0,0,0,-1,.
9999999)
min= constrOptim(par.start, logfr, grr.log, ui=constr.coeff, 
ci=constr.tn)
max=constrOptim(par.start, logfr, grr.log, ui=constr.
coeff, ci=constr.tn, control=list(fnscale=-1))

______________________________________________
R-help at stat.math.ethz.ch 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.

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle