Package NNLM. June 18, 2018

Similar documents
Package milr. June 8, 2017

Package ECctmc. May 1, 2018

Package mixsqp. November 14, 2018

Package recosystem. September 2, 2017

Package Rtsne. April 14, 2017

Package TANDEM. R topics documented: June 15, Type Package

Package bisect. April 16, 2018

Package strat. November 23, 2016

Package vinereg. August 10, 2018

Package MTLR. March 9, 2019

Package elmnnrcpp. July 21, 2018

Package fasttextr. May 12, 2017

Package cattonum. R topics documented: May 2, Type Package Version Title Encode Categorical Features

Package queuecomputer

Package ADMM. May 29, 2018

Package optimus. March 24, 2017

Package geojsonsf. R topics documented: January 11, Type Package Title GeoJSON to Simple Feature Converter Version 1.3.

Package glmnetutils. August 1, 2017

Package splines2. June 14, 2018

Package jdx. R topics documented: January 9, Type Package Title 'Java' Data Exchange for 'R' and 'rjava'

Package validara. October 19, 2017

Package colf. October 9, 2017

Package gggenes. R topics documented: November 7, Title Draw Gene Arrow Maps in 'ggplot2' Version 0.3.2

Package RSpectra. May 23, 2018

Package nmslibr. April 14, 2018

Package lumberjack. R topics documented: July 20, 2018

Package PUlasso. April 7, 2018

Package DPBBM. September 29, 2016

Package mgc. April 13, 2018

Package robustreg. R topics documented: April 27, Version Date Title Robust Regression Functions

Package fastdummies. January 8, 2018

Package diffusr. May 17, 2018

Package ECOSolveR. February 18, 2018

Package sfc. August 29, 2016

Package wrswor. R topics documented: February 2, Type Package

Package SAENET. June 4, 2015

Package SSLASSO. August 28, 2018

Package rtext. January 23, 2019

Package nngeo. September 29, 2018

Package radiomics. March 30, 2018

Package rnn. R topics documented: June 21, Title Recurrent Neural Network Version 0.8.1

Package GauPro. September 11, 2017

Package readxl. April 18, 2017

Package rollply. R topics documented: August 29, Title Moving-Window Add-on for 'plyr' Version 0.5.0

Package geogrid. August 19, 2018

Package packcircles. April 28, 2018

Package kdtools. April 26, 2018

Package widyr. August 14, 2017

Package hiernet. March 18, 2018

Package readobj. November 2, 2017

Package splithalf. March 17, 2018

Package esabcv. May 29, 2015

Package ordinalclust

Package tropicalsparse

Package nima. May 23, 2018

Package sigqc. June 13, 2018

Package gppm. July 5, 2018

Package BigVAR. R topics documented: April 3, Type Package

Package BiDimRegression

Package d3heatmap. February 1, 2018

Package CVR. March 22, 2017

Package quadprogxt. February 4, 2018

Package multihiccompare

Package RAMP. May 25, 2017

Package balance. October 12, 2018

Package bigreadr. R topics documented: August 13, Version Date Title Read Large Text Files

Package stapler. November 27, 2017

Package SimilaR. June 21, 2018

Package kerasformula

Package deductive. June 2, 2017

Package narray. January 28, 2018

Package FSelectorRcpp

Package svmpath. R topics documented: August 30, Title The SVM Path Algorithm Date Version Author Trevor Hastie

Package semver. January 6, 2017

Package tibble. August 22, 2017

Package bife. May 7, 2017

Package DTRlearn. April 6, 2018

Package fusionclust. September 19, 2017

Package triebeard. August 29, 2016

Package missforest. February 15, 2013

Package epitab. July 4, 2018

Package attrcusum. December 28, 2016

Package ramcmc. May 29, 2018

Package filling. December 11, 2017

Package RNAseqNet. May 16, 2017

Package r.jive. R topics documented: April 12, Type Package

Package stlplus. August 29, 2016

