kmer R套装简介

肖恩·威尔金森

2019-05-20


介绍

依赖多序列比对和成对距离矩阵的聚集聚类方法在计算上不适用于大型DNA和氨基酸数据集。其他基于k-mer的聚类方法包括枚举所有k-通过长度滑动窗口的字母单词序列k. The\(n次4^k)的矩阵k-mer计数(其中\(n\)是序列的数量),然后可以用来代替多重序列比对来计算距离和/或构建系统发育树。公里是一个R包,用于使用快速无对齐对大型序列数据集进行聚类k-摩尔计数。无论是否使用多序列比对,也无论是否使用成对距离矩阵,都可以实现这一点。下面详细介绍了这些函数及其实用程序示例。

距离矩阵计算

功能k计数用于枚举所有k-通过滑动一个长度窗口,在一个序列或一组序列中的mersk沿着每个序列并计算每个序列的次数k-mer出现(例如\(4^3 = 64\)可能的DNA 3分子:AAA,AAC,AAG,…,TTT)。这个k距离然后,函数可以使用以下矩阵计算无对齐距离矩阵k-mer计数以导出成对距离。使用的默认距离度量k距离k-梅尔(k-Edgar中概述的距离测量(2004).对于两个DNA序列\(a)\(b),分数公共k-梅尔数过了\(4^k\)可能的长度词\(k\)计算如下:\[F=\sum\limits_{\tau}\frac{min(n_a(\tau),n_b(\t))}{min(L_a,L_b)-k+1}\tag{1}\]

哪里\(\套\)代表每种可能k-梅尔,\(n_a(τ))\(n_b(τ))是次数\(\套\)出现在每个序列中,\(k\)k-mer长度和\(L)是序列长度。之间的成对距离\(a)\(b)然后计算为:

\[d=\frac{log(0.1+F)-log(1.1)}{log(0.1)}\tag{2}\]

对于\(n\)序列k距离操作具有时间和内存复杂性\(O(n ^2)\)因此,当序列集较大时(例如>10000个序列),在计算上可能变得不可行。因此公里软件包还提供了以下功能被动式爆炸装置,它只计算从每个序列到较小(或相等)大小的“种子”序列子集的距离(黑盾等。, 2010)。的默认行为被动式爆炸装置功能是选择\(t=(log_2n)^2)通过对序列进行聚类得到种子(k-均值算法\(k=t)),并从每个簇中选择一个具有代表性的序列。

DNA和氨基酸序列可以传递给k计数,k距离被动式爆炸装置作为非对齐序列列表或对齐序列矩阵,最好采用“DNAbin”或“AAbin”原始字节格式(参见软件包文档以获取有关这些S3类的更多信息)。支持字符序列;然而,歧义码可能无法被正确识别或处理,因为原始歧义是根据其潜在的剩余频率计算的(例如,5元“ACRGT”将对“ACAGT”的计数贡献0.5,而对“ACGGT”的计数则贡献0.5)。这不包括被忽略的模糊代码“N”。

示例1:计算木鼠数据集的k-mer距离矩阵

这个R包(天堂等。, 2004)包含15个排列的线粒体细胞色素的数据集b条木鼠的基因DNA序列森林姬鼠最初发表于Michaux等人。(2003)。虽然公里距离函数不需要对齐序列,这个示例将使我们能够比较k-mer距离与由类人猿::dist.dna首先,加载数据集并按如下方式查看前几行和前几列:

数据(林鼠,包装= “猿”)::作为字符。DNAbin公司(木老鼠[1:5,1:5])#>         [,1] [,2] [,3] [,4] [,5]
#>编号305
#>304号a“t”t“c”g
#>编号306“a”“t”“c”“g”
#>编号0906S“a”“t”“c”“g”
#>编号0908S“a”“t”“c”“g”

这是一种半全局(“全局”)对齐,具有一些不完整的序列,未知字符由模糊码“n”(例如No305)表示。为了避免人为地扩大这些部分序列和其他序列之间的距离,我们首先通过细分全局对齐来修剪间隙端点(注意功能距离.dna默认情况下,也会在距离计算之前删除带有模糊代码的列)。

山鼠<- 林鼠[,应用(林鼠,2,功能(v)!任何(v)== 0xf0(0xf0)))]

以下代码首先计算完整\(n次n次)距离矩阵,然后计算每个序列到三个随机选择的种子序列的嵌入距离。在这两种情况下k-mer大小设置为6。

###计算完整距离矩阵并打印前几行和前几列图书馆(公里)伍德穆斯.kdist<- k距离(林鼠,k个= 6)打印(as矩阵(木鼠.kdist)[1:7,1:7],数字= 2)#>编号305编号304编号306编号0906S编号0908S编号0909S编号0910S
#>编号305 0.000 0.0322 0.0295 0.033 0.036 0.037 0.037
#>编号304 0.032 0.0000 0.0051 0.020 0.022 0.032 0.023
#>编号306 0.030 0.0051 0.0000 0.016 0.017 0.026 0.018
#>编号0906S 0.033 0.0202 0.0162 0.000 0.024 0.033 0.014
#>编号0908S 0.036 0.0224 0.0171 0.024 0.000 0.033 0.025
#>编号0909S 0.037 0.0322 0.0264 0.033 0.033 0.000 0.034
#>编号0910S 0.037 0.0233 0.0176 0.014 0.025 0.034 0.000###计算并打印嵌入的距离矩阵禁止显示警告(RNG版本("3.5.0"))设置种子(999)种子<- 样品(1:15,尺寸= )木老鼠.mbed<- 被动式爆炸装置(林鼠,种子=种子,k个= 6)#>已注册的S3方法被“openssl”覆盖:
#>方法来自
#>打印字节Rcpp
打印(woodmouse.mbed[,]),数字= 2)#>编号0909S编号0913S编号304
#>编号305 0.0368 0.0391 0.0322
#>编号304 0.0322 0.0102 0.0000
#>编号306 0.0264 0.0098 0.0051
#>编号0906S 0.0332 0.0215 0.0202
#>编号0908S 0.0332 0.0273 0.0224
#>编号0909S 0.0000 0.0368 0.0322
#>编号0910S 0.0341 0.0176 0.0233
#>编号0912S 0.0242 0.0322 0.0273
#>编号0913S 0.0368 0.0000 0.0102
#>编号1103S 0.0171 0.0251 0.0202
#>编号1007S 0.0046 0.0368 0.0322
#>编号1114S 0.0451 0.0428 0.0373
#>编号1202S 0.0345 0.0176 0.0233
#>编号1206S 0.0304 0.0251 0.0202
#>编号1208S 0.0046 0.0409 0.0359

