[Rd] constrOptim( ): conflict between help page and code
John Nolan
jpnolan at american.edu
Thu Jun 17 04:47:59 CEST 2010
There is a contradiction between what the help page says and what constrOptim actually
does with the constraints. The issue is what happens on the boundary.
The help page says
The feasible region is defined by ‘ui %*% theta - ci >= 0’,
but the R code for constrOptim reads
if (any(ui %*% theta - ci <= 0))
stop("initial value not feasible")
The following example shows that when the initial point is on the boundary of the
feasibility region, you get the above error message and execution stops.
> fn <- function(x) { return(sum(x)) }
>
> ui <- diag(rep(1,2))
> ci <- matrix(0,nrow=2,ncol=1)
> constrOptim( c(0,0), fn, NULL, ui, ci )
Error in optim(theta.old, fun, gradient, control = control, method = method, :
function cannot be evaluated at initial parameters
>
> version
platform i386-pc-mingw32
arch i386
os mingw32
system i386, mingw32
status
major 2
minor 10.0
year 2009
month 10
day 26
svn rev 50208
language R
version.string R version 2.10.0 (2009-10-26)
In contrast, at a different place in constrOptim - the internal function R -
the boundary of the feasibility region is allowed: if (any(gi < 0)) return(NaN),
and it seems to explicitly allow boundaries at another place:
allowing gi==0 and interpreting log(gi) as -Inf.
John
...........................................................................
John P. Nolan
Math/Stat Department
227 Gray Hall
American University
4400 Massachusetts Avenue, NW
Washington, DC 20016-8050
jpnolan at american.edu
202.885.3140 voice
202.885.3155 fax
http://academic2.american.edu/~jpnolan
...........................................................................
More information about the R-devel
mailing list