在使用基因组组装相关软件时,我们经常会听到kmer这个名词。kmer究竟是什么东西呢?
在组装时,由于机器读长的限制,直接采用overlap进行组装的算法效果并不好,为了提升组装效果,基于kmer的算法流行了起来。
kmer 是一段固定长度的序列,这个长度是自己定义的,也就是我们常说的kmer大小, 一个实际的例子如下
Read: AGATCGAGTG
3-mers: AGA GAT ATC TCG CGA GAG AGT GTG
这里定义kmer的长度为3,对于输入的序列来说,从第一个碱基开始,采用滑动窗口的形式(步长为1),依次提取3bp的序列,这些序列就是kmer。
示意图如下
kmer有哪些用途呢?
从上面的例子可以看出,来自同一段基因组序列的kmer之间是可以互相连接起来的,而且overlap的长度为 kmer的长度减1。
对于长度为L的序列,最终得到的kmer的总数是可以计算到的, 公式如下
n = (L - K) + 1
通过测序的reads可以统计出kmer的总数,然后可以反推回去基因组的大小。一个实际的例子如下:
对于不同长度的基因组,利用kmer总数来评估基因组大小,基因组长度越长,错误率越低,对于1MB的基因组来说,错误率只有0.17%,已经是一个可以接收的误差范围了。
当然,利用上述公式直接反推是理论情况,在实际中,由于基因组杂合度,重复区域,测序深度不均一等特性,kmer的总数和基因组大小并不是线性关系,所以我们需要借助算法来校正这些因素的影响。
在后续文章中,会详细介绍各种利用kmer评估基因组大小的软件的用法。