[Rd] Re: [R] constrOptim and function with additional parameters?
(PR#7089)
rpeng at jhsph.edu
rpeng at jhsph.edu
Wed Jul 14 16:38:34 CEST 2004
Okay, looking at the docs, then it's not a bug, since the "..."
argument is not actually documented as "other arguments passed to f or
grad". However, that *is* how it's document in `optim', so one can
see how this might cause some confusion.
Now, it's not clear to me which other arguments need to be passed to
`optim' except perhaps `hessian'. Am I missing something?
-roger
Duncan Murdoch wrote:
> I've moved this from r-help to r-bugs. If you reply, please be
> careful that replies go to the right place: r-bugs if your comment is
> specifically about the bug (and it contains the PR# in the subject
> that will be added when this is cc'd to r-devel), r-devel if general
> discussion, not both.
>
> On Wed, 14 Jul 2004 10:01:45 -0400, "Roger D. Peng" <rpeng at jhsph.edu>
> wrote :
>
>
>>Actually, I think this is a bug. Take a look at this part of constrOptim:
>
>
> This is the problem all right, but it's a little tricky to fix. The
> problem is that "..." is documented as being additional parameters to
> pass through to optim(). You don't want to pass all of those to f(),
> only the ones that don't match optim()'s arg list. (And that has to
> be done carefully, because of partial argument matching.)
>
> I don't know of other cases where we edit the "..." list before
> passing it onwards. Are there any?
>
>
>>>constrOptim
>>
>>function (theta, f, grad, ui, ci, mu = 1e-04, control = list(),
>> method = if (is.null(grad)) "Nelder-Mead" else "BFGS",
>>outer.iterations = 10
>>0,
>> outer.eps = 1e-05, ...)
>>{
>> if (!is.null(control$fnscale) && control$fnscale < 0)
>> mu <- -mu
>> [...]
>> obj <- f(theta)
>> ^^^^^^^^^^^^^^^
>> r <- R(theta, theta)
>> for (i in 1:outer.iterations) {
>> obj.old <- obj
>> r.old <- r
>> [...]
>>}
>>
>>So the object function `f' is called on the starting value `theta' but
>>the `...' is not passed through.
>>
>>-roger
>>
>>Duncan Murdoch wrote:
>>
>>>On Wed, 14 Jul 2004 14:59:01 +0200 (MEST), "Marlene Mueller"
>>><Marlene.Mueller at gmx.de> wrote :
>>>
>>>
>>>
>>>>How can I use a function with some additional input parameters
>>>>in constrOptim? For example, something like
>>>>
>>>>fr <- function(x,a) { ## Rosenbrock Banana function
>>>>x1 <- x[1]
>>>>x2 <- x[2]
>>>>a * (x2 - x1 * x1)^2 + (1 - x1)^2
>>>>}
>>>>
>>>>where the optimum is to be found w.r.t. x. Calling
>>>>optim(c(-1.2,1), fr, NULL, a=100) works as expected, but I fail
>>>>to provide the a=100 in the constrained case:
>>>>
>>>>
>>>>
>>>>>constrOptim(c(-1.2,0.9), fr, NULL, ui=rbind(c(-1,0),c(0,-1)),
>>>>
>>>>ci=c(-1,-1),a=100)
>>>>Error in f(theta) : Argument "a" is missing, with no default
>>>>
>>>>Is this a bug or is there a different solution that I miss here?
>>>
>>>
>>>I can't spot why your use of constrOptim isn't working, but you should
>>>be able to workaround it by doing something like this:
>>>
>>>applyDefaults <- function(fn, ...) {
>>> function(x) fn(x, ...)
>>>}
>>>
>>>constrOptim(c(-1.2,0.9), applyDefaults(fr, a=100), NULL,
>>>ui=rbind(c(-1,0),c(0,-1)),ci=c(-1,-1))
>>>
>>>The applyDefaults function creates a new function which evaluates the
>>>old one with some of the parameters set to fixed values.
>>>
>>>Duncan Murdoch
>>>
>>>______________________________________________
>>>R-help at stat.math.ethz.ch mailing list
>>>https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>>>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>>>
>
>
>
More information about the R-devel
mailing list