[R] constrained optimisation in R.

Ravi Varadhan RVaradhan at jhmi.edu
Thu Jul 2 22:36:39 CEST 2009


An errratum to my previous email:

In your problem, you can do as follows:

f <- function(par, data, lambda1, lambda2) loglik(par, data) - lambda1 *
(sum(Ai))^2 - lambda2 * (sum(Di))^2


Note the correct negative signs in front of the penalty terms.

Ravi. 


----------------------------------------------------------------------------
-------

Ravi Varadhan, Ph.D.

Assistant Professor, The Center on Aging and Health

Division of Geriatric Medicine and Gerontology 

Johns Hopkins University

Ph: (410) 502-2619

Fax: (410) 614-9625

Email: rvaradhan at jhmi.edu

Webpage:
http://www.jhsph.edu/agingandhealth/People/Faculty_personal_pages/Varadhan.h
tml



----------------------------------------------------------------------------
--------


-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Ravi Varadhan
Sent: Thursday, July 02, 2009 3:32 PM
To: 'Iason Christodoulou'
Cc: r-help at r-project.org
Subject: Re: [R] constrained optimisation in R.

Hi,

I know nothing about neither your model nor the Skellam distribution.  I
will assume that it is a sensible model and that the parameters are
identifiable from the data.

Here is a toy example showing how to impose equality constraints:

# To maximize x1 + x2,  subject to x1^2 + x2^2 = 1 # f <- function(x,
lambda) x[1] + x[2] - lambda * (x[1]^2 + x[2]^2 - 1)^2  # this is the
augmented Lagrangian



eps <- Inf



tol <- 1.e-05



p0 <- c(1, 1)



lambda <- 0.1 # starting value for penalty parameter, this would depend on
the scale of the constraint function



while (eps > tol) {



ans <- optim(fn=f, par=p0, lambda=lambda, method="BFGS",
control=list(fnscale=-1))  # maximizing the augmented Lagrangian



par <- ans$par



eps <- max(abs(p0 - par))



p0 <- par



lambda <- 10 * lambda  # we increase the penalty parameter until parameters
do not change



}



ans


In your problem, you can do as follows:

f <- function(par, data, lambda1, lambda2) loglik(par, data) + lambda1 *
(sum(Ai))^2 + lambda2 * (sum(Di))^2



where you allow 2 penalty parameters.  You would then increase both by a
factor of 10 in each step until convergence.  You would use different
starting values for lamda1 and lambda2, if the scales of the 2 constraints
are very different.  If not, you use a single lambda.





Hope this helps,

Ravi.


----------------------------------------------------------------------------
-------

Ravi Varadhan, Ph.D.

Assistant Professor, The Center on Aging and Health

Division of Geriatric Medicine and Gerontology

Johns Hopkins University

Ph: (410) 502-2619

Fax: (410) 614-9625

Email: rvaradhan at jhmi.edu

Webpage:
http://www.jhsph.edu/agingandhealth/People/Faculty_personal_pages/Varadhan.h
tml



----------------------------------------------------------------------------
--------



  _____

From: Iason Christodoulou [mailto:c_iasonas at hotmail.com]
Sent: Thursday, July 02, 2009 2:58 PM
To: rvaradhan at jhmi.edu
Subject: RE: [R] constrained optimisation in R.




$B&3(Bhe actual problem is:

Log ($B&K(B1i) = $B&L(B + $B&'(B + A$B&'(BTi + D$B&!(BTi ,

Log($B&K(B2i ) = $B&L(B + AATi + DHTi,

Where $B&L(B is  a constant parameter, H is the home effect, Ak and Dk are
the $B!H(Bnet$B!I(B attacking and defending parameters of team k after
removing correlation and HTi and ATi are the home and away team competing
each other in game i.

We need to impose the constraints

$B-t(BAk=0 and $B-t(BDk=0

I want to solve it with maximum likelihood method

(the distribution is skellam distribution)

Thank you very much for your time.



> From: RVaradhan at jhmi.edu
> To: c_iasonas at hotmail.com; r-help at r-project.org
> Subject: RE: [R] constrained optimisation in R.
> Date: Thu, 2 Jul 2009 13:15:27 -0400
>
> Please tell us about the actual problem that you are trying to solve, 
> because the "answer" would very much depend on that.
>
> Are your constraints really sum(par) = 0? If so, you can just 
> eliminate
one
> of the parameters and solve the optimization problems with (p-1)
parameters.
>
> If you have other constraints on the parameters such that par[i] > 0, 
> then you can use any one of the optimization functions that allow for 
> box-constraints (e.g. optim() with method="L-BFGS-B", nlminb(), spg() 
> in "BB" package).
>
> If you have convex inequality constraints, you can use constrOptim(). 
> If you have nonlinear inequalities you may try Rdonlp2, or you can use 
> a function that I have written that extends constrOptim() to handle
non-linear
> inequalities.
>
> As you can see, the answer depends upon what type of constraints you
really
> have.
>
> Ravi.
>
>
>
----------------------------------------------------------------------------
> -------
>
> Ravi Varadhan, Ph.D.
>
> Assistant Professor, The Center on Aging and Health
>
> Division of Geriatric Medicine and Gerontology
>
> Johns Hopkins University
>
> Ph: (410) 502-2619
>
> Fax: (410) 614-9625
>
> Email: rvaradhan at jhmi.edu
>
> Webpage:
>
http://www.jhsph.edu/agingandhealth/People/Faculty_personal_pages/Varadhan.h
> tml
>
>
>
>
----------------------------------------------------------------------------
> --------
>
>
> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org]
On
> Behalf Of Iason Christodoulou
> Sent: Thursday, July 02, 2009 11:56 AM
> To: r-help at r-project.org
> Subject: [R] constrained optimisation in R.
>
>
> i want to estimate parameters with maximum likelihood method with
contraints
> (contant numbers).
> for example
> sum(Ai)=0 and sum(Bi)=0
> i have done it without the constraints but i realised that i have to 
> use
the
> contraints.
>
>
> Without constraints(just a part-not complete):
>
> skellamreg_LL=function(parameters,z,design)
> {
> n=length(z);
> mu=parameters[1];
> H=parameters[2];
> Apar=parameters[3:10];
> Dpar=parameters[11:18];
>
> res=optim(par,skellamreg_LL,method="Nelder-Mead", hessian = FALSE,
> control=list(trace=1000,maxit=100000),z=z,design=x,)
>
> _________________________________________________________________
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>


  _____

check out the rest of the Windows Live(tm). More than mail-Windows Live(tm)
goes way beyond your inbox. More than messages
<http://www.microsoft.com/windows/windowslive/>

	[[alternative HTML version deleted]]

______________________________________________
R-help at 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.




More information about the R-help mailing list