内容

1DNABarcodes

DNABarcodes包提供了创建DNA条形码集的功能,能够纠正替换错误或插入、删除和替换错误。现有的条形码可以根据条形码之间的最小、最大和平均距离进行分析。最后,以一个(可能是突变的)条形码开始的读取可以被解复用,即分配给它们原始的参考条形码。

最常见的用例是:

2使用DNABarcodes

2.1创建一组原始的DNA条形码

假设我们想用默认设置生成一组5bp长的条形码。默认情况下,每个DNA条形码之间的汉明距离最小为3,这足以纠正至少一个替换错误:

##加载所需的包:矩阵##加载所需的包:并行mySet <- create.dnabarcodes(5) ## 1)## 2)康威关闭……done show(mySet) ##[1]“GAGAA”“AGCAA”“CCTAA”“CAAGA”“ACGGA”“GTCGA”“TGTGA”“GGACA”“CTGCA”##[10]“TACCA”“CGAAG”“TCGAG”“GTTAG”“ATAGG”“AAGCG”“GAATG”“TGCTG”“ACTTG”##[19]“ACAAC”“CACAC”“TAGGC”“CTTGC”“TTACC”“GATCC”“AGGTC”“GCCAT”“tcct”##[28]“AACGT”“TGGCT”“CAGTT”

在默认模式下,使用Conway字典编纂算法生成集合。康威的算法很简单,而且大多数时候都足够高效。当有足够的计算能力时,应该使用Ashlock的进化算法。改变集合生成算法的参数被命名启发式

mySetAshlock <- create。dnabarcodes(5,启发式="ashlock") ## 1)创建池…##[1]“TGCAT”“TCACT”“TCTGA”“GAGAA”“ACCAA”“CGTAA”“CAAGA”“CAAGA”“GGAAG”“CTCTA”“GGAAG”“TCGAG”“CACAG”“CACAG”“CCAAC”##[19]“TTCGG”“GATGG”“CTACG”“GTGTG”“agtgg”“CCTTG”“CCAAC”##[28]“AGGAC”“GTCAC”“TGAGC”“TGAGC”“GAACC”“TTGCC”“ACTCC”“CAGTC”##[37]“TCCTC”“GGTTC”“gtgc”“gtgc”“tgacc”“TTGCC”“ACTCC”“CAGTC”##“[37]”“TCCTC”“GGTTC”“gtgc”“gtgc”“gtgat”“gtgat”“TAGGT”“agtggt”“agtggt”“AGTGT”“AGTGT”“AGTGT”“AGTGT”“AGTGT”“agtgg”“CCAAC”##“catct”##[46]“cgatt”“acgtt”“gactt”

重要的是,当使用阿什洛克的算法时,DNA条形码的集合通常更大。

2.1.1具有较大数量的可纠正错误集

最后,我们想创建一组5bp长的DNA条形码,支持2个替换的校正。为此,我们使用参数强制最小距离为5经销

mySetDist5 <- create。dnabarcodes(5, dist=5, heuristic="ashlock") ## 1)创建池…## 2)启动染色体完成## 3)运行贪婪进化完成show(mySetDist5) ##[1]“GATGC”“CTACT”“TCGTA”“AGCAG”

错误的数量\ (k_c \)一组DNA条形码可以纠正的错误由下面的公式表示。的变量\ (dist \)给出集合的最小距离。

\[k_c \leq \left\lfloor \frac{dist - 1}{2} \right\rfloor\]

的数量\ (k_d \)的可检测误差为:

\[k_d \leq dist - 1\]

下表显示了常见距离\ (dist \)以及他们的纠错(\ (k_c \))和侦测(\ (k_d \))属性:

\ (dist \) \ (k_c \) \ (k_d \)
3. 1 2
4 1 3.
5 2 4
6 2 5
7 3. 6
8 3. 7
9 4 8

为了获得足够大的样本集,通常需要增加条形码的长度。在这里,我们想要修正2个替换错误,并且目标至少是20个样本:

