用blast进行短序列(20nt左右)的搜索
一句话概括就是:blastn多加上-task blastn-short -word_size 7 -evalue 1就ok了。
这段时间用blastn比较多,所以遇到这个问题时,首先想到的也是blast系列。但对于极短序列的搜索,在命令行下的参数设置有些麻烦。简单总结一下:
这三个选项是比较重要的(仅针对我标题指出的情况)
-task:设置比对模式,通常情况会有一个默认task,这里要设置为blastn-short
-word_size:尽可能小,这里设为7
-evalue:类似于p值的一个指标,越小说明越可靠
evalue这个值跟平时一般序列比对时设置的完全不一样,以往我设置的是1e-5,这回我设的100和1。
当设置为blastn-short时,就默认了word_size为7,所以此时可以不加word_size。那设置了word_size为7后,可以不加task吗?可以的,但是得到的结果有些区别:它得到的纪录数更多,但也有更多记录出现了错配(我的测试中37%出现了错配),而加了task之后,错配数只占7%,这也进一步说明了blastn-short模式会限制错配数出现,对于短序列比对是可以理解的。
我分别做了三次尝试:
可以看到在一定范围内(100-1),降低evalue会缩小结果范围,留下最可靠的记录。改用blastn-short比对模式,基本不允许错配,会更适合短序列比对。
最后我按照相似度100%,比对长度为查询序列原长提取三个结果文件中最准确的记录,发现居然是一模一样的(哪条短序列比对到ref的哪一个位置完全相同)!!!
仔细一想,这也好理解,完美匹配的那一些记录在不同的e值,不一样严格程度的比对下,始终是完美匹配的。
reference
http://ab.inf.uni-tuebingen.de/software/megan4/how-to-use-blast/