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)
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.
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.
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>.