NGS的duplicate的问题

 

duplicate的三个问题:

一.什么是duplicate?

二.duplicate来源?

三.既然PCR将1个reads复制得到成百上千copies,那为什么二代数据duplicate rate 一般才10+%?

什么是 duplicate?

摘自罗俊峰博士,阅尔基因研发总监陈云地博士,阅尔基因CTO  http://www.biotrainee.com/thread-1382-1-1.html

一、什么是Duplicated Reads
1
谈到NGS数据的duplicated reads(暂且翻译为“重复数据”),我们通常会直观地认为:duplicated reads是在NGS文库构建过程中,由于PCR过度扩增导致同一个模板DNA片段被反复测序多次,得到一模一样的reads。

2
但是这经不起推敲。仔细一想,就很困惑。
PCR不就是用来产生重复数据的吗?否则不叫PCR了。除了PCR-free的文库构建方法以外,大部分NGS文库构建方法都有PCR步骤,难道说这些NGS数据都有问题?

这是不可能的。或许:
PCR可以产生重复序列,但是不能额外多产生一条或多条。设一个基因组有A、B两个片段,PCR后,如果得到1000A+1000B,是正确的;如果得到1000A+1000A+1000B,多出来的1000A就是重复数据?问题是,PCR怎么会凭空多出来1000条片段A的测序reads呢?这要PCR出了什么样的问题,才能产生出这样的结果?

PCR是不会这样的。或许:
A+B经过PCR后得到1500A+1000B,多出来的500条A是重复数据?这不就是大家常说的PCR bias吗?

到底什么是“过度扩增”呢?

3
严格的定义是这样的:
duplicated reads是PCR对同一个分子进行多次镜像复制的后果。
判断是否为镜像分子的标准是:reads的起始和终止位置一样,起点和终点之间的碱基序列一样(不妨简称为“三一样”)。只要起点、终点、或者起点与终点之间的序列三者之中有一个不同,就是不同的分子,称为unique reads。
镜像复制出来的分子个数与总分子数的比例就是duplication rate,duplication rate = 1 - unique reads / total reads。

4
PCR本来就是用来镜像复制DNA片段的。对于最理想的NGS数据分析,难道要尽可能把所有通过PCR获得的子链的测序数据全部去除,要把PCR的效果完全消除,要还原到没有PCR的状态?

是的。
设一个基因组有A、B两个片段,PCR后得到无论多少条reads,比如n・A+m・B条,在数据分析的时候,都只保留1条A和1条B(unique reads)用于组装,而去掉(n-1)条A和(m-1)条B。共有(n-1)条A和(m-1)条B被当成duplicatedreads看待,尽管它们是正常PCR的正常产物。

所以,
目前的算法其实是一个简化的处理方案,把所有重复的reads都去掉了,留下完全不重复的reads。算法没有能力区分“假重复”(人为造成的重复序列方面的bias)和“真重复”(天然存在的重复序列)。

所以,
对于NGS 数据而言,Duplicateddata是一个生物信息学概念,不是分子生物学概念;是人为规定的,不是文库构建、高通量测序等生化反应自然生成的。

以下摘自 wangpeng905  链接:https://www.jianshu.com/p/1e6189f641db

为什么会有 duplicate?

要弄清楚这个问题,需要从 NGS 数据产出流程说起:

  1. 基因组核酸提取
  2. 基因组 DNA 随机打断,最常用的是超声打断。
  3. 被打断的 DNA 片段经历末端修复,3' 加A,两端加接头,选择特定大小片段文库进行 PCR 扩增(通过 PCR 扩增选择性提高加上了接头的文库分子数量)。
  4. 文库上机与 flowcell 上引物结合,经历桥式 PCR 扩增形成 cluster 。
  5. 进行 SBS 测序,光学信号捕获,生成序列。

我们首先假设基因组核酸提取是完整的基因组,打断是完全随机的(通常是这样的)。

在第 3 步,PCR 扩增时同一个文库分子会产生多个相同的拷贝,这是 duplicate 的主要来源(PCR duplicate)。

第 4 步,文库中 DNA 片段与 flowcell 上引物结合,来源于同一个 DNA 片段的多个拷贝都结合到 flowcell 上,这样会导致生成多个相同的 cluster,测序时也就有多个相同的序列被测出来,这些相同的序列就是 duplicate。

同在第 4 步,生成 cluster 时候一个 cluster 中的 DNA 链可能搭到旁边另外一个 cluster 生成位点上,又长成一个相同的 cluster ,这也是 duplicate 的一个来源(Hiseq4000之后的 flowcell 会有的 cluster duplicate)。