展示(长度(创建。dnabarcodes(5, dist=5, heuristic="ashlock"))## 2)启动染色体完成## 3)运行贪婪进化完成##[1]4显示(长度(创建。dnabarcodes(6, dist=5, heuristic="ashlock")) ## 1)创建池…## 2)启动染色体已完成## 3)运行贪婪进化已完成## [1]8 show(长度(创建。dnabarcodes(7, dist=5, heuristic="ashlock")) ## 1)创建池…## 2)启动染色体完成## 3)运行贪婪进化完成## [1]21

因此,应该使用7bp长的DNA条形码。

2.1.2能够纠正插入、删除和替换的DNA条形码集

为了生成支持校正插入、删除和替换的DNA条形码集(例如,对于PacBio平台),必须使用不同的距离度量。在DNA上下文中(即,DNA条形码被其他DNA核苷酸包围),序列-列文斯坦距离是正确的选择。在这里,我们生成了一组5bp长的DNA条形码,能够纠正一个indel或替换错误。更改距离度量的参数被命名度规

mySeqlevSet <- create。dnabarcodes(5, metric="seqlev", heuristic="ashlock") ## 1)创建池…## 2)启动染色体完成## 3)运行贪婪进化完成show(mySeqlevSet) ##[1]“CCGAA”“TTGCG”“GAGTA”“GTCAA”“ACACA”“CTAGG”“AATGG”“TGACC”“CATCC”##[10]“TCTCT”“ACGTT”“GGCTT”

序列- levenshtein距离的要求比汉明距离的要求更严格。因此,该集合中的DNA条形码数量更少,但该集合更健壮。

2.1.3应用不同的过滤器

默认情况下,create.dnabarcodes过滤所有含有三联体、显示GC偏倚或自我互补的DNA序列。其中一些过滤器在当前或未来的平台上可能是不必要的。例如,使用Illumina的合成测序技术,三联体过滤器是不必要的。在这里,我们生成一组长度为5bp的默认DNA条形码,而不过滤三连体:

mySetTriplets <- create。dnabarcodes(5, heuristic="ashlock", filter.triplets=FALSE) ## 1)创建池…##[1]“CGTAA”“AAGGG”“AGCAG”“GCAAA”“CAAGA”“GTTGA”“ACCGA”“GTTGA”“AGACA”##[10]“GAGCA”“CTCCA”“TCTCA”“CCGTA”“CTAAG”“TCGAG”“GATAG”“TTCGG”##[19]“TAACG”“ATTCG”“ACATG”“GTGTG”“CACTG”“TGTTG”“TGAAC”“CAGAC”“GTCAC”##[28]“ACTAC”“ATAGC”“TATGC”“TTGCC”“AACCC”“AGGTC”“CTTTC”##[37]“GGGAT”“CCCAT”“TCAGT”“CTGGT”“GTACT”“ACGCT”##[1]“GGGAT”“CCCAT”“CTGGT”“GTACT”“acgaca”“TTCGG”“GTCAC”##" tgcct " ## [46] " catct " " cgatt " " gcttt "

注意,候选条形码池的大小(640)比包含三元组筛选器的默认设置(592)更大。潜在地,这允许创建更大的集合,我们观察到更长的DNA条形码。

2.2子集现有的DNA条形码集

在下文中,我们将描述生成现有DNA条形码集的子集的方法。通常情况下,研究人员已经有了一组预先存在的DNA条形码,例如从他的供应商那里获得的化学形式的索引。当需要复用的样本数量较少时,他可以从现有索引中选择一个更健壮的子集,以获得更好的纠错能力。

候选条形码集合被赋给create.dnabarcodes通过参数

例如,研究人员可能有一个RNASeq库准备工具包,其中包括48个索引。这个集合已经可以用来纠正1个替换。他创建了一个鲁棒子集,用于纠正2个替换,如下所示:

myRobustSet <- create. data(supplerset)dnabarcodes(7, dist=5, pool=supplierSet, heuristic="ashlock")2)启动染色体完成## 3)运行贪婪进化完成show(myRobustSet) ##[1]“CCGGTTA”“CGATAGC”“AAGATGG”“GGAAGAA”“GATCACA”“TCTTGAG”“AGACCTG”##[8]“ATCGGAC”“CAAGCAT”“TGCAACT”“CTTCGTT”

或者,我们可能想要创建一个子集,除了替换之外,它还能够纠正索引:

myRobustSetSeqlev <- create。dnabarcodes(7, metric="seqlev", pool=supplierSet, heuristic="ashlock") ## 1)正在创建pool…##[1]“AGACCTG”“GGAAGAA”“ATAGGCA”“CTGCAGA”“GCTTAGA”“CCTCTGA”##[8]“GATCACA”“CCAATCA”“GTGGTCA”“TGCACTA”“CCGGTTA”“TGTCCAG”##[15]“AAGATGG”“TTATGCG”“atcgtctg”“CTCCTTG”“CTAGTAC”“CGATAGC”##[22]“CAACTGC”“TCGATCT”“GGTCTCT”

2.3多路分解

解复用是将读取值分配给样本的处理步骤。的解复用很容易实现多路分用函数。在下面的例子中,我们假设有一个文件,其中包含以DNA条形码开始的所有读取。所使用的集合包含48个7nt长的DNA条形码,并生成以纠正最多一个替换。

