的DNABarcodes包提供了一个函数来创建DNA条形码集能够纠正替换错误或插入、删除和替换错误。现有的条形码可以分析关于最小,最大和平均距离条形码。最后,读,开始(可能突变)条形码可以去复用,即。原始参考条形码,分配给他们。
最常见的用例:
create.dnabarcodes用于创建组DNA条形码与纠错性能。
多路分用用于信号分离的一组基于使用的DNA条形码读取
analyse.barcodes用于分析一组现有的DNA条形码的属性,以及评估其纠错能力
假设我们想生成一组5 bp长与默认设置条形码。默认执行的最小汉明距离3之间DNA条形码,这能充分正确的至少一个替换错误:
库(DNABarcodes) # #加载所需的包:矩阵# #加载所需的包:平行mySet < - create.dnabarcodes(5) # # 1)创建池……大小592 # # 2)康威关闭……显示(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”“TCAGT”# # [28]“AACGT”“TGGCT”“CAGTT”
在默认模式,康威词典算法用于生成集。康威的算法很简单,大部分时间不够高效。当足够的计算能力,应该使用Ashlock的进化算法。参数改变命名集生成算法启发式。
mySetAshlock < -创造。dnabarcodes(5,启发式=“ashlock”) # # 1)创建池……大小592 # # 2)初始染色体完成了# # 3)运行贪婪进化完成显示(mySetAshlock) # # [1]“GCTGA”“CATAC”“ATTGC”“GAGAA”“AGCAA”“CAAGA”“TTGGA”“GGACA”“ACGCA”# # [10]“TACCA”“CTTCA”“CGGTA”“GTCTA”“CGAAG”“TCGAG”“GTTAG”“ACAGG”“TATGG”# # [19]“TTACG”“AGTCG”“GAATG”“ATGTG”“TGCTG”“CCTTG”“GCAAC”“TTCAC”“TGAGC”# # [28]“TCTCC”“CTATC”“TAGTC”“ACCTC”“GGTTC”“CTGAT”“GTAGT”“AAGGT”“TCCGT”# # [37]“CGTGT”“CCACT”“TGGCT”“ATCCT”“GATCT”“GCGTT”“CACTT”
重要的是,一组的DNA条形码通常是大当Ashlock的算法。
最后,我们要创建一组5 bp长DNA条形码,支持2替换的校正。为此,我们使用参数执行5的最小距离经销。
mySetDist5 < -创造。dnabarcodes (5, dist = 5,启发式=“ashlock”) # # 1)创建池……大小592 # # 2)初始染色体完成了# # 3)运行贪婪进化完成显示(mySetDist5) # # [1]“GCTAC”“CAAGT”“AGCCA”“TTGTG”
错误的数量\ (k_c \)一组DNA条形码可以通过以下公式正确的表达。的变量\ (dist \)给出了集合的最小距离。
\[左k_c \ leq \ \ lfloor \压裂{dist - 1} {2} \ \ 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,启发式= " ashlock "))) # # 1)创建池……大小592 # # 2)初始染色体完成了# # 3)运行贪婪进化完成了# #[1]4显示(长度(创建。dnabarcodes (6, dist = 5,启发式= " ashlock "))) # # 1)创建池……大小1160 # # 2)初始染色体完成了# # 3)运行贪婪进化完成了# #[1]8显示(长度(创建。dnabarcodes (7, dist = 5,启发式= " ashlock "))) # # 1)创建池……大小7568 # # 2)初始染色体完成了# # 3)运行贪婪进化完成21 # # [1]
因此,应该使用7 bp长DNA条形码。
生成集的DNA条形码支持插入的修正,删除和替换(例如,PacBio平台),必须使用不同的距离度量。在DNA上下文(即。DNA条形码是包围其他DNA核苷酸),距离Sequence-Levenshtein是正确的选择。这里,我们生成一组5 bp DNA条形码可以纠正一个indel或替换错误。参数变化的距离度量命名度规:
mySeqlevSet < -创造。dnabarcodes(5度规=“seqlev”启发式=“ashlock”) # # 1)创建池……大小592 # # 2)初始染色体完成了# # 3)运行贪婪进化完成显示(mySeqlevSet) # # [1]“CAGAG”“TGCAA”“CCTCT”“ACGAA”“GGTGA”“TTAGG”“AATGG”“AACAC”“CTACC”# # [10]“GATCC”“TCGTT”“AGCTT”
Sequence-Levenshtein距离的要求更严格的比汉明距离。DNA条形码的数量因此较小,但一组更健壮。
默认情况下,create.dnabarcodes过滤那些包含三胞胎的DNA序列,显示GC偏见,或自补。这些过滤器在当前或未来的平台上可能是不必要的。例如,Illumina公司测序的合成技术,三重过滤是不必要的。这里,我们生成一个默认组的DNA条形码长度为5的英国石油公司没有过滤三胞胎:
mySetTriplets < -创造。dnabarcodes(5,启发式=“ashlock”, filter.triplets = FALSE) # # 1)创建池……大小640 # # 2)初始染色体完成了# # 3)运行贪婪进化完成显示(mySetTriplets) # # [1]“AGGCT”“CCCAA”“GAAAG”“GGGAA”“CAAGA”“ACGGA”“TGCGA”“GTTGA”“GCACA”# # [10]“TAGCA”“ATCCA”“CGTCA”“CTGTA”“GACTA”“TCGAG”“AGCAG”“CTTAG”“ATAGG”# # [19]“TATGG”“TGACG”“ACTCG”“CCATG”“AAGTG”“TTCTG”“GGTTG”“CGAAC”“ATGAC”# # [28]“TACAC”“GCTAC”“TCAGC”“AGTGC”“AAACC”“TTTCC”“GTATC”“TGGTC”“ACCTC”# # [37]“CATTC”“CAGAT”“GTCAT”“GGAGT”“TTGGT”“AACGT”“CCTGT”“CTACT”“TCCCT”# # [46]“GATCT”“GCGTT”“CGCTT”
注意,候选条形码的池的大小更大(640)比默认设置,包括三重过滤(592)。可能,这允许创建更大的集合,我们观察到时间DNA条形码。
在下面,我们描述的方法来生成现有组DNA条形码的子集。通常,研究人员已经有一组预先存在的DNA条形码,例如化学形式的索引从他的供应商。小数量的样品需要多路复用时,他可以选择一个更健壮的现有索引的子集来获得更好的纠错能力。
的条形码给候选人create.dnabarcodes通过参数池。
例如,研究人员可能有RNASeq图书馆准备装备,包括48个索引。设置已经可以用于纠正1替换。他创造了一个健壮的子集的校正2替换以下方式:
数据(supplierSet) myRobustSet < -创造。dnabarcodes (7, dist = 5,池= supplierSet启发式=“ashlock”) # # 1)创建池……大小的48 # # 2)初始染色体完成了# # 3)运行贪婪进化完成显示(myRobustSet) # # [1]“GATCACA”“AGACCTG”“CCGGTTA”“GGAAGAA”“TCTTGAG”“AAGATGG”“ATCGGAC”# # [8]“CGATAGC”“CAAGCAT”“TGCAACT”“CTTCGTT”
另外,我们可能想要创建一个子集能够纠正indels除了替换:
myRobustSetSeqlev < -创造。dnabarcodes(7度规=“seqlev”,池= supplierSet启发式=“ashlock”) # # 1)创建池……大小的48 # # 2)初始染色体完成了# # 3)运行贪婪进化完成显示(myRobustSetSeqlev) # # [1]“TTCGGTA”“CCTCAAC”“TATGGAC”“GGAAGAA”“CCAGGAA”“CTGCAGA”“GCTTAGA”# # [8]“GATCACA”“ATAGGCA”“GTGGTCA”“TGCACTA”“CCGGTTA”“TGTCCAG”“AAGATGG”# # [15]“ATCGTCG”“CAGTGTG”“AGACCTG”“CTCCTTG”“CTAGTAC”“CGATAGC”“CAACTGC”# # [22]“CCTTCTC”“TCGATCT”“GGTCTCT”
多路分解是处理步骤,读取分配给他们的样品。多路分解是很容易的多路分用函数。在以下示例中,我们假设有一个文件,其中包含所有从DNA条形码读取。使用集包含48 7元长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
重要的是提供正确的距离度量多路分用使用的参数度规。否则结果会改变无意中,以意想不到的方式。
假设我们获得一组DNA条形码的形式从我们的图书馆准备供应商样品索引。我们想分析一组理解错误可以纠正或检测。这个函数analyse.barcodes容易做的就是这些:
analyse.barcodes (supplierSet) # #描述汉明seqlev levenshtein # # 1平均距离5.242908 3.656915 4.560284 # # 2中等距离5.000000 4.000000 5.000000 # # 3 # # 4最大距离最小距离3.000000 1.000000 2.000000 7.000000 7.000000 7.000000 # # 5保证纠错1.000000 0.000000 0.000000 # # 6保证错误检测2.000000 0.000000 1.000000
输出表列表的意思是,中位数,至少和最大距离的每一对DNA条形码。最后,它列出了保证误差校正和检测功能,可以达到。距离的分析,提出了选择指标:汉明,Sequence-Levenshtein, Levenshtein。
的DNABarcodes包目前支持四个距离度量。他们的能力和属性如下:
一个足够高的汉明距离(度量= "汉明")允许替换的校正/检测。由于无知的插入和删除,任何改变DNA条码的长度以及上下文将被忽略,这使得汉明距离一个简单的选择。
足够高的序列Levenshtein距离(度量= " seqlev ")允许修正/检测插入,删除和替换在场景条形码是附加到一个DNA序列。你的序列读取、来自Illumina公司罗氏,PacBio门店机器的选择,应该和条形码,然后开始紧随其后插入适配器或调用一些随机的基地。
一个足够高的Levenshtein距离(度量= " levenshtein ")允许修正/检测插入,删除和替换在条形码没有附加任何的场景中,各自具体的开始和结束的条形码是已知的。这是据我们所知目前没有挥动技术。不使用这个距离度量,除非你知道你正在做的事情。
一个足够高的移相的距离(度量= "相位变化")允许的校正/检测替换以及发生的插入或删除前面的DNA条形码。这个距离的目标技术是合成的Illumina公司测序平台。我们认为这个指标是高度实验性的。
我们支持四种不同算法的生成集的DNA条形码。每一种都有其特定的优点和缺点。
的启发式康威和集团能快速得到结果,但不是启发式几乎一样好抽样和ashlock。的集团启发式比略慢,需要更多的内存康威启发式,因为它首先构造一个池的图形表示。
启发式ashlock假定生产最好的启发式结果合理的参数配置。新用户应该先试一试康威然后ashlock使用默认参数。
Ashlock启发式Ashlock启发式是一种进化算法。简单地说,它遍历人口所谓的染色体(不与实际基因组染色体)混淆,在试图提高每一步的创造结果。在每个迭代中,它仍然保留着最好的染色体和替换其他变异的副本最好的方法。
该算法有两个参数:
迭代)人口)更多的迭代和一个更大的人口(可能)会增加结果集的大小的DNA条形码,但也会大大增加运行时间。
我们认为,100年是一个非常好的默认的迭代次数。最好的机会,在我们看来,是人口大大增加染色体的数量,例如500甚至1000。
下面的例子显示,增加设置大小:
长度(创建。dnabarcodes(10度规=“seqlev”启发式=“ashlock”,核心= 32))# # 1)创建池……大小488944 # # 2)初始染色体完成了# # 3)运行贪婪进化# # 2126的长度(创建完成。dnabarcodes(10度规=“seqlev”启发式=“ashlock”,核心= 32,人口= 500,迭代= 250))# # 1)创建池……大小488944 # # 2)初始染色体完成了# # 3)运行贪婪进化完成了# # 2133