1概述

奇异值分解(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.它们还涉及到随机化,所以要注意使用随机种子。

2求叉乘

对于高大或肥胖的矩阵,在叉乘上执行奇异值分解可能比在矩阵本身上执行奇异值分解更快。叉乘通常比原始矩阵小得多,并且可以快速分解,节省的时间抵消了叉乘的成本。利用叉积分解的结果得到原始矩阵的分解结果。

“高”或“胖”的定义是基于尺寸的折叠差异。所有BiocSingularParam对象具有褶皱指定要计算的叉乘的尺寸之间最小折叠差的槽。这提供了一种自动的机制来决定是否应该使用交叉积。

epam <- ExactParam(fold=10) epam
##类:ExactParam ##跨产品折叠阈值:10.00 ##延迟居中/缩放:关闭
cr.out <- runSVD(dummy, k=10, BSPARAM=epam)

设置褶皱= 1将计算所有矩阵的叉乘,即使是增益可以忽略不计的方阵。设置褶皱=正永远不会计算任何矩阵的叉乘。默认为使用= 5折

3.定心或缩放

控件可以对输入矩阵进行居中和缩放中心=而且规模=参数,分别。这些向量的长度应该等于输入矩阵的行数。然后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)))

5运行PCA

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.1215437 - 1.143255491 2.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 0.4282860 0.79711774 - 1.3153535939 pc7 pc8 pc9 pc10 ## #[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.或者,数字向量可以传递给任意一个参数,用于对每列进行减法和缩放。

6会话信息

sessionInfo ()
## R正在开发中(不稳定)(2022-10-25 r83175) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 22.04.1 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.17-bioc/R/lib/libRblas。so ## LAPACK: /usr/lib/x86_64-linux-gnu/ LAPACK /liblapack.so.3.10.0 ## ## 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.33.0 BiocSingular_1.15.0 knitr_1.40 ## [4] BiocStyle_2.27.0 ## ##通过命名空间加载(并且未附加):## [1] MatrixGenerics_1.11.0 bslib_0.4.0 rlang_1.0.6 ## [28] cachem_1.0.6 stringi_1.7.8 xfun_0.34 ## [28] digest_0.6.30 grid_4.3.0 ## [10] IRanges_2.33.0 yaml_2.3.6 fastmap_1.1.0 ## [13] lattice_0.20-45 R6_2.5.1 ScaledMatrix_1.7.0 ## # [19] MatrixGenerics_1.11.0 bslib_0.4.0 rlang_1.0.6 ## [28] digest_0.6.30 grid_4.3.0 ##irlba_2.3.5.1 ## [31] S4Vectors_0.37.0 evaluate_0.17 codetools_0.2-18 ## [34] beachmat_2.15.0 stats4_4.3.0 rmarkdown_2.17 ## [37] matrixStats_0.62.0 tools_4.3.0 htmltools_0.5.3