内容

1介绍

RNA Droplet-based单细胞测序(scRNA-seq)技术允许研究人员获得transcriptome-wide对成千上万的细胞表达谱。简单地说,每一个细胞都封装在一个在油水乳液液滴,连同一个珠包含反转录引物和一个独一无二的条形码序列。反转录后在液滴内部,每个细胞的cDNA标签与条码(称为“细胞条形码”)。液滴破裂收益率的cDNA图书馆准备和测序。Debarcoding执行的序列可以获得每个细胞的表达谱。

这个方案实现了一些基本工具来处理这些数据经过量化的表达。特别是,我们专注于10倍基因组平台,提供负载的函数矩阵独特的分子标识符(UMI)计数以及原始的分子信息。函数也可用于将采样UMI数矩阵或原始读取;为区分细胞空滴,基于UMI计数;和消除的影响条形码交换Illumina公司4000测序仪。

2阅读在10倍基因组数据

2.1从UMI数矩阵

CellRanger管道从10 x基因组学将处理的原始测序数据并生成一个矩阵UMI计数。这个矩阵的每一行对应一个基因,而每一列对应一个条形码。这是保存在一个为每个样本目录,通常命名基因组<输出> /细节/ filtered_gene_bc_matrices / < >1如果你使用“过滤”矩阵,每一列对应一个假定的细胞。如果你使用“原始”矩阵,装载所有的条形码,没有区别是由细胞和空的水滴。。我们模拟了使用模拟数据目录下面一个例子:

#生成文件。示例(write10xCounts回声= FALSE) dir.name < - tmpdir list.files (dir.name)
# #[1]“条形码。tsv”基因。tsv matrix.mtx”

matrix.mtx文件包含UMI计数,而其他两个文件包含细胞条形码和基因注释。我们可以使用的这个加载到内存中read10xCounts函数,它返回一个SingleCellExperiment对象包含了所有的相关信息。这包括条形码序列为每个细胞(列),以及每个基因的标识符和符号(行)。

南加州爱迪生公司< - read10xCounts南加州爱迪生公司(dir.name)
# #类:SingleCellExperiment # #暗淡:100 10 # #元数据(1):# #样品化验(1):计数# # rownames (100): ENSG00001 ENSG00002……构成了rowData名字ENSG000099 ENSG0000100 # #(2):标识符号# # colnames:零# # colData名称(2):样本条形码# # reducedDimNames (0): # # spikeNames (0): # # altExpNames (0):

加载项本身作为一个稀疏矩阵,明确dgCMatrix矩阵包中。这样可以减少内存使用量只存储非零项,用于稀疏scRNA-seq数据大量的辍学生。

类(计数(sce))
# # [1]“dgCMatrix”# # attr(“包”)# #[1]“矩阵”

用户还可以一次加载多个样本,通过提供一个特征向量read10xCounts。这将返回一个单一的SingleCellExperiment所有个人矩阵结合的列。显然,这才有意义使用同一组基因在样品。

2.2从分子信息文件

CellRanger还将产生一个分子信息文件(molecule_info.h5),其中包含…嗯,记录的信息分子。这包括UMI序列2读者不熟悉umi,他们允许读取不同的PCR扩增子明确分配给相同的原始的分子。,细胞条形码序列,指定的基因,然后读取的分子的数量。出于演示的目的,我们创建一个示例分子信息文件如下:

set.seed (1000) mol.info.file < - DropletUtils::: sim10xMolInfo (tempfile ()) mol.info.file
# # [1]“/ tmp / Rtmp7vMc1e / file41e43bdfcd86.1.h5”

我们可以随后这些信息加载到R会话使用read10xMolInfo功能:

mol.info < - read10xMolInfo mol.info (mol.info.file)
# # # #元数据DataFrame 9532行5列# #细胞umi gem_group基因读# # <人物> <整数> <整数> <整数> <整数> # # 1 TGTT 80506 1 18 12 # # 2 CAAT 722585 1 233634 17 # # 3 AGGG 1 4 17 # # 13 # # 5 ATAG TCCC 516870 1 887407 1 6 8 # #………………# # 9528机智1043995 1 9 18 # # 9529 GCTG 907401 1 255710 7 # # 9530阿塔1 13 7 # # 9531 GCAC 672962 1 20 12 # # 9532 TGAA基因1 1 10 # # # # 482852 # # [1]“ENSG1”“ENSG2”“ENSG3”“ENSG4”“ENSG5”“ENSG6”“ENSG7”“ENSG8”# # [9]“ENSG9”“ENSG10”“ENSG11”“ENSG12”“ENSG13”“ENSG14”“ENSG15”“ENSG16”# # [17]“ENSG17”“ENSG18”“ENSG19”“ENSG20”

