Skip to contents

Performs NMF using RcppML on SingleCellExperiment or SpatialExperiment objects and stores results in reducedDims slot with metadata

Usage

runNMFscape(
  x,
  k,
  assay = "logcounts",
  name = "NMF",
  subset_row = NULL,
  tol = 1e-05,
  maxit = 100,
  L1 = c(0, 0),
  seed = NULL,
  verbose = TRUE,
  ...
)

Arguments

x

A SingleCellExperiment or SpatialExperiment object

k

Integer, number of factors for NMF (rank)

assay

Character or integer, which assay to use (default "logcounts")

name

Character, name for the reducedDim slot (default "NMF")

subset_row

Vector specifying which features to use

tol

Numeric, tolerance for convergence (default 1e-5)

maxit

Integer, maximum iterations (default 100)

L1

Numeric vector of length 2, L1 regularization for [w, h] (default c(0,0))

seed

Integer, random seed for reproducibility

verbose

Logical, whether to print progress (default TRUE)

...

Additional arguments passed to RcppML::nmf

Value

The input object with NMF results stored in reducedDims(x, name) and metadata stored in metadata(x)$NMF

Examples

# Single-cell example
library(scuttle)
sce <- mockSCE()
sce <- logNormCounts(sce)
sce <- runNMFscape(sce, k = 10)
#> Running NMF with k=10 factors...
#> 
#> iter |      tol 
#> ---------------
#>    1 | 7.95e-01
#>    2 | 4.40e-02
#>    3 | 2.05e-02
#>    4 | 1.10e-02
#>    5 | 6.78e-03
#>    6 | 4.51e-03
#>    7 | 3.17e-03
#>    8 | 2.24e-03
#>    9 | 1.64e-03
#>   10 | 1.25e-03
#>   11 | 9.76e-04
#>   12 | 7.78e-04
#>   13 | 6.38e-04
#>   14 | 5.26e-04
#>   15 | 4.39e-04
#>   16 | 3.71e-04
#>   17 | 3.13e-04
#>   18 | 2.60e-04
#>   19 | 2.10e-04
#>   20 | 1.73e-04
#>   21 | 1.41e-04
#>   22 | 1.20e-04
#>   23 | 1.02e-04
#>   24 | 8.87e-05
#>   25 | 7.77e-05
#>   26 | 6.83e-05
#>   27 | 6.14e-05
#>   28 | 5.58e-05
#>   29 | 5.11e-05
#>   30 | 4.71e-05
#>   31 | 4.34e-05
#>   32 | 3.99e-05
#>   33 | 3.71e-05
#>   34 | 3.45e-05
#>   35 | 3.22e-05
#>   36 | 3.03e-05
#>   37 | 2.87e-05
#>   38 | 2.73e-05
#>   39 | 2.59e-05
#>   40 | 2.47e-05
#>   41 | 2.37e-05
#>   42 | 2.29e-05
#>   43 | 2.20e-05
#>   44 | 2.12e-05
#>   45 | 2.04e-05
#>   46 | 1.97e-05
#>   47 | 1.92e-05
#>   48 | 1.88e-05
#>   49 | 1.84e-05
#>   50 | 1.83e-05
#>   51 | 1.80e-05
#>   52 | 1.77e-05
#>   53 | 1.75e-05
#>   54 | 1.75e-05
#>   55 | 1.76e-05
#>   56 | 1.77e-05
#>   57 | 1.76e-05
#>   58 | 1.77e-05
#>   59 | 1.78e-05
#>   60 | 1.78e-05
#>   61 | 1.78e-05
#>   62 | 1.78e-05
#>   63 | 1.78e-05
#>   64 | 1.75e-05
#>   65 | 1.74e-05
#>   66 | 1.73e-05
#>   67 | 1.73e-05
#>   68 | 1.72e-05
#>   69 | 1.71e-05
#>   70 | 1.64e-05
#>   71 | 1.58e-05
#>   72 | 1.53e-05
#>   73 | 1.48e-05
#>   74 | 1.45e-05
#>   75 | 1.41e-05
#>   76 | 1.38e-05
#>   77 | 1.34e-05
#>   78 | 1.31e-05
#>   79 | 1.28e-05
#>   80 | 1.25e-05
#>   81 | 1.22e-05
#>   82 | 1.19e-05
#>   83 | 1.17e-05
#>   84 | 1.15e-05
#>   85 | 1.11e-05
#>   86 | 1.08e-05
#>   87 | 1.04e-05
#>   88 | 1.00e-05
#>   89 | 9.69e-06
#> NMF completed. Results stored in reducedDim(x, 'NMF')
#> Basis matrix stored in metadata(x)$NMF_basis

# Access NMF coefficients (cell loadings)
nmf_coords <- reducedDim(sce, "NMF")

# Access basis matrix from metadata
basis <- metadata(sce)$NMF_basis