TrajectoryUtils 1.7.0
的TrajectoryUtils包包含支持轨迹推断包的低级实用程序。支持这里的关键词是:这个包本身不执行任何推断,将其推迟到更高级别的包,如TSCAN而且弹弓.事实上,在我们意识到这两个包的共性之后,这个包中的大部分代码都从它们中分离出来了。通过将其推出到一个单独的包中,我们可以减少冗余,促进功能的更好传播并简化维护。如果您是一名开发人员,并且您有轨迹推断的一般实用程序,欢迎您的贡献。
基于集群的最小生成树的构建是这个包的主要动机,因为它是在TSCAN而且弹弓.这个想法很简单——聚类细胞,并从聚类质心创建最小生成树,作为轨迹重建的主干。
模仿y型轨迹。centers <- rbind(c(0,0), c(0, -1), c(1,1), c(- 1,1)) rownames(centers) <- seq_len(nrow(centers)) clusters <- sample(nrow(centers), 1000, replace=TRUE) cells <- centers[clusters,] cells <- cells + rnorm(length(cells), sd=0.5) #创建MST: library(TrajectoryUtils) MST <- createClusterMST(cells, clusters) plot(MST)
在createClusterMST ()
结合了前面提到的两个包中的一些有用的想法:
外围集团= TRUE
,用户可以通过添加外组来分隔距离较远的集群。这确保了MST不会在数据集的不相关部分之间形成虚假链接。dist.method = "内容"
时,用户可以根据最近邻之间的距离创建MST。这避免了相邻异构簇之间边缘的形成。dist.method =“弹弓”
时,马氏距离由每个簇中细胞的协方差矩阵计算。这解释了构建MST时集群的形状和分布。use.median = TRUE
时,质心是通过取中位数而不是平均值来计算的。这可以防止具有许多异常值的集群。构造MST之后,我们可以使用guessMSTRoots ()
函数来猜测可能的根。MST的每个组件都有一个根,但是根的选择取决于方法
在使用。例如,我们可以选择一个根节点,使到所有终端(度-1)节点的步长/距离最大化;这将导致在通过MST定义路径时产生更少的分支事件。
guessMSTRoots (mst,方法=“maxstep”)
##[1]“2”
guessMSTRoots (mst,方法=“minstep”)
##[1]“1”
方法定义从根到所有终端节点的路径defineMSTPaths ()
函数。每条路径的解释取决于所选根的适当性;例如,在发展环境中,如果根对应于一些未分化的状态,那么每条路径都可以被视为一个谱系。
defineMSTPaths (mst,根= c (" 1 "))
# # # #[1]([1])“1”“2 " ## ## [[ 2]] # #[1]“1”“3 " ## ## [[ 3]] # #[1]“1”“4”
defineMSTPaths (mst,根= c(“2”)
# # # #[1]([1])“1”“2 3 " ## ## [[ 2]] # #[1]“2”“1”“4”
或者,如果时间信息是可用的(例如,从实验时间过程,或从计算方法,如RNA速度),我们可以使用它来定义通过MST的路径,基于细胞从局部极小值到最近的局部极大值的假设运动。在下面的模拟示例中,集群1上的分支点具有最高的时间,因此所有路径都从终端节点收敛到集群1。
defineMSTPaths (mst,乘以= c(1 = 4, ' 2 ' = 0,“3”= 1,“4”= 0))
# # # #[1]([1])“1“2” " ## ## [[ 2]] # #[1]“3””1 " ## ## [[ 3]] # #[1]“4”“1”
我们还可以使用无根方法定义通过MST的路径,只需将所有未分支的段定义为单独的路径。这将MST分解为更简单的结构,例如,检测标记基因,而无需显式定义根或需要外部信息。事实上,人们可能更喜欢这种方法,因为它允许我们以更模块化的方式解释MST的每个部分,而不会因为跨不同路径共享来自公共根的节点而导致重复工作。
splitByBranches (mst)
# # # #[1]([1])“1“2” " ## ## [[ 2]] # #[1]“3””1 " ## ## [[ 3]] # #[1]“4”“1”
PseudotimeOrdering
类我们可以创建一个矩阵形式的伪时间顺序的紧凑表示,其中行是单元格,列是通过轨迹的路径。每个单元格接收一个伪时间值沿着路径-或NA
,如果细胞不在那条路径上。有时,我们可能希望在单元格或路径上用元数据对此进行注释。这是由PseudotimeOrdering
类:
#构造一个伪时间排序矩阵。ncells <- 200 npaths <- 5 orderings <- matrix(rnorm(1000), ncells, npaths) #默认构造函数:(pto <- pseudotimeorders (orderings))
##类:PseudotimeOrdering ## dim: 200 5 ##元数据(0):## pathStats(1): " ## cellnames: NULL ## cellData names(0): ## pathnames: NULL ## pathData names(0):
然后在单元格上添加元数据就很简单了:
pto$cluster <- sample(LETTERS[1:5], ncells, replace=TRUE)
##数据帧200行和1列##集群## <字符> ## 1 B ## 2 E ## 3 A ## 4 D ## 5 A ## ... ...## 200 d
或者在小路上:
$description <- sprintf("PATH-%i", seq_len(npaths))
## 5行1列的数据帧##描述## <字符> ## 1 PATH-1 ## 2 PATH-2 ## 3 PATH-3 ## 4 PATH-4 ## 5 PATH-5
如果每个单元格/路径组合有多个统计信息可用,还可以添加其他矩阵。例如,可以想象将每个单元格的置信度分配给每条路径。
pathStat(pto, "confidence") <- matrix(runif(1000), ncells, npaths) pathStatNames(pto)
##[1] ""信心"
为方便起见,我们还提供averagePseudotime ()
函数计算每个单元格的平均伪时间。这在只需要一组伪时间值的应用程序中有时是必要的,例如,用于可视化。
总结(averagePseudotime(美国专利商标局))
最小第一曲,中位数,平均第三曲,最大值。## -1.729899 -0.283950 -0.042914 -0.008204 0.298922 1.230771
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]stats4 stats graphics grDevices utils datasets methods ##[8]基础## ##其他附加包:[5] genomicranges_1.53 0 GenomeInfoDb_1.35.0 ## [7] IRanges_2.33.0 S4Vectors_0.37.0 ## [9] BiocGenerics_0.45.0 MatrixGenerics_1.11.0 ## [11] matrixStats_0.62.0 knitr_1.40 ## [13] BiocStyle_2.27.0 ## ##通过命名空间加载(并且没有附加):[1] Matrix_1.5-1 jsonlite_1.8.3 highr_0.9 ## [4] compiler_4.3.0 BiocManager_1.30.19 Rcpp_1.0.9 ## [7] string_4.1 magick_2.7.3 bitops_1.0-7 ## [10] jquerylib_0.1.4 yaml_2.3.6 fastmap_1.1.0 ## [13] igraph_1.3.5 DelayedArray_0.25.0 bookdown_0.29 ## [19] GenomeInfoDbData_1.2.9 bslib_0.4.0 rlang_1.0.6 # [22] cachem_1.0.6 stringi_1.7.8 xfun_0.34 ## [28] zlibbioc_1.45.0 digest_0.6.30 grid_4.3.0 ## [31]RCurl_1.98-1.9 rmarkdown_2.17 ## [34] pkgconfig_2.0.3 tools_4.3.0 htmltools_0.5.3