Package catenary. May 4, 2018

Package clusternomics

Package SIMLR. December 1, 2017

Package MonteCarlo. April 23, 2017

Package rknn. June 9, 2015

Package msda. February 20, 2015

Package smcfcs. March 30, 2019

Package rprojroot. January 3, Title Finding Files in Project Subdirectories Version 1.3-2

Package fcr. March 13, 2018

Package ggimage. R topics documented: November 1, Title Use Image in 'ggplot2' Version 0.0.7

Package pomdp. January 3, 2019

Package BiocNeighbors

Package messaging. May 27, 2018

Transcription:

Type Package Package NNLM June 18, 2018 Title Fast and Versatile Non-Negative Matrix Factorization Description This is a package for Non-Negative Linear Models (NNLM). It implements fast sequential coordinate descent algorithms for non-negative linear regression and non-negative matrix factorization (NMF). It supports mean square error and Kullback- Leibler divergence loss. Many other features are also implemented, including missing value imputation, domain knowledge integration, designable W and H matrices and multiple forms of regularizations. Version 0.4.2 Date 2018-05-17 Depends R (>= 3.0.1) Imports Rcpp (>= 0.11.0), stats, utils LinkingTo Rcpp, RcppArmadillo, RcppProgress LazyData yes LazyLoad yes NeedsCompilation yes Suggests testthat, knitr, rmarkdown, mice, missforest, ISOpureR VignetteBuilder knitr RoxygenNote 5.0.0 License BSD_2_clause + file LICENSE BugReports https://github.com/linxihui/nnlm/issues URL https://github.com/linxihui/nnlm Author Xihui Lin [aut, cre], Paul C Boutros [aut] Maintainer Xihui Lin <ericxihuilin@gmail.com> Repository CRAN Date/Publication 2018-06-18 18:24:15 UTC 1

2 nnlm R topics documented: mse.mkl........................................... 2 nnlm............................................. 2 nnmf............................................. 4 nsclc............................................. 8 predict.nnmf......................................... 8 Index 10 mse.mkl Compute mean square error(mse) and mean kl divergence (MKL) Description Compute mean square error(mse) and mean kl divergence (MKL) Usage mse.mkl(obs, pred, na.rm = TRUE, show.warning = TRUE) Arguments obs pred na.rm show.warning observed value prediction/estimate if to remove NAs if to show warning if any Value A vector of c(mse, MKL) nnlm Non-negative linear model/regression (NNLM) Description Solving non-negative linear regression problem as argmin β 0 L(y xβ) + α 1 β 2 2 + α 2 β T i β T j + α 3 β 1 where L is a loss function of either square error or Kullback-Leibler divergence. i<j

nnlm 3 Usage nnlm(x, y, alpha = rep(0, 3), method = c("scd", "lee"), loss = c("mse", "mkl"), init = NULL, mask = NULL, check.x = TRUE, max.iter = 10000L, rel.tol = 1e-12, n.threads = 1L, show.warning = TRUE) Arguments x y alpha method loss init mask check.x max.iter rel.tol n.threads show.warning Design matrix Vector or matrix of response A vector of non-negative value length equal to or less than 3, meaning [L2, angle, L1] regularization on beta (non-masked entries) Iteration algorithm, either scd for sequential coordinate-wise descent or lee for Lee s multiplicative algorithm Loss function to use, either mse for mean square error or mkl for mean KLdivergence. Note that if x, y contains negative values, one should always use mse Initial value of beta for iteration. Either NULL (default) or a non-negative matrix of Either NULL (default) or a logical matrix of the same shape as beta, indicating if an entry should be fixed to its initial (if init specified) or 0 (if init not specified). If to check the condition number of x to ensure unique solution. Default to TRUE but could be slow Maximum number of iterations Stop criterion, relative change on x between two successive iteration. It is equal to 2 e2 e1 /(e2 + e1). One could specify a negative number to force an exact max.iter iteration, i.e., not early stop An integer number of threads/cpus to use. Default to 1 (no parallel). Use 0 or a negative value for all cores If to shown warnings if exists. Default to TRUE Details The linear model is solve in column-by-column manner, which is parallelled. When y j (j-th column) contains missing values, only the complete entries are used to solve β j. Therefore, the minimum complete entries of each column should be not smaller than number of columns of x when penalty is not used. method = 'scd' is recommended, especially when the solution is probably sparse. Though both "mse" and "mkl" loss are supported for non-negative x and y, only "mse" is proper when either y or x contains negative value. Note that loss "mkl" is much slower then loss "mse", which might be your concern when x and y is extremely large. mask is can be used for hard regularization, i.e., forcing entries to their initial values (if init specified) or 0 (if init not specified). Internally, mask is achieved by skipping the masked entries during the element-wse iteration.

