This routine implements the hinge algorithm for cone projection to minimize
||y - θ||^2 over the cone C of the form {θ: Aθ ≥ 0}.
Usage
coneA(y, amat, w = 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.
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.
Value
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 of the polar cone on which the residual of the projection onto the constraint cone lands.
Author(s)
Mary C. Meyer and Xiyue Liao
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.
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 in 1:(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")