Run NMFscape Non-negative Matrix Factorization on SingleCellExperiment objects
Source:R/runNMF.R
runNMFscape.Rd
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