4 nnmf Value An object of class nnlm, which is a list with components Author(s) coefficients : a matrix or vector (depend on y) of the NNLM solution, i.e., β n.iteration : total number of iteration (sum over all column of beta) error : a vector of errors/loss as c(mse, MKL, target.error) of the solution options : list of information of input arguments call : function call Eric Xihui Lin, <xihuil.silence@gmail.com> References Franc, V. C., Hlavac, V. C., Navara, M. (2005). Sequential Coordinate-Wise Algorithm for the Non-negative Least Squares Problem. Proc. Int l Conf. Computer Analysis of Images and Patterns. Lecture Notes in Computer Science 3691. p. 407. Lee, Daniel D., and H. Sebastian Seung. 1999. "Learning the Parts of Objects by Non-Negative Matrix Factorization." Nature 401: 788-91. Pascual-Montano, Alberto, J.M. Carazo, Kieko Kochi, Dietrich Lehmann, and Roberto D.Pascual- Marqui. 2006. "Nonsmooth Nonnegative Matrix Factorization (NsNMF)." IEEE Transactions on Pattern Analysis and Machine Intelligence 28 (3): 403-14. Examples # without negative value x <- matrix(runif(50*20), 50, 20); beta <- matrix(rexp(20*2), 20, 2); y <- x %*% beta + 0.1*matrix(runif(50*2), 50, 2); beta.hat <- nnlm(x, y, loss = 'mkl'); # with negative values x2 <- 10*matrix(rnorm(50*20), 50, 20); y2 <- x2 %*% beta + 0.2*matrix(rnorm(50*2), 50, 2); beta.hat2 <- nnlm(x, y); nnmf Non-negative matrix factorization Description Non-negative matrix factorization(nmf or NNMF) using sequential coordinate-wise descent or multiplicative updates

