检测单细胞RNA-Seq数据中的隐藏异质性

Donghyung李

2018年5月10日

iasva包可用于检测批量或单细胞测序数据中的隐藏异质性。为了说明如何使用iasva包进行异质性检测,我们使用了来自人类胰岛样本的真实单细胞RNA测序(scRNA-Seq)数据(Lawlor等人,2016年).

加载包

图书馆(irlba)图书馆(iasva)图书馆(上海广电)图书馆(Rtsne)图书馆(pheatmap)图书馆(corrplot)图书馆(DescTools)图书馆(RColorBrewer)图书馆(SummarizedExperiment)set.seedOne hundred.颜色。vec < -brewer.pal3.“set2”中的

加载胰岛单细胞RNA-Seq数据

为了说明ia - va如何用于检测同质细胞群(即α细胞)中隐藏的异质性,我们使用了来自健康(非糖尿病)受试者(n = 101)的α细胞的读取计数。

counts_file < -执行“extdata”“iasva_counts_test。Rds”包=“iasva”#矩阵的读取计数,其中基因为行,样本为列计数< -readRDS(counts_file)#矩阵示例注释/元数据anns_file < -执行“extdata”“iasva_anns_test。Rds”包=“iasva”ann < -readRDS(anns_file)

计算几何库大小,即对数转换读计数的库大小。

众所周知,几何文库大小(即对数转换读取计数的文库大小)或每个细胞中表达的基因的比例解释了scRNA-Seq数据的很大一部分可变性(希克斯等人。2015 BioRxivMcDavid等人,2016自然生物技术).通常,日志转换的scRNA-Seq读计数的第一主成分与几何库大小高度相关(r ~ 0.9)。在这里,我们计算几何文库大小向量,它将被用作ia - va算法中的已知因子。

geo_lib_size < -colSums日志(计数+1))barplot(geo_lib_sizexlab =“细胞”ylab =“几何Lib大小”拉斯维加斯=2

lcounts < -日志(计数+1# PC1和几何库大小的相关性pc1 < -irlba(lcounts-rowMeans(lcounts),1v (,1天哪(geo_lib_size pc1)
## [1] -0.99716

运行IA-SVA

在这里,我们使用patient_id和geo_lib_size作为已知因素运行ia - va,并确定5个隐藏因素。sv以成对的方式绘制,以揭示哪些sv可以分离细胞类型。

set.seedOne hundred.patient_id < -人工神经网络Patient_ID国防部< -model.matrixpatient_id+geo_lib_size)#创建一个总结的实验类summ_exp < -SummarizedExperiment化验=计数)iasva.res < -iasva(summ_exp,国防部[,-1),verbose =交换=num.sv =5
## ia - sa正在运行…
## ## SV 1检测到!
## ## SV 2检测到!
## ## SV 3检测到!
## ## SV 4检测到!
## ## SV 5检测到!
显著替代变量## ## #:5
iasva。sv < -iasva.ressv情节(iasva.sv [,1iasva.sv (),2),xlab =“SV1”ylab =“SV2”

cell_type < -as.factor(iasva.sv [,1>-0.1水平(cell_type) < -c“Cell1”“Cell2”表格(cell_type)
## cell_type ## Cell1 Cell2 ## 6
#我们根据SV1识别出6个红色标记的异常细胞(iasva.sv主要=“IA-SVA”pch =21坳=color.vec [cell_type],bg =color.vec [cell_type],oma =c44612))传说“正确”水平(cell_type),填补=color.vec,电池=“n”

情节(iasva.sv [,12),主要=“IA-SVA”pch =21xlab =“SV1”ylab =“SV2”坳=color.vec [cell_type],bg =color.vec [cell_type])

天哪(geo_lib_size iasva.sv [1])
## [1] -0.1469422
corrplot天哪(iasva.sv))

如上图所示,SV1清晰地将阿尔法细胞分为两组:6个离群细胞(红色标记)和其余的阿尔法细胞(蓝色标记)。寻找检测到的异质性的标记基因(SV1)。在这里,使用find_markers()函数,我们找到了与SV1显著相关的标记基因(多重检测校正p值< 0.05,默认显著性截止值,r平方值> 0.3,默认r平方截止值)。

标记。counts <-find_markers(summ_expas.matrix(iasva.sv [,1)))
## # of markers (): 33
##唯一标记的总数:33
nrow(marker.counts)
## [1]
rownames(marker.counts)
## [1] " pmepa1 " " fam198b " " flt1 " " eng " " sox4 " " itga5 " ## [7] " pxdn " " prdm1 " " erg " " clic4 " " a2m " " ppap2b " ## [13] " thbs1 " " clic2 " " s100a16 " " stc1 " " acvrl1 " " col4a1 " ## [19] " msn " " tnfaip2 " " mmp2 " " serpine1 " " sparc " " sparcl1 " ## [25] " esam " " kdr " cd9 " " cxcr4 " " podxl " " plvap " ## [31] " cald1 " " mmp1 " " adamts4 "
庵野。col <-data.framecell_type =cell_type)rownames(anno.col) < -colnames(marker.counts)(anno.col)
# 4th-C63_S30 Cell2 ## 4th-C66_S36 Cell2 ## 4th-C18_S31 Cell2 ## 4th-C57_S18 Cell1 ## 4th-C56_S17 Cell2 ## 4th-C68_S41 Cell2
pheatmap日志(marker.counts+1),show_colnames =clustering_method =“病房。D2”cutree_cols =2annotation_col =anno.col)

执行tSNE命令检测隐藏异构。

为了进行比较,我们将tSNE应用于所有基因的读取计数,以识别隐藏的异质性。我们使用带有默认设置的rtssne R包。

set.seedOne hundred.tsne。res < -Rtsnet(lcounts),dim =2情节(tsne.resY,主要=“tSNE”xlab =“tSNE Dim1”ylab =“tSNE Dim2”pch =21坳=color.vec [cell_type],bg =color.vec [cell_type],oma =c44612))传说“bottomright”水平(cell_type),填补=color.vec,电池=“n”

