Version 3.2 adds NMF and sparse NMF (sNMF) as super-level
decomposition methods. They support clustering-oriented analyses of
multiblock data while the default sprmethod = "PCA"
preserves the version 3.1 computational path.
The principal options are:
sprmethod = "PCA": conventional super-level PCA;sprmethod = "NMF": non-negative matrix
factorization;sprmethod = "sNMF": sparse non-negative matrix
factorization.NMF requires non-negative input. The nneg argument
controls transformation of the block scores:
"posneg": separates positive and negative parts;"absolute": uses absolute values;"min": shifts values to a non-negative range.For a score vector \(s\), positive-negative decomposition is
\[ s^+ = \max(s,0), \qquad s^- = \max(-s,0), \qquad s=s^+-s^-. \]
A simple cluster assignment is obtained from the largest super-score value for each observation. Each root component supplies one clustering solution.
cluster_matrix <- vapply(
fit_snmf$ssX,
function(score) max.col(score, ties.method = "first"),
integer(nrow(fit_snmf$ssX[[1]]))
)
colnames(cluster_matrix) <- names(fit_snmf$ssX)
head(cluster_matrix)
#> comp1 comp2
#> [1,] 2 2
#> [2,] 2 2
#> [3,] 1 1
#> [4,] 1 2
#> [5,] 1 1
#> [6,] 1 2
apply(cluster_matrix, 2, table)
#> comp1 comp2
#> 1 28 23
#> 2 17 22The resulting matrix may be supplied to a separate consensus or
ensemble clustering procedure. The consensus step is not performed
automatically by msma().
Z may be a numeric matrix. con4spv
specifies weights used to combine its columns. This is a
composite-supervision model rather than a multi-task model with a
separate loading for every outcome.
set.seed(3)
z1 <- rnorm(nrow(X[[1]]))
z2 <- 0.5 * z1 + rnorm(nrow(X[[1]]), sd = 0.5)
Z <- cbind(clinical = z1, biomarker = z2)
fit_multi_z <- msma(
X = X, Z = Z,
con4spv = c(0.7, 0.3),
comp = 2,
muX = 0.20,
intseed = 1
)
fit_multi_z$predictiv
#> [[1]]
#> clinical biomarker
#> [1,] 0.004986875 0.004354675
#>
#> [[2]]
#> clinical biomarker
#> [1,] 0.036251 0.04306789Conceptually, the combined supervision score is
\[ z_c = Zc, \]
where the supplied weights are normalized internally as required by the implementation.
A vector and a one-column matrix produce the same result.
intseed for reproducible NMF and sNMF results.ssX and wsX when interpreting
clusters.lambdaXsup for sNMF.sessionInfo()
#> R Under development (unstable) (2026-08-25 r90447 ucrt)
#> Platform: x86_64-w64-mingw32/x64
#> Running under: Windows 11 x64 (build 26200)
#>
#> Matrix products: default
#> LAPACK version 3.12.1
#>
#> locale:
#> [1] LC_COLLATE=C LC_CTYPE=Japanese_Japan.utf8
#> [3] LC_MONETARY=Japanese_Japan.utf8 LC_NUMERIC=C
#> [5] LC_TIME=Japanese_Japan.utf8
#>
#> time zone: Asia/Tokyo
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] msma_3.2
#>
#> loaded via a namespace (and not attached):
#> [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 xfun_0.60
#> [5] cachem_1.1.0 knitr_1.51 htmltools_0.5.9 rmarkdown_2.31
#> [9] lifecycle_1.0.5 cli_3.6.6 sass_0.4.10 jquerylib_0.1.4
#> [13] compiler_4.7.0 tools_4.7.0 evaluate_1.0.5 bslib_0.12.0
#> [17] yaml_2.3.12 otel_0.2.0 rlang_1.3.0 jsonlite_2.0.0