官网:http://subread.sourceforge.net/
一、原理
文献参考:featureCounts: an efficient general purpose program for assigning sequence reads to genomic features
摘要
1、在高通量测序分析中用于下游分析的关键信息是比对到每个genomic feature(外显子、基因等)中的read数目,而计数的过程称为read summarization
2、featurecounts是一款使用于RNA-seq和DNA-seq的read summarization工具,应用了高效率的染色体哈希算法和feature区块技术
3、它比目前存在的工具速度都快,而且需要的内存空间少,同时可以用于单端和双端的数据
背景
1、高通量数据比对产生的结果无法让我们对其中的生物学过程产生深刻的理解, 只有将其转化成我们感兴趣的基因组特征的read count才行
2、这些我们感兴趣的基因组特征可能是外显子、基因、启动子区域、gene body或者是基因组间隙,而read counts是下游很多分析进程的输入文件
3、目前大家对计数中存在的问题关注度比较少,read count program 要求可以同时对DNA和RNA及单双端的read进行统计,同时这些片段相对于参考基因组可能包括插入、缺失、融合,同时当需要计数的feature类别很多时,又会产生一定的计算压力
4、DNA-seq read统计的方法大有不同,首先,DNAseq read可能来源于基于转录因子结合位点的chip-seq、基于组蛋白marker的chipseq或DNA甲基化测序,而这些测序关心的基因组区域很多都是基因组的间隙位置,之前有人通过计算启动子区域和这个基因体的read数分析组蛋白marker。
5、RNA-seq的计数可能更复杂,因为需要考虑到外显子剪切。一种计数方法是数一下与每一个被注释的外显子重合的read,另外一种方法是数一下与每一个基因区域重合的read
6、另一个问题是,尽管read count中包含感兴趣基因区域的所有信息,但是我们无法区分isoform的信息,因为同一基因下的不同的isoform存在很大程度的重合区域,很多基于模型的方法被开发同时也有人统计过isoform中不重合的区域作为统计的依据
7、还有一个问题是,很多工具开发的语言都是基于R和python,速度慢。
8、综上,read summarization遇到的问题为 1)对于不同实验需要不同的统计的genomic feature 2)对于同一个实验中,普通软件无法识别isoform 3)很多软件计算速度慢
数据格式和输入形式
1、输入数据
1、输入的数据有两类,一类是SAM/BAM文件,另一类是GTF/GFF/SAF,其中SAM/BAM可以输入一个或多个
2、SAM/BAM文件和GTF/GFF/SAF文件需要来自同一个参考基因组,即必须参考基因组和GTF/GFF/SAF文件来自同一个网站,同一个版本
3、SAM/BAM主要提供read所比对到的染色体/contig,read在染色体上的位置以及CICAR信息,即SAM/BAM中的三列信息,GFF/GTF/SAF主要提供feature identifier(如geneID), chromosomename, start position, end position and strand 这五列信息
4、featurecounts也支持链特异性的read的计数,前提是要提供链特异性的信息,同时featurecounts也支持用于根据比对结果中的比对质量分数来卡阈值选择合适的比对结果进行定量
2、单端和双端测序
如果是双端测序,这一对read定义了一个DNA/RNA片段的两端,这种情况下,featurecounts会计算片段数(fragment)而不是read数
3、feature和meta-feature
1、feature是指基因组上被定义的一个片段区域,meta-feature是指多个feature组成的区域,如exon和gene的关系
2、分享相同的feature identifier(GTF文件中有) 的features属于同一个meta-feature
3、featurecounts可以对features和meta-feature进行计数
算法原理
1、read与feature重叠的情况
1、featurecounts通过比较 基因组区域上每个feature所在的位置与read或fragment中每一个碱基比对的位置的关系,来精确的对read进行计数
2、它考虑了read上的各种gap,如插入、缺失、外显子剪切和融合
3、如果在read/fragment与feature中,二者至少有1bp的交集,那就实现一次命中(hit)
4、如果在read/fragment与meta-feature下属的任意feature有交集,就认为是一次命中(hit)
2、多重overlap
1、多重overlap是指一个read/fragment跨越了两个feature或在计数meta-feature时跨越两个meta-feature
2、featurecounts可以让用户选择,是排除这种多重overlap的read还是对每个被overlap的feature都计一次数,而这样的选择是由你自己的实验类型决定的
3、如果是RNA-seq实验,我们推荐把这种read去掉,因为单个fragment一定都是起源于一个目标基因的,而这种匹配到多个基因的情况,最好不要!
4、如果是chip-seq实验,我们建议保留,因为这种实验很有可能调控了多个靶基因或基因区域,这些靶基因的共同的部分可能会被富集到!
5、注意,如果在计数meta-feature的时候,在同一个meta-feature中overlap两个feature的read/fragment一定只计数一次!
3、染色体哈希
1、注意,这里的reference sequence是指参考基因组中的拼装等级,read、contig、scaffold、chromosome
2、一开始,featurecounts会为reference sequence 产生一个哈希表,它可以让match变的更快
3、在完成read和feature的match后,随后的分析可以在每一个reference sequence 中分别进行
4、基因组bin 和feature block
1、上面提到后续的分析都在每个reference sequence中进行
2、feature会先按照它们起始的位置排好顺序(从左起的base开始,leftmost base position,类似于samtools的sort),之后会创建两个层级
3、首先,reference sequence会先被分成非重叠的128kb长度的众多bins,而feature会按照其起始位置在bin中分布
4、对于每一个bin,其中相同数目的连续的feature会聚为一堆,形成block,其中一个bin中的block的数目会是该bin中feature数目的平方根,这样保证了一个block中的feature的数目与bin中的block的数目近似相等
5、这种层级结构的使用是featurecount能够实现快速定量的基础
6、之后需要定量的read会先跟bin比较,然后跟bin中的block比较,然后再跟feature比较,最后再通过预设的比较层级(feature还是meta-feature)以及是否计数(上面overlap的情况判断)来对计数做出决断。
二、操作说明
用户手册下载:http://bioinf.wehi.edu.au/subread-package/SubreadUsersGuide.pdf
featurecounts说明在P31
基本表达式
featureCounts [options]
参数说明
参数 | 说明 |
---|---|
input file | 输入的bam/sam文件,支持多个文件输入 |
-a < string > | 参考gtf文件名,支持Gzipped文件格式 |
-F | 参考文件的格式,一般为GTF/SAF,C语言版本默认的格式为GTF格式 |
-A | 提供一个逗号分割为两列的文件,一列为gtf中的染色体名,另一列为read中对应的染色体名,用于将gtf和read中的名称进行统一匹配,注意该文件提交时不需要列名 |
-J | 对可变剪切进行计数 |
-G < string > | 当-J设置的时候,通过-G提供一个比对的时候使用的参考基因组文件,辅助寻找可变剪切 |
-M | 如果设置-M,多重map的read将会被统计到 |
-o < string > | 输出文件的名字,输出文件的内容为read 的统计数目 |
-O | 允许多重比对,即当一个read比对到多个feature或多个metafeature的时候,这条read会被统计多次 |
-T | 线程数目,1~32 |
下面是有关featrue/metafeature选择的参数 | 参数说明 |
-p | 只能用在paired-end的情况中,会统计fragment而不统计read |
-B | 在-p选择的条件下,只有两端read都比对上的fragment才会被统计 |
-C | 如果-C被设置,那融合的fragment(比对到不同染色体上的fragment)就不会被计数,这个只有在-p被设置的条件下使用 |
-d < int > | 最短的fragment,默认是50 |
-D < int > | 最长的fragmen,默认是600 |
-f | 如果-f被设置,那将会统计feature层面的数据,如exon-level,否则会统计meta-feature层面的数据,如gene-levels |
-g < string > | 当参考的gtf提供的时候,我们需要提供一个id identifier 来将feature水平的统计汇总为meta-feature水平的统计,默认为gene_id,注意!选择gtf中提供的id identifier!!! |
-t < string > | 设置feature-type,-t指定的必须是gtf中有的feature,同时read只有落到这些feature上才会被统计到,默认是“exon” |
三、实例说明
1、当我们想对feature水平进行统计的时候,需要设置-f参数
featureCounts -T 10 -a $gtf -o read.count -p -B -C -f -t exon -g gene_id *.bam
2、当我们想对meta-feature水平进行统计的时候,不能设置-f参数
featureCounts -T 10 -a $gtf -o read.count -p -B -C -f -t exon -g gene_id *.bam