示例2:无路线树建筑

在本例中,无对齐k-将示例1中计算的mer距离与Kimura距离进行比较(1980)距离度量,如程序包示例。使用缠结图函数右旋糖包裹。

##计算两两距离矩阵蒸馏器1<- ::距离.dna(林鼠,模型= “K80”) 蒸馏器2<- k距离(林鼠,k个= 7) ##构建邻接树物理1<- ::新泽西州(距离1)物理2<- ::新泽西州(距离2)##以阶梯式的方式重新排列树木物理1<- ::用梯子把(物理1)物理2<- ::用梯子把(物理2)##将phylo对象转换为树状图dnd1号机组<- as.dend程序(物理1)dnd2型<- as.dend程序(物理2)##绘制缠结图dndlist(数据清单)<- 右旋糖::拒绝列表(dnd1、dnd2)右旋糖::缠结图(dndlist,快速= 真的,内部边距= 5)

图1:七巧板比较木鼠序列的距离度量。从路线相关(左)和无路线(右)距离派生的邻接树显示出一致的拓扑。



无距离矩阵的聚类

为了避免在构建大树(例如。n个>10000)公里包的功能集群对于快速分裂聚类,不需要对齐和距离矩阵计算。此函数首先生成一个矩阵k-mer计数,然后使用连续k-means聚类对矩阵进行逐行递归分区(k= 2). 虽然这种方法可能不一定为了分类学的目的重建足够准确的系统发育树,但它为各种其他应用提供了一种快速有效的生成大树的方法,例如基于树的序列加权(例如,Gerstein等人。(1994)),用于渐进式多序列比对的导向树(例如Sievers等人。(2011))以及其他递归操作,如分类和回归树(CART)学习。

该软件包还具有以下功能非处方药用于基于遗传距离(k-mer距离)阈值将序列快速聚类为可操作的分类单元。此函数执行的操作与集群它递归地划分k-mer计数矩阵以将序列分配给组。然而,只有当每个簇内的最大k-mer距离高于定义的阈值时,自上而下的分裂才会继续。而不是返回树状图,非处方药返回集群成员身份的命名整数向量,星号表示每个集群中的代表序列。

示例3:OTU群集k-mers公司

在最后一个示例中,木鼠数据集被分为操作分类单元(OTU),其中集群内的最大值为k-mer距离为0.03,每个k-means分割随机启动20次(建议提高精度)。

禁止显示警告(RNG版本("3.5.0"))设置种子(999)山鼠。OTU(OTU)<- 非处方药(林鼠,k个= 5,阈值= 0.97,方法= “最远”,斯特哈特= 20)山鼠。OTU(OTU)#>编号305*编号304编号306*编号0906S编号0908S编号0909S*编号0910S编号0912S
#>        3        1        1        1        1        2        1        2
#>编号0913S编号1103S编号1007S编号1114S编号1202S编号1206S编号1208S
#>        1        2        2        3        1        1        2

该函数输出OTU成员的命名整数向量,星号表示每个簇的代表序列(即最“中央”序列)。在这种情况下,发现了三个不同的OTU,No305和N01114S形成一个簇(3),No0909S、No0912S、No1103S、No1007S和No1208S形成另一个(2),其余的属于簇1,与图1的一致拓扑一致。

结束语

这个公里软件包是根据GPL-3许可证发布的。请将错误报告直接发送到GitHub问题页面,网址为http://github.com/shaunpwilkinson/kmer/issues。非常感谢您的反馈。

致谢

该软件是由新西兰皇家学会卢瑟福基金会博士后研究奖学金资助开发的。

工具书类

G.布莱克希尔兹。等。(2010)序列嵌入,用于快速构建多序列比对的导向树。分子生物学算法,5, 21.

Edgar,R.C.(2004)使用压缩氨基酸字母在线性时间内进行局部同源性识别和距离测量。核酸研究,32, 380–385.

M.格斯坦。等。(1994)蛋白质进化中的体积变化。分子生物学杂志,236, 1067–1078.

Kimura,M.(1980)通过核苷酸序列的比较研究估算碱基替代进化速率的简单方法。分子进化杂志,16, 111–120.

J.R.米肖。等。(2003)西古北地区木鼠(Apodemus sylvaticus)的线粒体系统地理学。分子生态学,12, 685–697.

帕拉迪斯,E。等。(2004)APE:R语言的系统发育和进化分析。生物信息学,20, 289–290.

西弗斯,F。等。(2011)使用Clustal Omega快速、可扩展地生成高质量蛋白质多序列比对。分子系统生物学,7, 539.