01 背景介绍
CD-HIT (Cluster Database at High Identity with Tolerance) 是一种广泛使用的生物信息学工具,主要用于快速聚类生物序列数据,如蛋白质或核酸序列,以减少数据冗余和简化数据分析。其基本原理涉及比较序列之间的相似性,将高度相似的序列分组到同一个聚类中,从而减少数据集的复杂性。
1.1 算法原理
CD-HIT的算法原理主要包括以下几个方面:
序列比较和相似性评分:CD-HIT通过比较序列之间的相似性来进行聚类,通常使用序列对的全局相似性或局部相似性作为衡量标准。序列相似性通常通过比对序列对中的氨基酸或核苷酸并计算相同的比例来确定。
贪婪聚类算法:CD-HIT使用一种贪婪算法来快速聚类序列。它首先将最长的序列作为聚类的代表,然后将与该代表序列相似度超过一定阈值的序列分配到同一聚类中,并从数据集中移除这些序列。接着,它选择下一个最长的序列作为新聚类的代表,重复此过程,直到所有序列都被处理。
分层聚类:为了处理大规模数据集,CD-HIT可以采用分层聚类方法,先用较高的相似度阈值进行快速聚类,然后在这些聚类的基础上使用较低的相似度阈值进行更细致的聚类。
内存和计算效率:CD-HIT设计了高效的数据结构和算法来优化内存使用和计算效率,允许它处理大型数据集,如整个微生物组或蛋白质数据库。
02 参考
https://github.com/weizhongli/cdhit #参考官网
Questions, bugs, contact Weizhong Li at liwz@sdsc.edu
For updated versions and information, please visit: http://cd-hit.org
or https://github.com/weizhongli/cdhit
cd-hit web server is also available from http://cd-hit.org
03 安装
#下载安装包
wget -c https://github.com/weizhongli/cdhit/releases/download/V4.8.1/cd-hit-v4.8.1-2019-0228.tar.gz
#解压
tar -zxvf cd-hit-v4.8.1-2019-0228.tar.gz
#make
How to compile
1. Compile with multi-threading support (default): make
2. Compile without multi-threading support (if you are on very old systems): make openmp=no
3. Compile without zlib (if you can not install zlib): make zlib=no
Having problems to compile
Please contact the author
For cd-hit-auxtools
cd cd-hit-auxtools
make
04 使用
蛋白序列
./cd-hit -h
====== CD-HIT 版本 4.8.1 ======
用法:./cd-hit [选项]
选项
-i 输入文件名,fasta 格式,必需,可以是 .gz 格式
-o 输出文件名,必需
-c 序列相似性阈值,默认为 0.9
这是 cd-hit 默认的“全局序列相似性”,计算方式为:
对齐中相同的氨基酸或碱基数
除以较短序列的全长
-G 使用全局序列相似性,默认为 1
如果设为 0,则使用局部序列相似性,计算方式为:
对齐中相同的氨基酸或碱基数
除以对齐的长度
注意!除非使用对齐覆盖度控制,否则不要使用 -G 0
参见选项 -aL, -AL, -aS, -AS
-b 对齐的带宽,默认为 20
-M 程序的内存限制(以 MB 为单位),默认为 800;0 为无限制;
-T 线程数,默认为 1;0 为使用所有 CPU
-n 单词长度,默认为 5,选择时请参阅用户指南
-l 丢弃序列的长度,默认为 10
-t 冗余容忍度,默认为 2
-d .clstr 文件中的描述长度,默认为 20
如果设为 0,它会取 fasta 定义行并在第一个空格处停止
-s 长度差异截止值,默认为 0.0
如果设为 0.9,较短序列的长度至少为
簇代表序列长度的 90%
-S 氨基酸中的长度差异截止值,默认为 999999
如果设为 60,较短序列与簇代表序列之间的长度差异
不能大于 60
-aL 较长序列的对齐覆盖度,默认为 0.0
如果设为 0.9,对齐必须覆盖序列的 90%
-AL 较长序列的对齐覆盖度控制,默认为 99999999
如果设为 60,且序列长度为 400,
那么对齐必须大于等于 340(400-60)个残基
-aS 较短序列的对齐覆盖度,默认为 0.0
如果设为 0.9,对齐必须覆盖序列的 90%
-AS 较短序列的对齐覆盖度控制,默认为 99999999
如果设为 60,且序列长度为 400,
那么对齐必须大于等于 340(400-60)个残基
-A 两个序列的最小对齐覆盖度控制,默认为 0
对齐必须覆盖两个序列的大于等于此值
-uL 较长序列的最大未匹配百分比,默认为 1.0
如果设为 0.1,未匹配区域(不包括首尾缺口)
不得超过序列的 10%
-uS 较短序列的最大未匹配百分比,默认为 1.0
如果设为 0.1,未匹配区域(不包括首尾缺口)
不得超过序列的 10%
-U 最大未匹配长度,默认为 99999999
如果设为 10,未匹配区域(不包括首尾缺口)
不得超过 10 个碱基
-B 1 或 0,默认为 0,默认情况下,序列存储在 RAM 中
如果设为 1,序列存储在硬盘上
!!不再支持!!
-p 1 或 0,默认为 0
如果设为 1,在 .clstr 文件中打印对齐重叠
-g 1 或 0,默认为 0
根据 cd-hit 默认算法,一个序列被聚类到第一个
满足阈值的簇(快速聚类)。如果设为 1,程序
会将它聚类到最相似的满足阈值的簇
(准确但慢的模式)
但无论是 1 还是 0 都不会改变最终簇的代表
-sc 按大小(序列数)排序簇,默认为 0,按长度递减输出簇
如果设为 1,按大小递减输出簇
-sf 按簇大小(序列数)排序 fasta/fastq,默认为 0,不排序
如果设为 1,按簇大小递减输出序列
如果输入为 .gz 格式,这可能非常慢
-bak 写备份簇文件(1 或 0,默认为 0)
-h 打印此帮助信息
核酸序列
./cd-hit-est -h
====== CD-HIT 版本 4.8.1 ======
用法:/cd-hit-est [选项]
选项
-i 输入文件名,fasta 格式,必需,可以是 .gz 格式
-j 如果输入为配对末端 (PE) 文件,fasta/fastq 格式的 R2 读取的输入文件名
-i R1.fq -j R2.fq -o output_R1 -op output_R2 或
-i R1.fa -j R2.fa -o output_R1 -op output_R2
-o 输出文件名,必需
-op 如果输入为配对末端 (PE) 文件,R2 读取的输出文件名
-c 序列相似性阈值,默认为 0.9
这是 cd-hit 默认的“全局序列相似性”,计算方式为:
对齐中相同的氨基酸或碱基数
除以较短序列的全长
-G 使用全局序列相似性,默认为 1
如果设为 0,则使用局部序列相似性,计算方式为:
对齐中相同的氨基酸或碱基数
除以对齐的长度
注意!除非使用对齐覆盖度控制,否则不要使用 -G 0
参见选项 -aL, -AL, -aS, -AS
-b 对齐的带宽,默认为 20
-M 程序的内存限制(以 MB 为单位),默认为 800;0 为无限制;
-T 线程数,默认为 1;0 为使用所有 CPU
-n 单词长度,默认为 10,选择时请参阅用户指南
-l 丢弃序列的长度,默认为 10
-d .clstr 文件中的描述长度,默认为 20
如果设为 0,它会取 fasta 定义行并在第一个空格处停止
-s 长度差异截止值,默认为 0.0
如果设为 0.9,较短序列的长度至少为
簇代表序列长度的 90%
-S 氨基酸中的长度差异截止值,默认为 999999
如果设为 60,较短序列与簇代表序列之间的长度差异
不能大于 60
-aL 较长序列的对齐覆盖度,默认为 0.0
如果设为 0.9,对齐必须覆盖序列的 90%
-AL 较长序列的对齐覆盖度控制,默认为 99999999
如果设为 60,且序列长度为 400,
那么对齐必须大于等于 340(400-60)个残基
-aS 较短序列的对齐覆盖度,默认为 0.0
如果设为 0.9,对齐必须覆盖序列的 90%
-AS 较短序列的对齐覆盖度控制,默认为 99999999
如果设为 60,且序列长度为 400,
那么对齐必须大于等于 340(400-60)个残基
-A 两个序列的最小对齐覆盖度控制,默认为 0
对齐必须覆盖两个序列的大于等于此值
-uL 较长序列的最大未匹配百分比,默认为 1.0
如果设为 0.1,未匹配区域(不包括首尾缺口)
不得超过序列的 10%
-uS 较短序列的最大未匹配百分比,默认为 1.0
如果设为 0.1,未匹配区域(不包括首尾缺口)
不得超过序列的 10%
-U 最大未匹配长度,默认为 99999999
如果设为 10,未匹配区域(不包括首尾缺口)
不得超过 10 个碱基
-B 1 或 0,默认为 0,默认情况下,序列存储在 RAM 中
如果设为 1,序列存储在硬盘上
!!不再支持!!
-P 输入配对末端 (PE) 读取,默认为 0,单个文件
如果设为 1,请使用 -i R1 -j R2 来输入两个 PE 文件
-cx 序列尾部修剪后保留的长度,默认为 0,不修剪
如果设为 50,程序只使用输入序列的前 50 个字母
-cy R2 序列尾部修剪后保留的长度,默认为 0,不修剪
如果设为 50,程序只使用输入 R2 序列的前 50 个字母
例如,对于配对末端读取,使用 -cx 100 -cy 80
-ap 对齐位置约束,默认为 0,无约束
如果设为 1,程序将强制序列在开头对齐
设置为 1 时,程序只进行 +/+ 对齐
-p 1 或 0,默认为 0
如果设为 1,在 .clstr 文件中打印对齐重叠
-g 1 或 0,默认为 0
根据 cd-hit 默认算法,一个序列被聚类到第一个
满足阈值的簇(快速聚类)。如果设为 1,程序
会将它聚类到最相似的满足阈值的簇
(准确但慢的模式)
但无论是 1 还是 0 都不会改变最终簇的代表
-r 1 或 0,默认为 1,默认执行 +/+ 和 +/- 对齐
如果设为 0,仅进行 +/+ 链对齐
-mask 掩码字母(例如,-mask NX,以掩码 'N' 和 'X')
-match 匹配分数,默认为 2(T-U 和 N-N 为 1)
-mismatch 不匹配分数,默认为 -2
-gap 开口罚分,默认为 -6
-gap-ext 延伸罚分,默认为 -1
-bak 写备份簇文件(1 或 0,默认为 0)
-sc 按大小(序列数)排序簇,默认为 0,按长度递减输出簇
如果设为 1,按大小递减输出簇
-sf 按簇大小(序列数)排序 fasta/fastq,默认为 0,不排序
如果设为 1,按簇大小递减输出序列
如果输入为 .gz 格式,这可能非常慢
-h 打印此帮助信息
05 常用命令行
蛋白序列聚类
### cd-hit 的基本用法
cd-hit -i XX.fa -o XX.fa.cdhit -c 0.9 -n 5 -M 16000 - d 0 -T 10
##参数说明
-i 输入文件,fasta格式的序列 注意这里是蛋白序列
-o 输出文件路径和名字
-c 相似性(clustering threshold),0.9表示相似性大于等于90%的为一类
-n 两两序列进行序列比对时选择的 word size
-d 0表示使用 fasta 标题中第一个空格前的字段作为序列名字
-M 16000,16GB RAM 内存,这里怎么都够
-T 使用的线程数
##Choose of word size:
-n 5 for thresholds 0.7 ~ 1.0
-n 4 for thresholds 0.6 ~ 0.7
-n 3 for thresholds 0.5 ~ 0.6
-n 2 for thresholds 0.4 ~ 0.5
核酸序列聚类
cd-hit-est -i XX.fa -o XX.cdhit.fa -c 0.95 -n 10 -d 0 -M 16000 - T 8
##cd-hit-est 的基本用法基本和 cd-hit 相同,只是 cd-hit-est 是用于核酸序列聚类,其中 word size 范围有点差异
##参数说明
-i 输入文件,fasta格式的序列 注意这里是核酸序列
-o 输出文件路径和名字
-c 相似性(clustering threshold),0.9表示相似性大于等于90%的为一类
-n 两两序列进行序列比对时选择的 word size
-d 0表示使用 fasta 标题中第一个空格前的字段作为序列名字
-M 16000,16GB RAM 内存,这里怎么都够
-T 使用的线程数
##Choose of word size:
-n 10, 11 for thresholds 0.95 ~ 1.0
-n 8,9 for thresholds 0.90 ~ 0.95
-n 7 for thresholds 0.88 ~ 0.9
-n 6 for thresholds 0.85 ~ 0.88
-n 5 for thresholds 0.80 ~ 0.85
-n 4 for thresholds 0.75 ~ 0.8
序列的去冗余在序列比对中十分重要。去除冗余序列是序列研究中的重要方面,常见于无参转录组研究方面。序列去冗余软件cd-hit的开发帮助了相关研究的高效率进行。
06 参考文献
"CD-HIT: a fast program for clustering and comparing large sets of protein or nucleotide sequences", Weizhong Li & Adam Godzik. Bioinformatics, (2006) 22:1658-1659
"CD-HIT: accelerated for clustering the next generation sequencing data", Limin Fu, Beifang Niu, Zhengwei Zhu, Sitao Wu & Weizhong Li. Bioinformatics, (2012) 28:3150-3152
刘欢. 生物多序列比对方法及其关键技术研究[D]. 中国科学技术大学, 2022. DOI:10.27517/d.cnki.gzkju.2022.000625