[R] linear constraint optim with bounds/reparametrization
spencer.graves at pdf.com
Tue Aug 10 12:25:22 CEST 2004
If A%*%theta>c, then log(c-A%*%theta) returns NA. if A%*%theta<c, log(A%*%theta-c) returns NA. Only when A%*%theta==c do you get a "number" from log(A%*%theta-c), and that's (-Inf).
However, for an equality constraint, I've had good luck by with an objective function that adds something like the following to my objective function:
where "constraintViolationPenalty" is passed via "..." in a call to optim. If I want only (A%*%theta>=c), then I might write this as follows:
This term is everywhere differentiable and is 0 when the
constraint is satisfied.
I may first run optim with a modest value for
constraintViolationPenalty then restart it with the output of the
initial run as starting values and with a larger value for
hope this helps. spencer graves
Ingmar Visser wrote:
>On 8/9/04 4:52 PM, "Thomas Lumley" <tlumley at u.washington.edu> wrote:
>>On Mon, 9 Aug 2004, Kahra Hannu wrote:
>>>>1) constrOptim does not work in this case because it only fits inequality
>>>>constraints, ie A%*%theta > = c
>>> --- I was struggling with the same problem a
>>>few weeks ago in the portfolio optimization context. You can impose
>>>equality constraints by using inequality constraints >= and <=
>>>simultaneously. See the example bellow.
>>Ick. You do not want to use constrOptim for equality constraints.
>>constrOptim is a log-barrier interior-point method, meaning that it adds
>>a multiple of log(A%*%theta-c) to the objective function. This is a really
>>bad idea as a way of faking equality constraints.
>>Use Lagrange multipliers and optim.
>Is there a package that does all that for me? Or is there example code that
>does something similar?
>R-help at stat.math.ethz.ch mailing list
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
More information about the R-help