第 5 步,一个 cluster 测序时的捕获的荧光亮点由于形状奇特,可能被软件当成两个荧光点来处理,这也产生了两条完全相同的 reads。这个过程中可能产生完全相同的 reads。(光学 duplicate)

由此我们知道,PCR duplicate 特点是随机分布于 flowcell 表面,光学 duplicate 特点是它们都来自 flowcell 上位置相邻的 cluster 。cluster 的位置被记录在 Fastq 文件 @seq-id 这一行中。

下图的右下角还有一种 duplicate 来源,sister? 这种一个文库分子的两条互补链同时都与 flowcell 上的引物结合分别形成了各自的 cluster,最后产生的两对 reads 完全反向互补,map 到参考基因组也分别在正负链上的相同位置,有的分析中也算 duplicate,虽然我遇到的这种正负链测序结果通常是不算 duplicate 的。

illumina 平台四种 duplicate 来源

另外,据说 NextSeq 平台上出现过由于荧光信号捕获相机移动位置不够,导致 tile 边缘被重复拍摄,每次采样区域的边缘由于重复采样而出现的 duplicate,下图中蓝色点代表 duplicate ,在 tile 两侧明显富集。Illumina 公司回应说这没毛病,符合预期……

 

PCR 将模板扩增了数千倍,但数据中 duplication 率只有 15%

我曾经有这样的疑惑,为什么文库构建过程中的 PCR 将每个文库分子都扩增了上千倍,以 PCR 10个循环为例 2^10= 1024 ,但是实际测序数据中 duplication 率并不高(低于20%)。后来我看到一篇文章从统计概率的角度详细探讨了一下 duplication 率的影响因素,顺便一提,这个博主的故事也很令人佩服。

PCR 的过程中不同长度的文库分子被扩增的效率不同(GC 太高或 AT 含量太高都会影响扩增效率),PCR 更倾向于扩增短片段的文库分子,这里先不考虑文库片段扩增效率的差异,把问题简化一下,假设所有文库分子扩增效率都相同。PCR duplicate 的主要来源是同一个文库分子的不同拷贝都在 flowcell 上生成了可以被测序的 cluster ,导致同一个分子的序列被测序仪读取多次。那么为何在每个分子都有上千个拷贝的情况下,实际却很少出现同一分子的多个拷贝被测序的情况呢?主要原因就是文库中 unique 分子的数量比被 flowcell 上引物捕获的分子数量多很多,直白点说就是 flowcell 上用于捕获文库分子的引物数量太少了,两者不在同一个数量级,导致很少出现同一个文库分子的多个拷贝被 flowcell 上引物捕获生成 cluster。

假设文库中所有分子与引物的结合都是随机的,简化一下就相当于,一个箱子中有 n 种颜色的球(文库中的 n 种 unique 分子),每种颜色有 1000 个(PCR 扩增的,随 cycle 数变化),从这个箱子中随机拿出来 k 个球(最终测序得到 k 条 reads),其中出现相同颜色的球就是 duplicate,那么 duplication 率就可以根据有多少种颜色的球被取出 0,1,2,3…… 次的概率计算,可以近似用泊松分布模型来描述。

以人全基因组重测序 30X 为例,PE150 需要约 3x10^8条 reads ,文库中 unique 分子数其实可以通过上机文库的浓度和体积(外加 PCR 循环数)计算出来,这里用近似值 3.5x10^10 个 unique 分子。每个 unique 分子期望被测序的次数是 3x108/3.5x1010 = 0.0085 ,每个 unique 分子被测 0,1,2,3… 次的概率如下图:

> x <- seq(0,10,1)
> xnames <- as.character(x)
> xlab <- "一个文库分子的所有拷贝被测序的次数"
> ylab <- "概率"
> barplot(dpois(x,lambda = 0.0085),
+ names.arg = xnames,
+ xlab = xlab,
+ ylab = ylab)

unique 分子被测不同次数概率

由于 unique 分子数量太多,被测 0 次的概率远高于 1 和 2 次,我们去除 0 次的看一下:

> x <- seq(1,10,1)
> xnames <- as.character(x)
> xlab <- "一个文库分子的所有拷贝被测序的次数"
> ylab <- "概率"
> barplot(dpois(x,lambda = 0.0085),
+ names.arg = xnames,
+ xlab = xlab,
+ ylab = ylab)

unique 分子被测 1 次以上的概率