nnmf 5 Usage nnmf(a, k = 1L, alpha = rep(0, 3), beta = rep(0, 3), method = c("scd", "lee"), loss = c("mse", "mkl"), init = NULL, mask = NULL, W.norm = -1L, check.k = TRUE, max.iter = 500L, rel.tol = 1e-04, n.threads = 1L, trace = 100/inner.max.iter, verbose = 1L, show.warning = TRUE, inner.max.iter = ifelse("mse" == loss, 50L, 1L), inner.rel.tol = 1e-09) Arguments A k alpha beta method loss A matrix to be decomposed An integer of decomposition rank [L2, angle, L1] regularization on W (non-masked entries) [L2, angle, L1] regularization on H (non-masked entries) Decomposition algorithms, either scd for sequential coordinate-wise descent(default) or lee for Lee s multiplicative algorithm Loss function to use, either mse for mean square error (default) or mkl for mean KL-divergence init A list of initial matrices for W and H. One can also supply known matrices W0, H0, and initialize their correspondent matrices H1 and W1. See details mask A list of mask matrices for W, H, H1 (if init$w0 supplied), W1 (if init$h0 supplied), which should have the same shapes as W, H, H1 and W1 if specified. If initial matrices not specified, masked entries are fixed to 0. See details W.norm A numeric value p indicating the L p -norm (can be infinity) used to normalized the outcome W matrix. No normalization will be performed if 0 or negative. This argument has no effect on outcome correspondent to known profiles W0, H0. Default to 1, i.e. sum of W should sum up to 1, which can be interpreted as "distribution" or "proportion" check.k If to check whether k nm/(n+m), where (n,m)=dim(a), or k is smaller than the column-wise and row-wise minimum numbers of complete observation max.iter Maximum iteration of alternating NNLS solutions to H and W rel.tol Stop criterion, which is relative tolerance between two successive iterations, = e2-e1 /avg(e1, e2) n.threads An integer number of threads/cpus to use. Default to 1(no parallel). Specify 0 for all cores trace An integer indicating how frequent the error should be checked. MSE and MKL error will computed every trace iterations. If 0 or negative, trace is set to a very large number and only errors of the first and last iterations are checked. verbose Either 0/FALSE, 1/TRUE or 2, with 0/FALSE/else = no any tracking, 1 == progression bar, 2 == print iteration info. show.warning If to show warnings when targeted rel.tol is not reached inner.max.iter Maximum number of iterations passed to each inner W or H matrix updating loop inner.rel.tol Stop criterion for the inner loop, which is relative tolerance passed to inner W or H matrix updating i.e., e2-e1 /avg(e1, e2)

6 nnmf Details The problem of non-negative matrix factorization is to find W, H, W 1, H 1, such that A = W H + W 0 H 1 + W 1 H 0 + ε = [W W 0 W 1 ][H H 1H 0] + ε where W 0, H 0 are known matrices, which are NULLs in most application case and ε is noise.. In tumour content deconvolution, W 0 can be thought as known healthy profile, and W is desired pure cancer profile. One also set H 0 to a row matrix of 1, and thus W 1 can be treated as common profile among samples. Use init to specify W 0 and H 0. Argument init, if used, must be a list with entries named as W, H, W0, W1, H1, H0. One could specify only a few of them. Only use W0 (and its correspondent H1 ) or H0 (and its correspondent W1 ) for known matrices/profiles. Similarly, argument mask, if used, must be a list entries named as W, H, W0, W1, H1, H0, and they should be either NULL (no specified) or a logical matrix. If a masked for matrix is specified, then masked entries will be fixed to their initial values if initialized (skipped during iteration), or 0 if not initialized. To simplify the notations, we denote right hand side of the above equation as W H. The problem to solved using square error is argmin W 0,H 0 L(A, W H) + J(W, α) + J(H, β) where L(x, y) is a loss function either a square loss or a Kullback-Leibler divergence 1 2 x y 2 2 x log(x/y) x y, and J(X, α) = α 1 J 1 (X) + α 2 J 2 (X) + α 3 J 3 (X), J 1 (X) = 1 2 X 2 F = 1 2 tr(xxt ), J 2 (X) = i<j(x i ) T X j = 1 2 tr(x(e I)XT ), J 3 (X) = i,j x ij = tr(xe). The formal one is usually better for symmetric distribution, while the later one is more suitable for skewed distribution, especially for count data as it can be derived from Poisson distributed observation. The penalty function J is a composition of three types of penalties, which aim to minimizing L2 norm, maximizing angles between hidden features (columns of W and rows of H) and L1 norm (sparsity). The parameters α, β of length 3 indicates the amount of penalties. When method == 'scd', a sequential coordinate-wise descent algorithm is used when solving W and H alternatively, which are non-negative regression problem. The inner.max.iter and

