This is the workhorse function for the higher-level
function fcnnls
, which implements the fast
nonnegative least-square algorithm for multiple
right-hand-sides from Van Benthem et al. (2004) to
solve the following problem:
$$ \begin{array}{l} \min \|Y - X K\|_F\\ \mbox{s.t. } K>=0 \end{array} $$
where \(Y\) and \(X\) are two real matrices of dimension \(n \times p\) and \(n \times r\) respectively, and \(\|.\|_F\) is the Frobenius norm.
The algorithm is very fast compared to other approaches, as it is optimised for handling multiple right-hand sides.
.fcnnls(x, y, verbose = FALSE, pseudo = FALSE, eps = 0)
the coefficient matrix
the target matrix to be approximated by \(X K\).
logical that indicates if log messages should be shown.
By default (pseudo=FALSE
) the
algorithm uses Gaussian elimination to solve the
successive internal linear problems, using the
solve
function. If pseudo=TRUE
the
algorithm uses Moore-Penrose generalized
pseudoinverse
from the
corpcor
package instead of solve.
threshold for considering entries as nonnegative. This is an experimental parameter, and it is recommended to leave it at 0.
A list with the following elements:
the fitted coefficient matrix.
the set of passive constraints, as a logical
matrix of the same size as K
that indicates which
element is positive.
Van Benthem M and Keenan MR (2004). "Fast algorithm for the solution of large-scale non-negativity-constrained least squares problems." _Journal of Chemometrics_, *18*(10), pp. 441-450. ISSN 0886-9383, <URL: http://dx.doi.org/10.1002/cem.889>, <URL: http://doi.wiley.com/10.1002/cem.889>.