[Rd] constrOptim( ): conflict between help page and code

Duncan Murdoch murdoch.duncan at gmail.com
Thu Jun 17 10:37:33 CEST 2010


John Nolan wrote:
> 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.
>   

I don't know if this was a recent change, but the current help says:

"The starting value must be in the interior of the feasible region, but 
the minimum may be on the boundary."

The boundary is not in the interior.

Duncan Murdoch
> 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
>  ...........................................................................
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list