This routine implements the hinge algorithm for cone projection to minimize ∣∣y−θ∣∣2 over the cone C of the form {θ:Aθ≥0}.
coneA(y, amat, w =NULL, face =NULL, msg =TRUE)
Arguments
y: A vector of length n.
amat: A constraint matrix. The rows of amat must be irreducible. The column number of amat must equal the length of y.
w: An optional nonnegative vector of weights of length n. If w is not given, all weights are taken to equal 1. Otherwise, the minimization of (y−θ)′w(y−θ) over C is returned. The default is w = NULL.
face: A vector of the positions of edges, which define the initial face for the cone projection. For example, when there are m cone edges, then face is a subset of 1,…,m. The default is face = NULL.
msg: A logical flag. If msg is TRUE, then a warning message will be printed when there is a non-convergence problem; otherwise no warning message will be printed. The default is msg = TRUE
Details
The routine coneA dynamically loads a C++ subroutine "coneACpp". The rows of −A are the edges of the polar cone Ωo. This routine first projects y onto Ωo to get the residual of the projection onto the constraint cone C, and then uses the fact that y is equal to the sum of the projection of y onto C and the projection of y onto Ωo to get the estimation of θ. See references cited in this section for more details about the relationship between polar cone and constraint cone.
Returns
df: The dimension of the face of the constraint cone on which the projection lands.
thetahat: The projection of y on the constraint cone.
steps: The number of iterations before the algorithm converges.
xmat: The rows of the matrix are the edges of the face in the polar cone on which the residual of the projection onto the constraint cone lands.
face: A vector of the positions of edges in the polar cone, which define the face on which the final projection lands on. For example, when there are m cone edges, then face is a subset of 1,…,m.
References
Meyer, M. C. (1999) An extension of the mixed primal-dual bases algorithm to the case of more constraints than dimensions. Journal of Statistical Planning and Inference 81, 13--31.
Meyer, M. C. (2013b) A simple new algorithm for quadratic programming with applications in statistics. Communications in Statistics 42(5), 1126--1139.
Liao, X. and M. C. Meyer (2014) coneproj: An R package for the primal or dual cone projections with routines for constrained regression. Journal of Statistical Software 61(12), 1--22.
Author(s)
Mary C. Meyer and Xiyue Liao
See Also
coneB, constreg, qprog
Examples
# generate y set.seed(123) n <-50 x <- seq(-2,2, length =50) y <-- x^2+ rnorm(n)# create the constraint matrix to make the first half of y monotonically increasing# and the second half of y monotonically decreasing amat <- matrix(0, n -1, n)for(i in1:(n/2-1)){ amat[i, i]<--1; amat[i, i +1]<-1}for(i in(n/2):(n -1)){ amat[i, i]<-1; amat[i, i +1]<--1}# call coneA ans1 <- coneA(y, amat) ans2 <- coneA(y, amat, w =(1:n)/n)# make a plot to compare the unweighted fit and the weighted fit par(mar = c(4,4,1,1)) plot(y, cex =.7, ylab ="y") lines(fitted(ans1), col =2, lty =2) lines(fitted(ans2), col =4, lty =2) legend("topleft", bty ="n", c("unweighted fit","weighted fit"), col = c(2,4), lty = c(2,2)) title("ConeA Example Plot")