此信息可以用于质量控制的目的,尤其是当底层读计数是必需的,例如,调查测序饱和。注意,函数将自动猜条形码序列的长度,这不是正式定义的分子信息文件。对于大多数实验中,猜测是正确的,但用户可以强制函数使用一个已知的条码的长度barcode.length论点。

3将采样各批次

3.1从数矩阵

给非常不同的测序深度的多个批次,它可以有利于downsample最深最浅的批次的批次与覆盖。这避免了噪声技术的差异,可以通过批量驱动集群。我们可以实现这个目的使用downsampleMatrix在计算矩阵函数:

set.seed新(100)。计数< - downsampleMatrix(计数(sce),道具= 0.5)图书馆(矩阵)colSums(计数(sce))
# # [1]512 496 536 509 515 513 516 477 514 487
colSums (new.counts)
# # [1]256 248 268 255 258 257 258 239 257 244

上面的代码将downsample计数为每个细胞,这样总数量减半。计算一个适当的道具是用户的责任,这取决于他们的实验和哪些批次数量最低的报道。你也可以与特异性downsample比例通过提供一个向量道具

3.2从读

从技术上讲,将采样在读取更合适,因为它概括每细胞不同的测序深度的影响。这可以通过应用downsampleReads函数包含读计数的分子信息文件:

set.seed (100)。抽样< - downsampleReads (mol.info.file,道具= 1)之和(no.sampling)
# # 9532年[1]
与。抽样< - downsampleReads (mol.info.file,道具= 0.5)和(with.sampling)
# # 9502年[1]

上面的代码将downsample读取50%的原始森林覆盖整个实验。然而,函数将返回一个矩阵UMI计数,所以最后总数实际上可能不会降低如果测序饱和度高!用户应该使用downsampleMatrix相反,如果他们想要保证类似将采样后的总数。

4计算条形码排名

有用的诊断droplet-based数据条码等级图,显示了(日志)UMI总数为每个条码在轴和轴上的(日志)排名。这实际上是一个转置经验累积与对数转换轴密度图。是有用的,因为它允许用户在条形码检验总数的分布,关注那些最大的计数。为了演示,让我们模拟了一个计算矩阵:

set.seed(0)我的。计数< - DropletUtils::: simCounts ()

我们计算统计使用barcodeRanks函数,然后创建如下所示的图。

br。< - barcodeRanks (my.counts) #做一个阴谋。情节(br。美元的地位,br。总美元,日志=“xy”, xlab =“排名”,ylab =“总”)o < -订单(br.out排名美元)行(br。美元地位[o], br。安装[o],美元=“红色”)abline上校(h =元数据(br.out) $膝盖,坳=“dodgerblue”, lty = 2) abline (h =元数据(br.out) $拐点,坳=“forestgreen”, lty = 2)传说(“bottomleft lty = 2,坳= c (“dodgerblue”、“forestgreen”),传说= c(“膝盖”,“拐点”))

曲线上的膝盖和拐点的两个组件之间的过渡总计数分布。这是假定为代表的区别空滴小RNA和cell-containing滴更RNA,尽管更严格的方法来区分这两个可能性是下面要讨论的。

5检测空滴

空的水滴从环境解决方案通常包含RNA,导致debarcoding后非零项。的emptyDrops函数是用来区分空液滴和细胞。它是通过测试每一个条形码的表达谱显著偏离环境概要文件。给定一个矩阵my.counts包含UMI计数所有条形码,我们称之为:

set.seed (100) e。<——emptyDrops e.out (my.counts)
# # DataFrame 11100行5列# #总LogProb PValue有限# # <整数> <数字> <数字> <逻辑> # # 1 2 NA NA NA # # 2 9 20 NA NA NA NA NA NA # # 3 # # 4 20 NA NA NA # # 5 1 NA NA NA # #……………# # 11096 215 -246.428398419154 - 9.99900009999 e-05真# # 11097 201 -250.233733996276 - 9.99900009999 e-05真# # 11098 247 -275.904828737003 9.99900009999 e-05真正的# # 11099 191 -228.762585591832 - 9.99900009999 e-05真# # 11100 198 -233.042851615118 - 9.99900009999 e-05真# #罗斯福# # <数字> # # 1 # # 2 NA NA # # 3 # # 4 NA NA # # 5 NA # #……# # 0.00014426970177566 0.00014426970177566 0.00014426970177566 # # 11097 # 11096 # 11098 # # # # 11100 0.00014426970177566 11099 0.00014426970177566

有重大偏离的液滴检测到环境概要文件在指定的罗斯福阈值,例如,罗斯福低于1%。这些可以被认为是cell-containing滴,假阳性(即频率。空滴),指定的罗斯福。此外,水滴和非常大的数量会自动保留通过设置他们的p值为零。这避免了丢弃液滴含有细胞非常相似环境概要文件。

是多少。细胞< - e。罗斯福< = 0.01美元(求和。细胞,na.rm = TRUE)
# # 902年[1]

