教程 | 如何用cd-hit去除冗余序列?_ypfzhao的博客-程序员宅基地

技术标签: 生物信息  

0.简介 

生信分析中经常要根据指定条件查找相似序列,比如构建多个样品间的非冗余基因集、分析样品间的相似程度等等,cd-hit这款软件就可以用较短的时间解决此类问题,可以对单个数据集进行去冗余,包括DNA/RNA序列和蛋白序列,也可以对两个数据集进行比较。其工作原理可概述为:将所有序列按照参数设定进行聚类,并将每一组聚类中的最长序列作为代表序列进行输出,同时给出每组聚类下的每个序列名可供相似度分析使用。下面我们来简单介绍一下它的使用方法。

1.下载与安装

网址:http://cd-hit.org ;http://www.bioinformatics.org/cd-hit/ ;https://github.com/weizhongli/cdhit/archive/V4.6.2.tar.gz;

这是一个在linux系统下使用的工作,我们可以给自己的电脑装一个双系统或者在windows下使用linux的虚拟机。然后我们可以执行下面的命令进行解压(注意我们要将路径先切换到安装包所在的文件目录下,或者在执行命令时使用完整路径)。

gzip -d cdhit-4.2.tar.gz

然后进入到解压后的文件夹(我解压后的文件夹为cdhit-4.2,同样要注意我们的文件路径问题,如果上面使用的是完整路径,最好这里也使用完整路径,比如我使用完整路径是‘cd /home/zpf/cdhit-4.2’)

cd cdhit-4.2

最后编译一下就可以了,执行make

make

然后我们就可以使用这个工具了。

2.输入文件格式

Cd-hit的输入文件仅有一个fasta格式文件 ,一般来说cd-hit是将几个样品的基因或蛋白序列进行聚类,所以需要将这些样品的序列汇总到一起作为输入文件,可在linux系统下通过cat命令实现:

cat a.fasta b.fasta c.fasta > all.fasta

 其中a.fasta,b.fasta,c.fasta为fasta格式的三个样品基因或蛋白序列,all.fasta为汇总后的序列,在分析中作为cd-hit的输入序列。值得注意的是,在三个样品序列中不能有序列名相同的序列,否则会出现错误。因此,一般在分析时会在各样品序列名前添加样品名,这样即可避免重复。序列名是fasta文件中以“>”开头的行空格之前的内容,如下图中蓝色线圈出部分。

图1

3.输出文件

Cd-hit有两个输出文件:一个是只含有所有代表序列(即去冗余后的序列)的fasta文件,其格式参看图1;另一个是以.clstr结尾的聚类信息文件,其格式如图2。

图2

 以“>”开头的是一个聚类组。每组下面按序号排列,如上图中Cluster 1组有5个聚类序列。每个聚类序列有一个百分比或“*”,百分比代表该序列与代表序列的相似度,“*”代表该序列即为代表序列。

4.去除冗余的基本思路

首先对所有序列按照其长度进行排序,然后从最长的序列开始,形成第一个序列类,然后依次对序列进行处理,如果新的序列与已有的序列类的代表序列的相似性在cutoff以上则把该序列加到该序列类中,否则形成新的序列类。之所以快主要是两个方面的原因:一个是使用了word过滤方法,即如果两条序列之间的相似性在80%(假设序列长度为100),那么它们至少有60个相同的长度为2的word,至少有40个相同的长度为3的word,至少有20个相同的长度为4的word。基于这个原则,在处理新的序列的时候,如果新的序列与已有序列的相同word的长度不能满足这些要求则不需要进行比对了,这极大的降低了时间消耗;另外一个速度快的原因是使用了index table,可以很快的计算序列之间相同word的数目。

   #当序列相似性在80%时,有20个位点是有差异的,极端的情况就是这20个位点对应的长度为2的字符串都不一样,因此是40个不一样,当有更多的不一样时,两条序列的相似性不可能在80%;同理,如果这20个位点对应的长度为4的字符串都不一样,则有80个不一样。

5.使用方法和参数介绍

