scRNA-10X Genomics 问题集锦
刘小泽写于19.5.13 使用一个新的工具肯定会遇到各种问题,但是一个好的工具一定会有详细的问题解决办法,比如10X官方就做了一个问题集锦,他们将询问邮件搜集整理出来,然后以Q&A的形式放在官网https://kb.10xgenomics.com/hc/en-us
一般做单细胞还主要是想看表达量,因此我先翻译整理一下关于Single Cell Gene Expression 的问题https://kb.10xgenomics.com/hc/en-us/categories/360000149952-Single-Cell-3-Gene-Expression
Q1:3’ and 5’ Gene Expression文库的差别
Q2:到底怎么建库测序的?机器的工作原理是怎样的?
先看个图片,有个大体印象
10X 机器做了什么?
10X公司把微珠加DNA标签、微滴反应、酶反应以及高通量测序后的数据分析整合到了一起,做了一个基于油包水乳浊液酶反应原理的分析系统。
看到的10X机器就是制备油包水的乳浊液,它搭配芯片一起工作,这个机器制备一次乳浊液大约耗时7-9分钟,能产生500-8万个细胞
再看看芯片(上图二),芯片有4排8列,也就是32个孔。每一列孔对应一个样本,也就是说,一张芯片一次可以处理8个样本。图中1️⃣的孔是用来放样本的(sample well),编号2️⃣是用来放预制微珠(gel beads),编号3️⃣是用来放油的,最上面那一排是做好乳浊液以后,回收乳浊液的孔
目前单细胞测序主要还是基于对一群细胞中每个细胞的表达量分析
工作原理第一步:微珠上DNA引物设计
先预制凝胶微珠,也就是所说的gel beads,然后每个凝胶微珠"种上"特定的DNA片段,每个DNA序列分成几段:
第一段是barcode,16bp碱基,大约350万种barcodes,一个微珠对应一个barcode,利用这么多barcode可以区分各个凝胶微珠。=》每个凝胶微珠的ID号
其中任意两个barcode之间至少差两个或者两个以上的碱基,因为测序存在对碱基的误读,这样设计可以避免将两个barcode搞混(可以试想,如果两个barcode之差一个碱基,那么就有16分之一的概率将两个判断成一个)
第二段是UMI序列,即unique molecular index,它是一段随机序列,也就是说每个DNA分子都有自己的UMI序列,UMI长为10bp,那么就有
4^10=1,048,576
也就是100多万种变化。它的作用就是经过了PCR+深度测序后,找到reads与原始cDNA的对应关系 =》 每个DNA标签分子的ID号它考虑到了这样一种情况:一个基因片段经过PCR扩增产生多个reads,但是不加标记我们是不知道的,并且不同基因的PCR扩增效率可能不同,因此一个基因最后得到的reads数就可能由于PCR扩增效率高而超过了另一个基因(而这两个基因的真实表达量可能差不多)。也就是排除"PCR bias”
第三段是Poly(dT)序列,它起到的作用是与mRNA的poly(A)尾巴结合,作为逆转录的引物,将cDNA逆转录出来
工作原理第二步:芯片的液流管路
细胞混悬液在第一个十字交叉口,与凝胶微珠混合;接着进入第二个交叉口,这时加上油滴,把凝胶微珠+细胞混悬液包裹起来=》油包水的小液滴=》这些油包水的小微滴就组成了乳浊液
乳浊液中,有的是包含一个细胞的(红圈部分),也有的不包含细胞,还有的有两个以上细胞(这个叫"Doublets”) ,一个小液滴中包含几个细胞是符合"泊松分布"的。
大部分细胞会匹配到一个小液滴中(细胞混悬液中大约有65%的细胞可以被成功包到有微珠的小液滴中=》也叫做细胞的捕获效率~65%),后续分析的reads就是从它们这里来的
工作原理第三步:测序文库构建
得到乳浊液后,就要脱掉细胞膜,让其中的mRNA游离出来=》
游离出来的mRNA与小液滴中的水相混合,水相中包括凝胶微珠上连着的核酸引物、逆转录酶、dNTP底物,发生逆转录反应=》
通过mRNA的polyA与凝胶微珠上的polyT互补,mRNA与凝胶微珠上带有标签的DNA分子结合起来,然后在逆转录酶作用下,逆转录出cDNA=》
这样得到的cDNA分子是带有微珠特定的barcode标签的,并且每个cDNA分子带有特定的UMI标签,有了这两个标签,就可以区分这个特定的cDNA与其他的cDNA=》
然后将乳浊液中所有的水相抽出来,也就是把带有标签的cDNA分子抽出来=》
cDNA分子加接头,PCR扩增,得到illumina文库
数据构成
一个样本一般就测几百或几千细胞,barcode种类却有3百多万,所以很少出现一个barcode对应两个细胞的情况。因此得到的数据可以通过barcode拆分,将测序reads回溯到每个细胞
当然,是有可能出现一个barcode对应两个甚至多个细胞的情况,这时如果按照barcode去拆分,就会将这两个或者多个细胞的reads组合成一个**“pool**"。因此,为了减少pool的出现,就要在细胞混悬液制备阶段,控制原始的细胞数量
所以这里看到,并不是制备的细胞数越多越好。原始细胞数越少,最后的混合pool就越少,这也是符合泊松分布的。一般来说一个样本混悬液的细胞数在1万以下比较好
利用UMI对reads进行简并,就可以看到细胞reads与基因数量之间的关系,比如这样:横坐标是细胞reads数,纵坐标是基因数,reads数越多能得到的基因也就越多。一般来说一个细胞读到30万条reads后,基因数量随reads数增加的速度会变慢=》基因数量”平台期”
一般一个细胞可以得到4万-8万个有效的UMI,平均一个细胞的一个基因有10个UMI;
一个细胞的一个基因的表达量是衡量这个细胞的一个维度,于是几千个被测基因的表达量形成了几千个维度。如果将成千上万个细胞放在一起分析,经过降维、聚类,放到一个三维空间并加上颜色,就形成了这样的分布形式
然后如果将三维空间的一团细胞拿出来,放大,继续细分,就能得到这团细胞的亚型
Q3:什么是barcode whitelist?
https://kb.10xgenomics.com/hc/en-us/articles/115004506263
就是10X试剂盒中包含的全部已知的barcode序列,在构建文库时发挥作用。例如:在Single Cell 3’ and V(D)J的应用中,有约737,000 cell barcodes在whitelist中,whitelist相当于一个"标准”
例如前10个:
AAACCTGAGAAACCAT
AAACCTGAGAAACCGC
AAACCTGAGAAACCTA
AAACCTGAGAAACGAG
AAACCTGAGAAACGCC
AAACCTGAGAAAGTGG
AAACCTGAGAACAACT
AAACCTGAGAACAATC
AAACCTGAGAACTCGG
AAACCTGAGAACTGTA
可以从软件安装包中找到:cellranger-2.1.0/cellranger-cs/2.1.0/lib/python/cellranger/barcodes/737K-august-2016.txt
Q4:cellranger怎样校正barcode测序错误的?
- 如果数据中的barcode也存在于whitelist中,就计算它们在数据中出现的频率
- 如果数据中的barcode不存在于whitelist中,就找与whitelist相差1-Hamming-distance的barcode:首先看看现在的barcode和whitelist中的barcode的碱基质量值,对它们不同的碱基计算后验概率;如果后验概率超过0.975,就找到后验概率值最大的那个barcode,将这个barcode替换成whitelist中的barcode
By definition from Wikipedia, the Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different. In other words, it is the number of substitutions required to transform one string into another. 前提是两个字符串长度相等,然后hamming的距离就是这两个字符串之间的差异数量。这里说的1-Hamming-distance应该就是数据的barcode和标准的barcode之间差一个碱基
结果产生的BAM文件中,原始未校正的barcode被打上CR
标签,校正后的是CB
Q5:利用cellranger分析SRA数据
利用fastq-dump
的--split-files
参数,可以生成两个fq文件,但是命名要注意
Q6:利用seurat检验10X Aggr整合的数据
另外还可以用seurat来整合10X数据:https://satijalab.org/seurat/merge_vignette.html