
Last chance! 50% off unlimited learning
Sale ends in
This routine implements the hinge algorithm for cone projection to minimize
coneA(y, amat, w = NULL, face = NULL, msg = TRUE)
The dimension of the face of the constraint cone on which the projection lands.
The projection of
The number of iterations before the algorithm converges.
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.
A vector of the positions of edges, which define the face on which the final projection lands on. For example, when there are
A vector of length
A constraint matrix. The rows of amat must be irreducible. The column number of amat must equal the length of
An optional nonnegative vector of weights of length
A vector of the positions of edges, which define the initial face for the cone projection. For example, when there are
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
Mary C. Meyer and Xiyue Liao
The routine coneA dynamically loads a C++ subroutine "coneACpp". The rows
of
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.
coneB
, constreg
, qprog
# 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")
Run the code above in your browser using DataLab