数据(mutatedReads)分工(头(mutatedReads), supplierSet) # # # #读取条形码距离CCTCAAC CGTCAACCCGTCAACACGTCAACACGTCAACGCGTCAACT CCTCAAC 1 # # GGAAGAA CGAAGAACCGAAGAAACGAAGAACCGAAGAAGCGAAGAAA GGAAGAA 1 # # GTTAGCA GTTAGCAGGTTAGCATGTTAGCAGGTTAGCATGTTAGCAG GTTAGCA 0 # # CCAGGAA TCAGGAACTCAGGAACTCAGGAAGTCAGGAATTCAGGAAT CCAGGAA 1 # # CTAGTAC CAAGTACTCAAGTACCCAAGTACCCAAGTACTCAAGTACG CTAGTAC 1 # # GGTCTCT GGTCACTGGGTCACTAGGTCACTAGGTCACTAGGTCACTT GGTCTCT 1

重要的是要提供正确的距离度量多路分用使用参数度规.否则,结果将以意想不到的方式无意地改变。

2.4分析一组DNA条形码

假设我们从我们的库制剂供应商那里获得了一组样本索引形式的DNA条形码。我们想要分析集合,以了解可以纠正或检测到的错误。这个函数analyse.barcodes很容易做到这一点:

分析。条形码(supplierSet) ##描述hamming seqlev levenshtein ## 1平均距离5.242908 3.656915 4.560284 ## 2中位距离5.000000 4.000000 5.000000 ## 3最小距离3.000000 1.000000 2.000000 ## 4最大距离7.000000 7.000000 7.000000 ## 5保证错误纠正1.000000 0.000000 0.000000 ## 6保证错误检测2.000000 0.000000 1.000000

输出表列出了集合中每对DNA条形码的平均值、中位数、最小值和最大距离。最后,它列出了该集合可以达到的保证纠错和检测功能。分析提出了距离度量的选择:Hamming, Sequence-Levenshtein和Levenshtein。

3.距离度量

DNABarcodes软件包目前支持四种距离度量。它们的功能和特性如下:

足够高的汉明距离(公制= "汉明")允许修正/检测替换。由于忽略了插入和删除,因此忽略了对条形码长度和DNA上下文的任何更改,这使得汉明距离成为一个简单的选择。

足够高的序列Levenshtein距离(公制= "seqlev")允许在条形码附加到DNA序列的场景中纠正/检测插入、删除和替换。从您选择的Illumina、Roche、PacBio NGS机器读取的序列应该从该条形码开始,然后是插入或适配器或一些随机的基调用。

足够高的Levenshtein距离(公制= "levenshtein")允许在条码没有附加到任何地方的情况下纠正/检测插入、删除和替换,分别知道条码的确切开始和结束。据我们所知,目前还没有NGS技术能做到这一点。不要使用这个距离度量,除非你知道你在做什么。

移相距离足够高(米制= "移相")允许纠正/检测DNA条形码前面的替换以及插入或删除。这个距离的预定目标技术是Illumina测序合成平台。我们认为这个指标是高度实验性的。

4集生成启发式

我们支持四种不同的算法来生成DNA条形码。每一种都有其独特的优点和缺点。

的启发式康威而且集团产生快速的结果,但远不如启发式好抽样而且ashlock.的集团启发式方法略慢,并且需要比康威启发式,因为它首先构造了池的图形表示。

启发式ashlock假设合理的参数配置能产生最佳的启发式结果。新用户应该先尝试一下康威然后ashlock使用默认参数。

4.1的配置Ashlock启发式

阿什洛克启发式是一种进化算法。简单地说,它在a上迭代人口所谓的染色体(不要与实际的基因组染色体混淆),同时试图在每个步骤中改善集合创建结果。在每次迭代中,它保留最好的染色体,并用最好的染色体的突变副本替换其余的染色体。

该算法有两个参数:

  • 迭代次数(迭代
  • 人口规模(人口

更多的迭代和更大的种群将(可能)增加结果DNA条形码集的大小,但也将大大增加运行时间。

我们认为对于迭代次数来说,100是一个非常好的默认值。在我们看来,最好的机会是大幅增加种群中的染色体数量,例如增加到500甚至1000条。

下面的例子显示了集合大小的增加:

长度(创建。dnabarcodes(10, metric="seqlev", heuristic="ashlock",cores=32))## 2)启动染色体完成## 3)运行贪婪进化完成## 2126长度(创建。dnabarcodes(10, metric="seqlev", heuristic="ashlock",cores=32, population=500, iterations=250)) ## 1)正在创建池…## 2)启动染色体完成## 3)运行贪婪进化完成## 2133