Learn R Programming

coneproj (version 1.2)

coneB: Cone Projection -- Constraint Cone

Description

This routine implements the hinge algorithm for cone projection to minimize $||y - \theta||^2$ over the cone $C$ of the form ${\theta: \theta = v + \sum b_i\delta_i, i = 1,\ldots,m, b_1,\ldots, b_m \ge 0}$, $v$ is in $V$.

Usage

coneB(y, delta, vmat = NULL, w = NULL)

Arguments

y
A vector of length $n$.
delta
A matrix whose rows are the constraint cone edges. The rows of delta must be irreducible. Its column number must equal the length of $y$. No row of delta is contained in the column space of vmat.
vmat
A matrix whose columns are the basis of the linear space contained in the constraint cone. Its row number must equal the length of $y$. The columns of vmat must be linearly independent. The default is vmat = NULL
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 - \theta)'w(y - \theta)$ over $C$ is returned. The default is w = NULL.

Value

  • dfThe dimension of the face of the constraint cone on which the projection lands.
  • yhatThe projection of $y$ on the constraint cone.
  • stepsThe number of iterations before the algorithm converges.
  • coefsThe coefficients of the basis of the linear space and the constraint cone edges contained in the constraint cone.

Details

The routine coneB dynamically loads a C++ subroutine "coneBCpp".

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.

See Also

coneA, shapereg

Examples

Run this code
#generate y
    set.seed(123)
    n <- 50
    x <- seq(-2, 2, length = 50)
    y <- - x^2 + rnorm(n)

#create the edges of the constraint cone 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
    }

#note that in coneB, the transpose of the edges of the constraint cone is provided
    delta <- t(crossprod(amat, solve(tcrossprod(amat))))
    
#make the basis of V
    vmat <- matrix(rep(1, n), ncol = 1)

#call coneB
    ans3 <- coneB(y, delta, vmat)
    ans4 <- coneB(y, delta, vmat, w = (1:n)/n)

#make a plot to compare the unweighted fit and weighted fit
    par(mar = c(4, 4, 1, 1))
    plot(y, cex = .7, ylab = "y")
    lines(ans3$yhat, col = 2, lty = 2)
    lines(ans4$yhat, col = 4, lty = 2)
    legend("topleft", bty = "n", c("unweighted fit", "weighted fit"), col = c(2, 4), lty = c(2, 2))
    title("ConeB Example Plot")

Run the code above in your browser using DataLab