BiocSingular 1.14.0
奇异值分解(SVD)是一般数据分析中的一个重要步骤,主要是由于它在主成分分析(PCA)中的应用。的BiocSingularpackage提供了使用单个包装器函数执行精确和近似SVD的方法。我们的目标是为其他Bioconductor软件包提供一个标准框架,用户可以在不同的SVD算法之间轻松切换。我们也支持并行化贯穿SVD计算的各个部分BiocParallel框架。
# SVD算法选择
要执行任何SVD,我们调用runSVD ()
函数。下面的代码执行一个精确的SVD来获得第一个k
奇异向量和值(本例中为10):
dummy <- matrix(rnorm(10000), ncol=25) e.out <- runSVD(dummy, k=10, BSPARAM=ExactParam()) str(e.out)
## $ d: num[1:10] 24.4 23.9 23.1 22.9 22.5…## $ u: num[1:40 00, 1:10] -0.09372 -0.02707 0.00729 -0.00641 0.01066…## $ v: num[1:25, 1:10] 0.065061 0.465998 -0.338473 -0.029838 -0.000806…
但是我们可以通过指定一个不同的BiocSingularParam
类的BSPARAM =
论点。例如,我们可以用近似的方法irlba而不是:
set.seed(1000) i.out <- runSVD(dummy, k=10, BSPARAM=IrlbaParam())
或者我们可以用随机化的SVDrsvd:
set.seed(1000) r.out <- runSVD(dummy, k=10, BSPARAM=RandomParam())
缺省情况下,当BSPARAM =零
.其他算法是近似的,但比low的精确SVD快得多k
.它们还涉及到随机化,所以要注意使用随机种子。
对于高大或肥胖的矩阵,在叉乘上执行奇异值分解可能比在矩阵本身上执行奇异值分解更快。叉乘通常比原始矩阵小得多,并且可以快速分解,节省的时间抵消了叉乘的成本。利用叉积分解的结果得到原始矩阵的分解结果。
“高”或“胖”的定义是基于尺寸的折叠差异。所有BiocSingularParam
对象具有褶皱
指定要计算的叉乘的尺寸之间最小折叠差的槽。这提供了一种自动的机制来决定是否应该使用交叉积。
epam <- ExactParam(fold=10) epam
##类:ExactParam ##跨产品折叠阈值:10.00 ##延迟居中/缩放:关闭
cr.out <- runSVD(dummy, k=10, BSPARAM=epam)
设置褶皱= 1
将计算所有矩阵的叉乘,即使是增益可以忽略不计的方阵。设置褶皱=正
永远不会计算任何矩阵的叉乘。默认为使用= 5折
.
控件可以对输入矩阵进行居中和缩放中心=
而且规模=
参数,分别。这些向量的长度应该等于输入矩阵的行数。然后SVD将被有效地执行t (t(虚拟)中心)/规模)
.
cs。- runSVD(dummy, k=10, scale=runif(ncol(dummy)), center=rnorm(ncol(dummy))))
许多近似算法(以及叉积的计算)都涉及到矩阵乘法。默认情况下,在任何乘法之前应用任何居中和缩放。然而,有可能“推迟”居中和缩放,这样乘法就可以利用底层矩阵表示的特征(例如稀疏性)。这使得计算速度更快,但牺牲了数值稳定性。
set.seed(2000) def.out <- runSVD(dummy, k=10, scale=runif(ncol(dummy)), center=rnorm(ncol(dummy)), BSPARAM=IrlbaParam(deferred=TRUE)))
SVD的主要实际目的是执行pca。这是通过runPCA ()
包装器函数,它也接受BSPARAM =
参数,指定要使用的算法类型:
个人电脑。- runPCA(dummy, rank=10, BSPARAM=ExactParam()) str(pcs.out)
## 3 ## $ sdev: num[1:10] 1.22 1.15 1.15 1.12…## $ rotation: num[1:25, 1:10] 0.065141 0.65864 -0.33853 -0.029862 -0.000804…# # . .- attr(*, "dimnames")= 2 ## .. ..$: null ## .. ..$: chr [1:10] "PC1" "PC2" "PC3" "PC4"…# # $ x: num 1:400 1:10] -2.288 -0.662 0.176 -0.157 0.26……# # . .- attr(*, "dimnames")= 2 ## .. ..$: null ## .. ..$: chr [1:10] "PC1" "PC2" "PC3" "PC4"…
输出与的输出相等prcomp ()
-主成分分数矩阵,旋转向量,以及由每个成分解释的标准偏差。
头(pcs.out x美元)
## pc1 pc2 pc3 pc4 pc5 pc6 ## [1,] -2.28836543 -0.005088504 - 0.1215491 - 0.4615798 -0.3795913 ## [2,] -0.66231190 -0.593552869 - 0.8889813 -0.08355081 -1.6417589 0.5222694 ## [3,] 0.17610681 -0.581214302 -1.3314832 -0.40977421 -1.4605159 -0.4954922 ## [4,] -0.15681334 -0.783137887 0.6542274 0.11570220 0.8610293 -0.3942107 ## [5,] 0.25961665 0.174974164 1.2359999 -0.74731536 -0.5603019 0.9505845 ## [6,] 0.05301977 0.539412924 - 1.31531774 -1.3153335 -0.1527365 #### [1,] -1.3398241 1.2252040 -0.43533736 -1.08645020 ## [2,] -0.2877867 -0.3340612 0.09030705 0.26171719 ## [3,] -1.4815112 -0.1693165 3.53207643 -0.52140348 ## [4,] 1.3050660 0.2166619 -0.20253499 -0.70411648 ## [5,] 0.4708046 0.1893536 -1.42183396 -0.00935545 ## [6,] -2.6508875 -0.9834861 0.04690857 -0.29286364
列居中默认执行中心= TRUE
.每个列的标准化可以通过规模= TRUE
.或者,数字向量可以传递给任意一个参数,用于对每列进行减法和缩放。
sessionInfo ()
## R版本4.2.1(2022-06-23)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.5 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基础包:## [1]stats graphics grDevices utils datasets methods基础## ##其他附加包:## [1]BiocParallel_1.32.0 BiocSingular_1.14.0 knitr_1.40 ## [4] BiocStyle_2.26.0 ## ##通过命名空间加载(并且未附加):## [4] BiocManager_1.30.19 jquerylib_0.1.4 MatrixGenerics_1.10.0 ## [7] tools_4.2.1 digest_0.6.30 jsonlite_1.8.3 ## [10] evaluate_0.17 lattice_0.20-45 rlang_1.0.6 ## [13] Matrix_1.5-1 DelayedArray_0.24.0 cli_3.4.1 ## [19] fastmap_1.1.0 string_1 .4.1 sass_0.4.2 ## [22] S4Vectors_0.36.0 IRanges_2.32.0 stats4_4.2.1 ## [25] grid_4.2.1 R6_2.5.1 rmarkdown_2.17 ## [28] bookdown_0.29 irlba_2.3.5.1 magrittr_2.0.3 ##[31] codetools_0.2-18 htmltools_0.5.3 matrixStats_0.62.0 ## [34] BiocGenerics_0.44.0 rsvd_1.0.5 beachmat_2.14.0 ## [37] ScaledMatrix_1.6.0 stringi_1.7.8 cachem_1.0.6