nnmf 7 inner.rel.tol is used to control the number of iteration for these non-negative regressions. This is also applicable to method == 'lee' (the original algorithm only iteration through all entries once for each iteration), which is usually faster than the original algorithm when loss == 'mse'. When loss == 'mkl', a quadratic approximation to the KL-divergence is used when method == 'scd'. Generally, for run time, scd is faster than lee and mse is faster than mkl. Value A list with components W : left matrix, including known W0 and W1 if available, i.e., column stacked as [W, W 0, W 1] H : right matrix, including H1 and known H0 if available, i.e. row stacked as [H, H1, H0 ] mse : a vector of mean squared errors through iterations mkl : a vector of mean KL-divergence through iterations target.loss : target for minimization, which is mean KL-divergence (if loss == 'mkl') or half of mean squared error if loss == 'mse' plus penalties average.epochs : a vector of average epochs (one complete swap over W and H) n.iteration : total number of iteration (sum over all column of beta) run.time : running time options : list of information of input arguments call : function call Author(s) Eric Xihui Lin, <xihuil.silence@gmail.com> References Franc, V. C., Hlavac, V. C., Navara, M. (2005). Sequential Coordinate-Wise Algorithm for the Non-negative Least Squares Problem. Proc. Int l Conf. Computer Analysis of Images and Patterns. Lecture Notes in Computer Science 3691. p. 407. Lee, Daniel D., and H. Sebastian Seung. 1999. "Learning the Parts of Objects by Non-Negative Matrix Factorization." Nature 401: 788-91. Pascual-Montano, Alberto, J.M. Carazo, Kieko Kochi, Dietrich Lehmann, and Roberto D.Pascual- Marqui. 2006. "Nonsmooth Nonnegative Matrix Factorization (NsNMF)." IEEE Transactions on Pattern Analysis and Machine Intelligence 28 (3): 403-14. See Also nnlm, predict.nnmf

8 predict.nnmf Examples # Pattern extraction, meta-gene set.seed(123); data(nsclc, package = 'NNLM') str(nsclc) decomp <- nnmf(nsclc[, 1:80], 3, rel.tol = 1e-5); heatmap(decomp$w, Colv = NA, xlab = 'Meta-gene', ylab = 'Gene', margins = c(2,2), labrow = '', labcol = '', scale = 'column', col = cm.colors(100)); heatmap(decomp$h, Rowv = NA, ylab = 'Meta-gene', xlab = 'Patient', margins = c(2,2), labrow = '', labcol = '', scale = 'row', col = cm.colors(100)); # missing value imputation set.seed(123); nsclc2 <- nsclc; index <- sample(length(nsclc2), length(nsclc2)*0.3); nsclc2[index] <- NA; # impute using NMF system.time(nsclc2.nmf <- nnmf(nsclc2, 2)); nsclc2.hat.nmf <- with(nsclc2.nmf, W %*% H); mse.mkl(nsclc[index], nsclc2.hat.nmf[index]) nsclc Micro-array data of NSCLC patients Description This dataset is a random subset (matrix) of micro-array data from a group of Non-Small Cell Lung Caner (NSCLC) patients. It contains 200 probes / genes (row) for 100 patients / samples (column). predict.nnmf Methods for nnmf object returned by nnmf Description Methods for nnmf object returned by nnmf

predict.nnmf 9 Usage ## S3 method for class 'nnmf' predict(object, newdata, which = c("a", "W", "H"), method = object$options$method, loss = object$options$loss,...) ## S3 method for class 'nnmf' print(x,...) Arguments object newdata which method loss An NNMF object returned by nnmf A new matrix of x. No required when which == 'A' Either A (default), W or H Either scd or lee. Default to object$options$method Either mse or mkl. Default to object$options$loss... Further arguments passed to nnlm or print x Value See Also An NNMF object returned by nnmf A or a class of nnlm for predict.nnmf and no return for print. nnmf, nnlm Examples x <- matrix(runif(50*20), 50, 20) r <- nnmf(x, 2) r newx <- matrix(runif(50*30), 50, 30) pred <- predict(r, newx, 'H')

Index Topic data nsclc, 8 mse.mkl, 2 nnlm, 2, 7, 9 nnmf, 4, 9 nsclc, 8 predict.nnmf, 7, 8 print.nnmf (predict.nnmf), 8 10