# Re: [R] optim()

From: Iris Zhao <rhelp.zhao_at_gmail.com>
Date: Sat 22 Jul 2006 - 07:41:47 EST

Dear Spencer,

Thank you very much for your helpful reply. I was trying to reproduce a table in one paper. After I modified my code according to your suggestion, I was able to get the results that are very close to those in the paper. It seems the starting values of the parameters to be optimized are very crutial. So I will have different optimal values for different starting vectors. How can I be sure the min value returned by optim() is the true optimal value?

I am also curious why you choose the constant penalty to handle the constraint in the first place. Why not use lagrange multiplier method to eliminate the constraint?

Thanks again. I am grateful for your help.

Best regards,
Iris

On 7/18/06, Spencer Graves <spencer.graves@pdf.com> wrote:
>
> I had good luck translating constrained into unconstrained
> problems
> and then optimizing the unconstrained problem. Have you tried something
> like the following:
>
> Define:
> z = c(z1, z2, z3), where p1=1/(1+exp(-z1), etc. This translates
> the
> constraints on the p's to
>
> G(z) = P*(f1(z)-r12*f2(z))^2-f1(z)
>
> where f1(z) = f1(p1(z1), p2(z2), p3(z3), and similarly for f2(z), and
> where P = a penalty term,
> and r12 = (1-c)*k1/(c*(1-k1).
>
> Can f2(z) ever go outside (0, 1)? If yes, I would modify G(z) by
> adding a term like (min(0, f2(z), 1-f2(z))^2)
>
> If I haven't made a math error, your problem should translate
> into
> this form. I first solve this problem for z with P small like 1. Then
> after I've got a solution for that, I increase P to 2, then 10, then
> 100, etc., until the penalty is so great that the desired equality has
> been effectively achieved.
>
> With 'P' fixed, 'optim' should handle this kind of problem
> handily.
> To learn how, I suggest you work through the examples in the ?optim help
> page. I'd ignore the gradient, at least initially. A silly math error
> in computing the gradient can delay a solutions unnecessarily. If you
> need to solve thousands of problems like this for different values of
> k1 and 'c', I might later program the gradient. However, I would not do
> that initially.
>
> Also, if you are not already familiar with Venables and Ripley
> (2002)
> Modern Applied Statistics with S, 4th ed. (Springer -- or an earlier
> edition), I would encourage you to spend some quality time with this
> book. It can help you with 'optim', with contour plots, etc.
>
> Hope this helps,
> Spencer Graves
>
> Iris Zhao wrote:
> > Dear all,
> >
> >
> >
> > I am working on optimization problem and have some trouble running
> optim().
> > I have two functions (f1, f2) and 4 unknown parameters (p1, p2, p3, p4).
> > Both f1 and f2 are functions of p1, p2, and p3, denoted by f1(p1, p2,
> p3)
> > and f2(p1,p2,p3) respectively.
> >
> >
> >
> > The goal is to maximize f1(p1, p2, p3) subject to two constraints:
> >
> > (1) c = k1*p4/(k1*p4+(1-k1)*f1(p1,p2,p3)), where c and k1 are some
> known
> > constants
> >
> > (2) p4 = f2(p1, p2, p3)
> >
> > In addition, each parameter ranges from 0 to 1, and both f1 and f2
> involve
> > integrations.
> >
> >
> >
> > I tried to use lagrange multipliers to eliminate two equality
> constraints
> > and then use optim() to find the maximum value and optimal parameter
> > estimates.
> >
> > So I let fn be f1+lambda1*(c- k1*p4/(k1*p4+(1-k1)*f1(p1,p2,p3))) +
> > lambda2(p4-f2(p1,p2,p3)). The error message I got was "Error in fn(par,
> ...)
> > : recursive default argument reference."
> >
> >
> >
> > I wonder whether current build-in functions in R can do this type of
> jobs.
> > Any suggestion will be greatly appreciated.
> >
> >
> >
> > Iris
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> http://www.R-project.org/posting-guide.html
>

[[alternative HTML version deleted]]

R-help@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. Received on Sat Jul 22 07:46:54 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 22 Jul 2006 - 18:15:26 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.