unique 分子被测序 1 次的概率远大于 2次及以上,即便一个 unique 分子被测序 2 次,我们去除 duplicate 时候还会保留其中一条 reads。

如果降低文库中 unique 分子数量到 4.5x10^9 个,PCR 循环数增加以便浓度达到跟上面模拟的情况相同,测序 reads 数还是 3x10^8 条,每个 unique 分子预期被测序的次数是 3x108/4.5x109 = 0.067 。

> x <- seq(1,10,1)
> xnames <- as.character(x)
> xlab <- "一个文库分子的所有拷贝被测序的次数"
> ylab <- "概率"
> barplot(dpois(x,lambda = 0.067),
+ names.arg = xnames,
+ xlab = xlab,
+ ylab = ylab)

unique 分子数降低,则 unique 分子被测序2次概率增大

unique 分子数量减少,被测序 2次的概率增大,duplication 率显然也会增高。

到这里已经可以很明白的看出 duplication 率主要与文库中 unique 分子数量有关,所以建库过程中最大化 unique 分子数是降低 duplication 率的关键。文库中 unique 分子数越多,说明建库起始量越高,需要 PCR 的循环数越少,而文库中 unique 分子数越少,说明建库起始量越低,需要 PCR 的循环数越多,因此提高建库起始量是关键。

作者:wangpeng905
链接:https://www.jianshu.com/p/1e6189f641db

NGS的duplicate的问题的更多相关文章

  1. NGS基础 - 高通量测序原理

    NGS基础 - 高通量测序原理 原创: 赑屃 生信宝典 2017-07-23 NGS系列文章包括NGS基础.转录组分析.ChIP-seq分析.DNA甲基化分析.重测序分析五部分内容. NGS基础系列文 ...

  2. Linux command line exercises for NGS data processing

    by Umer Zeeshan Ijaz The purpose of this tutorial is to introduce students to the frequently used to ...

  3. 代码的坏味道(14)——重复代码(Duplicate Code)

    坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...

  4. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  5. iOS开发 引用第三方库出现duplicate symbol时的处理方法

      该篇文章是我自己从我的新浪博客上摘抄过来的, 原文链接为: http://blog.sina.com.cn/s/blog_dcc636350102wat5.html     在iOS开发中, 难免 ...

  6. C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  7. Duplicate entry 'javajavajav' for key 'username'

    org.apache.ibatis.exceptions.PersistenceException: ### Error updating database.  Cause: com.mysql.jd ...

  8. [LeetCode] Remove Duplicate Letters 移除重复字母

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  9. [LeetCode] Find the Duplicate Number 寻找重复数

    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...

随机推荐

  1. 2k8 32bit下载

    Windows Server 2008 32-bit Standard(标准版) Windows Server 2008 32-bit Enterprise(企业版) Windows Server 2 ...

  2. sql server 定期自动清理日志

    https://blog.csdn.net/dqs78833488/article/details/51372491

  3. php 面试考点总结-高并发和大流量解决方案考点

    1.web资源防盗链 盗链概念 盗链是指在自己的页面上展示一些并不在自己服务器的内容 防盗链工作原理 通过referer或者签名,网站可以检测目标网页访问的来源页,一旦检测到来源页不是本站即进行阻止或 ...

  4. c++builder XE6 Remote Debuger 远程调试

    1.远程目标机器 安装D:\Program Files (x86)\Borland\Remote Debugger\20,没有光盘从已安装的xe6电脑上Bin目录下拷贝文件 bccide.dll bo ...

  5. Json中相同或者重复记录的值相加组成新的Json

    var data = [ {"Networking": "WiFi", "count_value": "2000"}, ...

  6. Spring mvc 返回json包含双引号问题 解决

    解决方式1: @RequestMapping(value="/shopsList.json", produces = "text/html;charset=UTF-8&q ...

  7. WP8.1 页面跳转,overwrite后退键

    In 8.1 we use the below code to navigate between pages: this.Frame.Navigate(typeof(PivotPage)); In 8 ...

  8. 代码报错记录-MAVEN

    报错: COMPILATION ERROR : 程序包不存在. 说是找不到程序包,我的JUNIT是父项目中的,子项目是从JAVA项目转为MAVEN项目的,难道在转成MAVEN项目时对POM文件的修改有 ...

  9. asp.net core in centos

    CentOS 7部署ASP.NET Core应用程序   看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不 ...

  10. dp-最长公共子序列

    最长公共子序列(NYOJ36) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公 ...