如上所示,当使用所有基因时,tSNE无法检测到ia - va识别的离群细胞。上面使用了相同的颜色编码。

运行tSNE后ia - va分析,即运行tSNE与ia - va检测到的SV1相关的标记基因。

在这里,我们将tSNE应用于从ia - va中获得的SV1标记基因

set.seedOne hundred.tsne。res < -Rtsne独特的t日志(marker.counts+1))),dim =2情节(tsne.resY,主要=tSNE post ia - vaxlab =“tSNE Dim1”ylab =“tSNE Dim2”pch =21坳=color.vec [cell_type],bg =color.vec [cell_type],oma =c44612))传说“bottomright”水平(cell_type),填补=color.vec,电池=“n”

使用SV1标记基因的tSNE能更好地分离这些尿路细胞。这些分析表明,利用ia - va结合tSNE分析进行基因选择是检测单细胞基因表达数据中引入可变性的罕见细胞的一种强有力的方法。

使用更快的ia - va实现(fast_iasva)

这里,我们使用上面演示的相同已知因素(patient_id和geo_lib_size)运行ia - va的更快实现。这个函数在处理特别大的数据集时非常有用。

iasva.res<-fast_iasva(summ_exp,国防部[,-1),num.sv =5
快速ia - sa运行…
## ## SV 1检测到!
## ## SV 2检测到!
## ## SV 3检测到!
## ## SV 4检测到!
## ## SV 5检测到!
获得的代理变量## ## #:5

ia - va调优参数

用于识别标记基因(find_markers)的r平方阈值对识别的标记基因数量和聚类结果的质量有很大影响。通过study_R2()函数,用户可以看到不同的r平方阈值如何影响这两个因素。

study_res < -study_R2(summ_exp iasva.sv)
## # of markers (): 274
##唯一标记的总数:274
## #的标记():177
##唯一标记总数:177
## #的标记():123
唯一标记的总数:123
## # of markers (): 84
##唯一标记总数:84
## # of markers (): 54
##唯一标记的总数:54
## # of markers (): 39
##唯一标记总数:39
## # of markers (): 30
##唯一标记的总数:30
## # of markers (): 23
唯一标记的总数:23
## # of markers (): 7
##唯一标记的总数:7
## # of markers (): 3
##唯一标记的总数:3
## # of markers (): 0
##唯一标记的总数:0

该函数生成了一个图,显示了在不同的r平方值下,所选基因的数量与聚类质量的关系(平均轮廓分数)。

会话信息

sessionInfo()
## R正在开发中(不稳定)(22-10-25 r83175) ##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 22.04.1 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.17-bio /R/lib/libRblas。因此## 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_TELEPHONE= c# [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils datasets methods ## [8] base ## ##其他附加的包:# # # # [1] SummarizedExperiment_1.29.0 Biobase_2.59.0 [3] GenomicRanges_1.51.0 GenomeInfoDb_1.35.0 # # [5] IRanges_2.33.0 S4Vectors_0.37.0 # # [7] BiocGenerics_0.45.0 MatrixGenerics_1.11.0 # # [9] matrixStats_0.62.0 RColorBrewer_1.1-3 # # [11] DescTools_0.99.47 corrplot_0.92 # # [13] pheatmap_1.0.12 Rtsne_0.16 # # [15] sva_3.47.0 BiocParallel_1.33.0 # # [17] genefilter_1.81.0 mgcv_1.8-41 # # [19] nlme_3.1 - 160 iasva_1.17.0 # # [21] irlba_2.3.5.1 Matrix_1.5-1 # # # #通过加载一个名称空间(而不是附加):## [1] DBI_1.1.3 bitops_1.0-7 gld_2.6.6 ## [4] readxl_1.4.1 rlang_1.0.6 magrittr_2.0.3 ## [7] e1071_1.7-12 compiler_4.3.0 RSQLite_2.2.18 ## [10] png_0.1-7 vctrs_0.5.0 stringr_1.4.1 ## [13] crayon_1.5.2 fastmap_1.1.0 XVector_0.39.0 ## [16] rmarkdown_2.17 bit_4.0.4 xfun_0.34 ## [19] zlibbioc_1.45.0 cachem_1.0.6 jsonlite_1.8.3 ## [22] blob_1.2.3 highr_0.9 DelayedArray_0.25.0 ## [25] parallel_4.3.0 cluster_2.1.4 R6_2.5.1 ## [28] bslib_0.4.0 stringi_1.7.8 limma_3.55.0 ## [31] boot_1.3-28 jquerylib_0.1.4 cellranger_1.1.0 ## [34] Rcpp_1.0.9 knitr_1.40 splines_4.3.0 ## [37] rstudioapi_0.14 yaml_2.3.6 codetools_0.2-18 ## [40] lattice_0.20-45 KEGGREST_1.39.0 evaluate_0.17 ## [43] survival_3.4-0 proxy_0.4-27 Biostrings_2.67.0 ## [46] RCurl_1.98-1.9 munsell_0.5.0 scales_1.2.1 ## [49] rootSolve_1.8.2.3 xtable_1.8-4 class_7.3-20.1 ## [52] lmom_2.9 tools_4.3.0 data.table_1.14.4 ## [55] annotate_1.77.0 locfit_1.5-9.6 Exact_3.2 ## [58] mvtnorm_1.1-3 XML_3.99-0.12 grid_4.3.0 ## [61] AnnotationDbi_1.61.0 edgeR_3.41.0 colorspace_2.0-3 ## [64] GenomeInfoDbData_1.2.9 cli_3.4.1 expm_0.999-6 ## [67] gtable_0.3.1 sass_0.4.2 digest_0.6.30 ## [70] farver_2.1.1 memoise_2.0.1 htmltools_0.5.3 ## [73] lifecycle_1.0.3 httr_1.4.4 bit64_4.0.5 ## [76] MASS_7.3-58.1