Cd-hit运行时用很多参数可以进行调整设置,其运行命令为(参数仅为示例)在刚才编译的文件路径下执行:

cd-hit -i all.fasta -o new.fa -c 0.8 -aS 0.8 -d 0

下面简单介绍一下重要的几个参数:

-i:输入文件,fasta格式。

-o:输出文件前缀,输出文件有两个,分别为fasta格式序列文件和以.clstr结尾的聚类信息文件。

-c:较短序列比对到长序列的bp与自身bp数的比值超过该数值则聚类为一组,默认为0.9。

-d:聚类信息文件中各个聚类组中序列名的长度,设为0则将取完整序列名。

-aL:控制代表序列比对严格程度的参数,默认为0,若设为0.8则表示比对区间要占到代表(长)序列的80%。

-AL:控制代表序列比对严格程度的参数,默认为99999999,若设为40则表示代表序列的非比对区间要短于40bp。

-aS:控制短序列比对严格程度的参数,默认为0,若设为0.8则表示比对区间要占到短序列的80%。

-AS:控制短序列比对严格程度的参数,默认为99999999,若设为40则表示短序列的非比对区间要短于40bp。

下图详解了-aL,-AL,-aS,-AS四个参数。

图3

 

aL = Ra / R

AL = R - Ra

aS = Sa / S

AS = S - Sa

6.cdhit的缺点

1 它不能保证同一个序列类中的序列的相似性都在threshold之上,因为每次比对都是用新序列与序列类的代表序列进行,这就有可能使得序列类中除了代表序列外其他序列之间的相似性在threshold之下。比如A是代表序列,B与A的相似性大于0.95,C与A的相似性也大于0.95,但是这并不能保证B与C的相似性也大于0.95.

2 它不能保证一个序列类的病毒与另外一个序列类中的病毒的相似性也在threshold之上,原因还是在于用代表序列代表了整个序列类。

3 基于word filter的方法使得使用每个长度的word能够处理的冗余性水平有限,如使用长度为2的word只能够得到相似性在50%以上的序列,长度为3的word只能够得到相似性在66.7%以上的序列类,类似的,长度为5的word只能够得到相似性在80%以上的序列。在实际应用的时候需要注意选择的word长度与threshold的匹配。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41481113/article/details/83824743

智能推荐

datax因为脏数据降速问题解决_datax脏数据_Omndzzz的博客-程序员宅基地

一言以蔽之:datax可能会因为脏数据太多导致频繁回滚操作,进一步让jvm内存触发gc,让速度降低到0,可以在sql语句中规避脏数据的写入来规避1.问题datax使用类型转换触发jvm gc然后降速至0失去响应。->脏数据为什么会触发gc->脏数据导致datax回滚写入降速a.首先是开始就低速,发生在动态基线策略里面b.到八十万条左右的时候就开始低速,发生在动态基线和状态评价里面,这时日志伴随脏数据记录输出。c.id会从2049开始,是否有一个2048的块大小进行抽取,然后过一段时_datax脏数据

iOS:UITableView 使用(一)--基本使用_晴-_-天的博客-程序员宅基地

------------------------自定义accessoryView------------------------

CSS选择器的优先级_weixin_30376509的博客-程序员宅基地

在PHP程序员雷雪松的博客前面的文章已经详细的介绍了CSS选择器和CSS常用的属性和值。下面再讲解一下CSS选择器的优先级。什么叫CSS选择器优先级呢?简单的讲就是浏览器通过CSS选择器组成的匹配规则判断定义的多条CSS指令优先级,决定最忠元素显示的属性值。那下面就具体的看看关于CSS选择器优先级的规则。1、通过CSS选择器文件引入的方式。(外部样式)External sty...

Springboot在启动加载测试类报异常.IllegalStateException,Unable to find a @SpringBootConfiguration_errors: springbootapplicationtests 禄 illegalstate _执行者_的博客-程序员宅基地

异常信息:java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=…) with your test原因及其解决办法1、原因:自己的测试类和主启动类不在一个包名下;2、解决:把自己的测试类和程序的主启动类放在同一个包名下,就OK..._errors: springbootapplicationtests 禄 illegalstate unable to

