这是Bioc2016工作坊“用R和Bioconductor分析单细胞RNA-seq数据”的第三部分。
在本部分中,我们将使用Githubpkg(“kstreet13 /弹弓”)
包中。
的目标弹弓
就是使用聚类来揭示全局结构,并将该结构转换为由一维变量表示的平滑谱系,通常称为“伪时间”。“我们提供了以无监督或半监督的方式学习集群关系的工具,并构建了表示每个谱系的平滑曲线,并为每个步骤提供了可视化方法。
弹弓
分析最小的投入弹弓
是表示降维空间中的单元格的矩阵和聚类结果的向量。分析过程如下:
get_lineages
函数,可选地指定已知的起始和结束点。get_curves
函数。plot_tree
曲线的稳定性plot_curves
.使用集群之间的连接来定义全局结构可以提高推断谱系的稳定性。我们使用平滑曲线代替分段线性曲线,减少了推断伪时间向量的可变性。
我们将从前面的部分中获取输入:用司康饼
和获得的集群分配clusterExperiment
,两者都可以直接从工作坊包中加载。
data('full_pca') ##检查降维# plot3d(pcaX, aspect = 'iso') pairs(pcaX[,1:3], asp = 1)
get_lineages
的get_lineages
函数以an作为输入n x p
矩阵和向量的聚类结果的长度n
.然后,它使用最小生成树(MST)映射相邻集群之间的连接,并识别通过这些连接表示潜在谱系的路径。
通过指定已知的起始点和结束点集群,可以以完全无监督的方式或半监督的方式执行此分析。我们建议您指定根集群;这将不会影响集群的连接方式,但它将允许在具有分支结构的数据集中获得更好的曲线。预先指定的端点集群将被限制为仅一个连接。
l1 <- get_lineages(pcaX, clus)
使用完整的协方差矩阵
# plot_tree(pcaX, clus, l1, threeD = TRUE)
运行get_lineages
在没有监督的情况下产生上面所示的连接。由于没有指定根集群,弹弓
根据简单的简约规则,选择一个叶节点集群作为开始。根集群是由绿线连接的叶节点集群。
l2 <- get_lineages(pcaX, clus, start.)clu = m10)
使用完整的协方差矩阵
# plot_tree(pcaX, clus, l2, threeD = TRUE)
当我们指定根集群时,我们得到相同的连接,唯一的区别是哪条线是绿色的。
3 <- get_lineages(pcaX, clus, start。Clus = 'm10',结束。clu =“m17星云”)
使用完整的协方差矩阵
# plot_tree(pcaX, clus, l3, threeD = TRUE)
在这里,我们演示了指定端点集群的能力,这对连接施加了约束。我们现在绘制MST,约束条件是给定的端点集群必须是叶。预先指定的端点集群由红线连接。
还有一些我们可以传递的附加参数get_lineages
更多更大的控制:
dist.fun
是计算集群之间距离的函数。默认是由它们的联合协方差矩阵归一化的聚类中心之间的距离的平方。ω
粒度参数,允许用户设置连接距离的上限。它接受0到1之间的值(或正
),表示最大观测距离的百分比。distout
是一个逻辑值,指示用户是否希望在输出时返回成对的集群距离矩阵。构建MST后,get_lineages
在树中标识要指定为谱系的路径。在这个阶段,沿袭将由一组有序的集群名称组成,从根集群开始,以叶集群结束。的输出get_lineages
是这些向量的列表,以及关于它们是如何构造的一些附加信息。
get_curves
为了沿着这些不同的谱系建模发展,我们将用函数构造光滑的曲线get_curves
.使用基于所有单元格的平滑曲线消除了单元格投影到分段线性轨迹顶点上的问题弹弓
聚类结果对噪声具有较强的鲁棒性。
为了建立流畅的血统,get_curves
采用的迭代过程类似于中所示的主曲线(hasttie and Stuetzle 1989).当只有一个分支时,得到的曲线只是通过数据中心的主曲线,只需要进行一个调整:初始曲线是用簇中心之间的线性连接构造的,而不是数据的第一个主成分。这种调整增加了稳定性,通常加速了算法的收敛。
当有两个或两个以上的谱系时,我们在算法中增加了一个额外的步骤:平均共享细胞附近的曲线。这两个谱系在尚未分化的细胞上应该相当一致,所以在每次迭代中,我们对这些细胞附近的曲线取平均值。这增加了算法的稳定性,并产生平滑的分支谱系。
crv <- get_curves(pcaX, clus, l2) # plot_curves(pcaX, clus, c, threeD = TRUE) plot_curves(pcaX, clus, crv, dim = 3)
的输出get_curves
每个曲线都有一个元素的列表。的对象principal.curve
类,具有以下槽位:
年代
:构成曲线的点矩阵。这些对应于数据点的正交投影,但顺序是这样的行(年代)
会产生平滑的曲线。标签
中原始数据点的索引年代
.λ
:点的圆弧长度年代
沿着曲线。经销
:数据点与其在曲线上的投影之间的总距离平方。拟时间
:沿此沿袭伪时间值的向量。通常情况下,下一步将是找到随着发育时间的变化而改变其表达的基因。这可以使用完整的基因样本数据矩阵来完成,但我们将使用由1000个最可变的基因组成的子集。
数据(“var_genes”)
为了快速分析,我们将使用通用相加模型(GAM)在我们生成的两个伪时间向量上回归每个基因。这使得我们能够检测到在发育过程中基因表达的非线性模式。
gam。Pval <- vector("list",length(crv)) for(l in 1:length(crv)){t <- crv[[l]]$pseudotime y <- vargenes[,!Is.na (t)] t <- t[!is.na gam (t))。pval [[l]] < -应用(y, 1,函数(z) {d < - data.frame (z = z, t = t) tmp < - gam (z ~瞧(t), data = d) p <——总结(tmp) [4] [[1]] [1,5] p})}
然后,我们可以挑选出每个谱系的顶级基因,并用热图将它们在发育过程中的表达可视化。
topgenes1 < -名字(排序(gam。pval[[1]], deleting = FALSE))[1:100] heatdata1 <- vargenes[rownames(vargenes) %in% topgenes1, order(crv[[1]]$pseudotime, na。last = NA)] heatclus1 <- clus[order(crv[[1]]$pseudotime, NA .]last = NA)] ce1 <- clusterExperiment(heatdata1, heatclus1, transform =identity) plotHeatmap(ce1, clusterSamplesData="orderSamplesValue")
topgenes2 < -名字(排序(gam。pval[[2]], deleting = FALSE))[1:100] heatdata2 <- vargenes[rownames(vargenes) %in% topgenes2, order(crv[[2]]$pseudotime, na。last = NA)] heatclus2 <- clus[order(crv[[2]]$pseudotime, NA .]last = NA)] ce2 <- clusterExperiment(heatdata2, heatclus2, transform =identity) plotHeatmap(ce2, clusterSamplesData="orderSamplesValue")
sessionInfo ()
## R版本3.3.0(2016-05-03)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 14.04.4 LTS下## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_US。UTF-8 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_TELEPHONE= c# [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]splines parallel stats4 stats graphics grDevices utils ## [8] datasets methods base ## ##其他附加的包:# [1] gam_1.12 foreach_1.4.3 ## [3] slingshot_0.0.0.9005 RColorBrewer_1.1-2 ## [5] sccone_0.0.5 MAST_0.934 ## [7] reshape_0.8.5 cluster_2.0.4 ## [9] clusterExperiment_0.99.1-9003 SummarizedExperiment_1.3.5 ## [11] Biobase_2.33.0基因组icranges_1 .25.8 ## [13] GenomeInfoDb_1.9.1 IRanges_2.7.11 ## [15] S4Vectors_0.11.7 BiocGenerics_0.19.1 ## [17] bioc2016singlecell_0.0.1 devtools_1.11.1 ## [19] BiocStyle_2.1.10 ## ##通过命名空间加载(并没有连接):# # # # [1] colorspace_1.2-6 hwriter_1.3.2 [3] class_7.3-14 modeltools_0.2-21 # # [5] mclust_5.2 XVector_0.13.2 # # [7] flexmix_2.3-13 AnnotationDbi_1.35.3 # # [9] mvtnorm_1.0-5 xml2_0.1.2 # # [11] codetools_0.2-14 R.methodsS3_1.7.1 # # [13] doParallel_1.0.10 bold_0.3.5 # # [15] DESeq_1.25.0 robustbase_0.92-6 # # [17] geneplotter_1.51.0 knitr_1.13 # # [19] ade4_1.7-4 jsonlite_0.9.22 # # [21] locfdr_1.1-8 Rsamtools_1.25.0 # # [23] phylobase_0.8.2 gridBase_0.4-7 # # [25] annotate_1.51.0 kernlab_0.9-24 # # [27]R.oo_1.20.0 rentrez_1.0.2 ## [29] httr_1.2.0 assertthat_0.1 ## [31] Matrix_1.2-6 lazyeval_0.2.0 ## [35] formatR_1.4 htmltools_0.3.5 ## [37] tools_3.3.0 igraph_1.0.1 ## [39] gtable_0.3.0 taxize_0.7.8 ## [41] reshape2_1.4.1 dplyr_0.4.3 ## [43] ShortRead_1.31.0 Rcpp_0.12.5 ## [45] NMF_0.20.6 trimcluster_0.1-2 ## [47] Biostrings_2.41.4 gdata_2.17.0 ## [51] rtracklayer_1.33.7 iterators_1.0.8 ## b[53] fpc_1 . 2.1-10 string_1 .0.0 ## [35]## [63] MASS_7.3-45 scales_0.4.0 ## [65] aroma.light_3.3.0 yaml_2.1.13 ## [67] RUVSeq_1.7.2 memoise_1.0.0 ## [69] ggplot_2 .1.0 pkgmaker_0.22 ## [71] segmented_0.5-1.4 biomaRt_2.29.2 ## [73] latticeExtra_0.6-28 stringi_1.1.1 ## [75] RSQLite_1.0.0 genefilter_1.55.2 ## #[77]基因组features_1 .25.14 caTools_1.17.1 ## [79] boot_1.3-18 BiocParallel_1.7.4 ## #[81] chron_2.3-47 prabclus_2.2-6 ## [83] matrixstats_0.0.2 bitops_1.0-6 ## [85] rncl_0.6.0 evaluate_0.9 ## [87] lattice_0.20-33基因组icalignments_1.9.4 ## [89] rredlist_0.1.0 plyr_1.8.4 ## [93] magrittr_1.5 R6_2.1.2 ## [93] gplots_3.0.1 DBI_0.4-1 ## # [95] whisker_0.3- 3-2 withr_1.0.2 ## # [97] mixtools_1.0.4 RCurl_1.95-4.8 ## [101] nnet_7.3- 39-4 abind_1.4-3 ## # [103] EDASeq_2.7.2 uuid_0.1- 1 ## [107] rmarkdown_0.9.6 RNeXML_2.0.6 ## [109] grid_3.3.0 data.table_1.9.6 ## [111] digest_0.6.9 diptest_0.75-7 ## [113] xtable_1.8-2 tidyr_0.5.1 ## [115] R.utils_2.3.0 munsell_0.4.3 ## [117] registry_0.3
海斯蒂,特雷弗和沃纳·斯图茨勒,1989年。“主曲线。”美国统计协会杂志84(406): 502 - 16。