p值计算了排列测试,因此需要设置一个种子。的有限的指出是否较低的假定值可以通过增加获得的数量排列。如果有任何条目罗斯福以上所需的阈值= = TRUE有限,这表明《不扩散核武器条约》应该增加的吗emptyDrops调用。

表(有限= e。有限,美元重要= is.cell)
# #重要# #有限假真# #假398 802 # #真正的0 100

我们建议做一些诊断情节如总菌数与负对数概率。液滴检测细胞应该出现大- log-probabilities非常大的总数量(基于曲线拐点的报道barcodeRanks)。注意,下面的例子是基于模拟数据和很夸张。

情节(e。总美元,- e。美元LogProb坳= ifelse (。细胞,“红色”,“黑”),xlab =“UMI总数”,ylab =“日志概率”)

6删除条码交换的影响

条形码交换产生的一种现象在多路复用样品4000年Illumina公司音序器。分子从一个样本被错误地贴上标签样本从另一个样本条形码,导致他们misassignment多路分解。幸运的是,液滴实验提供一个独特的机会来消除这种影响,通过假设实际上是不可能产生多个相同的分子细胞条形码、分配基因和UMI序列。因此,任何相同的分子组合多个样本可能来自条形码交换。

swappedDrops函数将识别重叠组合分子信息文件的多路复用10 x样品测序在相同的运行。它将删除这些组合并返回“清洗”UMI数矩阵中所有样品使用下游分析。证明,我们模拟了一组分子信息文件三个多路复用10 x样本:

set.seed (1000) mult.mol.info < - DropletUtils::: sim10xMolInfo (tempfile (), nsamples = 3) mult.mol.info
# # [1]“/ tmp / Rtmp7vMc1e / file41e460a6149a.1。h5“# #”[2] / tmp / Rtmp7vMc1e / file41e460a6149a.2。h5“# #”[3] / tmp / Rtmp7vMc1e / file41e460a6149a.3.h5”

然后,我们应用swappedDrops删除这些文件交换在我们数矩阵的影响。

年代。<——swappedDrops (mult.mol.info min.frac = 0.9)长度(s.out清洗美元)
# # 3 [1]
类(s.out清洗美元[[1]])
# # [1]“dgCMatrix”# # attr(“包”)# #[1]“矩阵”

组合,90%的阅读属于一个样本,样本的分子是分配给而不是删除。这假设交换相对罕见,所以阅读数应该是最高的样本来源。完全可以通过改变调整比例min.fracswappedDrops调用。

7会话信息

sessionInfo ()
# # R版本3.6.1(2019-07-05)# #平台:x86_64-pc-linux-gnu(64位)# #下运行:Ubuntu 18.04.3 LTS # # # #矩阵产品:默认# #布拉斯特区:/home/biocbuild/bbs - 3.10 - bioc / R / lib / libRblas。所以# # LAPACK: /home/biocbuild/bbs - 3.10 - bioc / R / lib / libRlapack。# # # #语言环境:# # [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C # #[3]而= 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 = C LC_TELEPHONE = # # [11] LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C附加基本包:# # # # # #[1]平行stats4统计图形grDevices跑龙套数据集# #[8]方法基础# # # #其他附加包:# # [1]Matrix_1.2-17 DropletUtils_1.6.1 # # [3] SingleCellExperiment_1.8.0 SummarizedExperiment_1.16.0 # # [5] DelayedArray_0.12.0 BiocParallel_1.20.0 # # [7] matrixStats_0.55.0 Biobase_2.46.0 # # [9] GenomicRanges_1.38.0 GenomeInfoDb_1.22.0 # # [11] IRanges_2.20.0 S4Vectors_0.24.0 # # [13] BiocGenerics_0.32.0 knitr_1.25 # # [15] BiocStyle_2.14.0 # # # #通过加载一个名称空间(而不是附加):# # [1]Rcpp_1.0.2 compiler_3.6.1 BiocManager_1.30.9 # # [4] XVector_0.26.0 R.methodsS3_1.7.1 R.utils_2.9.0 # # [7] bitops_1.0-6 tools_3.6.1 zlibbioc_1.32.0 # # [10] digest_0.6.22 evaluate_0.14 rhdf5_2.30.0 # # [13] lattice_0.20-38 rlang_0.4.1 yaml_2.2.0 # # [16] xfun_0.10 GenomeInfoDbData_1.2.2 stringr_1.4.0 # # [19] locfit_1.5 - 9.1 grid_3.6.1 HDF5Array_1.14.0 # # [22] rmarkdown_1.16 bookdown_0.14 limma_3.42.0 # # [25] edgeR_3.28.0 Rhdf5lib_1.8.0 magrittr_1.5 # # [28] htmltools_0.4.0 dqrng_0.2.1 stringi_1.4.3 # # [31] rcurl_1.95 - 4.12 R.oo_1.22.0