JeecgBoot 配置菜单报错Cannot find module ‘./components/layouts/RouteView .vue‘_早起的小青年的博客-程序员宅基地

JeecgBoot 配置菜单报错Error: Cannot find module ‘./components/layouts/RouteView .vue’at webpackContextResolve (eval at ./src sync recursive ^\.\/.*\.vue$ (608.js:792), <anonymous>:476:11)at webpackContext (eval at ./src sync recursive ^\.\/.*\.vue$ (608.

Linux服务器运维入门和常用的密令记录_linuk上传下载密令_玉念聿辉的博客-程序员宅基地

一开始做前端的时候最不理解的就是后台的哥们,下发的数据我到现在都忘不了,不信你们自己看一下{"名字":"玉念聿辉","特点":"帅,特备帅"};没办法,谁叫我太帅呢,只有自己去学习后台开发了。慢慢的你会发现,当一个项目从策划到后期内测、上市都能搞定的时候,特别讨嫌的问题又出现了,运维小哥照样可以整死你;OK一下是我在项目运维上常用到的Linux密令和入门资料,做一个记载,希望大家也能多多分..._linuk上传下载密令

随便推点

LINUX MPEG4 DVR源代码_dvr源码_东方匠心的博客-程序员宅基地

这是一个简单的,但却是相当完整的DVR的source code:LINUX MPEG4 DVR源代码。此中只有视频,没有音频,落鹤生推荐大家好好看看。此代码可用以下命令编译:gcc -o linux_dvr linux_dvr.c -lxvidcore。有问题可以来论坛(http_dvr源码

新手入门:PyCharm 的使用_catOneTwo的博客-程序员宅基地

相关文章:Windows 10 同时安装 Python 2 和 Python 3PyCharm 专业版的安装推荐一个视频:pycharm使用教程 (语速偏慢,建议2倍速观看)PyCharm 是一种 Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外..._pycharm

Python程序员面试算法宝典---解题总结: 第4章 数组 4.22 如何从三个有序数组中找出它们的公共元素_查找公共元素的面试题_天地一扁舟的博客-程序员宅基地

# -*- coding: utf-8 -*-'''Python程序员面试算法宝典---解题总结: 第4章 数组 4.22 如何从三个有序数组中找出它们的公共元素题目:给定以非递减顺序排序的三个数组,找出这三个数组中的所有公共元素。例如,给出下面三个数组:ar1 = [2, 5, 12, 20, 45, 85]ar2 = [16, 19, 20, 85, 200]ar3 = ..._查找公共元素的面试题

FreeMarker基础入门知识2 -表达式_freemaker 二元表达式_夜半无声的博客-程序员宅基地

1:表达式当需要给插值或者指令参数提供值时,可以使用变量或其他复杂的表达式。 例如,我们设x为8,y为5,那么 (x + y)/2 的值就会被处理成数字类型的值6.5。在我们展开细节之前,先来看一些具体的例子:当给插值提供值时:插值的使用方式为 ${expression}, 把它放到你想输出文本的位置上,然后给值就可以打印出来了。 即 ${(5 + 8)/2_freemaker 二元表达式

想成为嵌入式程序员应知道的_super-H的博客-程序员宅基地

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某

ai2022中文版(支持m1) ai2022mac版_mac ai哪个版本好用_深海___的博客-程序员宅基地

最新版本的Illustrator 2022 for Mac中文版已经更新啦!!这是一款专业的矢量图形设计软件,这次的ai 2022 mac版新增和改进了不少功能,比如应用3D效果、支持使用Adobe Substance材质添加纹理、通过发现面板交付上下文自助式内容、无缝激活缺失字体、支持HEIF或WebP格式、支持将您的Illustrator文档链接与任何人共享、简化了变量宽度描边等,功能更加完善,赶紧来Illustrator 2022中文版体验全新功能哦!Illustrator 2022 for _mac ai哪个版本好用

推荐文章

热门文章

相关标签