背景知识
什么是ATAC-Seq?
Assay for transposase-accessible chromatin using sequencing(利用转座酶研究染色质可接近性的高通量测序技术),可以在全基因上捕获裸露DAN与核小体的DNA。
细胞的不同时期染色质松紧程度不同,其中结构疏松的染色质被称为开放染色质,它有足够的区域允许一些调控蛋白过来与其结合。染色质的这种特性,叫做染色质的可接近性。ATAC-Seq使用Tn5酶(load with sequencing adaptors)插入核小体间的开放染色质区域,生成可被PCR扩增的测序文库片段。
为什么要做ATAC-Seq,ATAC-Seq相比于其他技术有什么优势?
优势:使用细胞数较少;使用ATAC-seq识别全基因组上的开放染色质区域,在调控区域识别核小体结合和核小体游离位置,寻找全基因组范围内蛋白质可结合位点的信息,寻找不知道的特定转录因子;使用“footprint”推断dna结合蛋白在b细胞系中的位置。
ChIP-seq:一种针对DNA结合蛋白,组蛋白修饰或核小体的全基因组分析技术。根据感兴趣的转录因子设计抗体去做ChIP实验拉DNA,验证感兴趣的转录因子是否与DNA存在相互作用。
MNase-Seq:用来鉴定核小体区域。
CUT&Tag:适用于微量细胞的ChIP技术。解读CUT&Tag -
分析流程
一.分步跑
1.fastqc质控
用 fastqc 检查序列质量,看是否需要进行过滤和去接头
fastqc -o cleanout -t 20 clean.*_R1.fq.gz
2.过滤并处理接头
(1).fastp处理
fastp -i *_R1.fq.gz -I *_R2.fq.gz -o clean.*_R1.fq.gz -O clean.*_R2.fq.gz -f 15 --adapter_sequence=TCGTCGGCAGCGTC --adapter_sequence_r2=GTCTCGTGGGCTCGG -w 15
用fastp处理后面数据时发现,切了之后还会出现adapter的问题。
(2).改用trimmoatic
java -jar /home/*/trimmomatic-0.39.jar PE -phred33 -trimlog logfile -threads 16 *_R1.fq.gz *_R2.fq.gz clean.*_R1p.fq.gz clean.*_R1u.fq.gz clean.*_R2p.fq.gz clean.*_R2u.fq.gz ILLUMINACLIP:/home、*/Trimmomatic-0.39/adapters/NexteraPE-PE.fa:2:30:10:8:true SLIDINGWINDOW:15:20 HEADCROP:15
参数解读:生信软件 | Trimmomatic (测序数据质控) - 知乎
3.然后将序列比对到参考基因组上
bowtie2 --very-sensitive -p 15 -x /home/zjin/atac/ref/horse -1 clean.HBM-2_R1p.fq.gz -2 clean.HBM-2_R2p.fq.gz | samtools sort -O bam -@ 15 -o - > output.bam
#use the --very-sensitive parameter to have more chance to get the best match even if it takes a bit longer to run.
4.去除pcr重复
首先需要清楚是实验还是物种本身的pcr重复
(1).samtools
samtools sort -n -o namesort.bam output.bam -@ 25
从名称排序的对齐中填写配合坐标、SIZE 和配合的相关标志。
samtools fixmate -@ 15 -m namesort.bam fixmate.bam
samtools sort -o positionsort.bam fixmate.bam -@ 15
samtools markdup positionsort.bam markdup.bam -@ 20
(2).picrad
picard MarkDuplicates REMOVE_DUPLICATES=true I=output.bam O=picard.bam M=picard.metrc.csv
去除低质量reads
samtools view -h -f 2 -q 30 picard.bam | samtools sort -O bam -@ 10 -o - > picard.last.bam
5.去除线粒体重复
线粒体DNA是裸露的,也可以被Tn5酶识别切割
可以通过下面两种方法中任一种实现:
在比对之前,将线粒体DNA从比对使用的参考基因组中去除。该方法的缺点使比对数会看起来比较差,因为所有的线粒体DNA序列都将被记为未匹配序列。
在进行比对之后去除线粒体DNA。可以使用Harvard FAS Informatics编写的python脚本去除线粒体RNA序列。
samtools view -@ 15 -h markdup.bam | python removeChrom.py - - chrM(根据参考基因组上线粒体的来命名,也可以是MT等) -p 15| samtools view -@ 15 -b - > f.bam harvard/removeChrom.py at master · jsh58/harvard · GitHub
#每一步做完后,可以用samtools检查一下
$ samtools flagstat sample1.bam
3826122 + 0 in total (QC-passed reads + QC-failed reads) #总共的reads数
0 + 0 secondary
1658 + 0 supplementary
343028 + 0 duplicates
3824649 + 0 mapped (99.96% : N/A) #总体reads的匹配率
3824464 + 0 paired in sequencing #总共的reads数
1912442 + 0 read1 #reads1中的reads数
1912022 + 0 read2 #reads2中的reads数
3808606 + 0 properly paired (99.59% : N/A) #完美匹配的reads数:比对到同一条参考序列,并且两条reads之间的距离符合设置的阈值
3821518 + 0 with itself and mate mapped #paired reads中两条都比对到参考序列上的reads数
1473 + 0 singletons (0.04% : N/A) #单独一条匹配到参考序列上的reads数,和上一个相加,则是总的匹配上的reads数。
5882 + 0 with mate mapped to a different chr#paired reads中两条分别比对到两条不同的参考序列的reads数
4273 + 0 with mate mapped to a different chr (mapQ>=5) #paired reads中两条分别比对到两条不同的参考序列的reads数
6.macs2 进行peak calling
macs2 callpeak -t f.bam -g 2.5e9 --nomodel --shift -100 --extsize 200 -n HFM --outdir ./horse
需要注意其中背景基因组序列数量和 --shift --extsize 参数,基因组大小可以通过在网站上查找得知,也可以自己写个脚本去了解。
python fa.py /home/zjin/atac/ref/Equus_caballus.EquCab3.0.dna.toplevel.fa --thread 15 有效基因组大小: 2497530654
MACS2 参数详细学习_慕课手记
7.计算FRIP值
(1).先把bam文件转为bed文件,使用的是SAMtobed这个python文件,此处不能使用BEDTools中的bamtobed软件来处理,因为它的输出文件不是MACS2可以处理的标准文件。
samtools view -h f.bam | python /home/zjin/data/HFM-1/SAMtoBED.py -i - -o f.bed -x -v
bedtools bamtobed -i finallly.bam -o bed.bed
但是之后也可以用其进行比较。然后算出分母----序列比对到基因组上的总reads(去除pcr重复,线粒体)
wc -l f.bed,然后再求交集
bedtools intersect -a bed.bed -b /home/zjin/data/HFM-1/horse/HFM_peaks.narrowPeak |wc -l
第一个算出来的是0.2058,第二个算出来的是0.2026
(2).也可以使用r包来计算
library(encodeChIPqc)
library(GenomicRanges)
peaks = read.table('/home/zjin/data/3-21/GJM/horse/GJM_peaks.narrowPeak')
colnames(peaks) = c('chr','start','end','name','score','strand','signal','pval','qval','peak')
peaks.gr = makeGRangesFromDataFrame(peaks,keep.extra.columns=TRUE)
bam.file ="/home/zjin/data/3-21/GJM/f.bam"
frip(bam.file,peaks.gr)
8.计算insert size
picard CollectInsertSizeMetrics I=./f.bam O=./CBM.insertsize H=./CBM.pdf
可以先去了解下文库长度是多少,2代测序一般是300bp。
peak结果中要存在NFR和mononucleosome peak区域,NFR peak指的是长度小于1个核小体单位长度的peak区域,1个核小体的DNA长度为146bp, NFR peak长度小于146b;ppmononucleosome peak指的是只跨越了1个核小体的peak, 长度在1个到2个核小体单位长度之间,即146到292bp之间,考虑两个核小体。
一般每200bp会存在一个峰,这个周期性波动反应的是核小体的个数,这是因为tn5酶有时候会切两个、三个或多个核小体下下来。富集最多的就是切下的开放染色质区域的reads。
9.计算tss
常规的做法是提取TSS两侧区域的reads, 比如上下游各提取2kb的区域,划分等长窗口bin统计每个窗口内的coverage, 最终会生成一个矩阵,行为基因,列为不同窗口。根据这个矩阵可以绘制TSS两侧reads分布图, 也可以计算TSS Enrichment score。推荐使用deeptools。
10.计算IDR
IDR(Irreproducibility Discovery Rate),通过比较一对经过排序的regions/peaks 的列表,然后计算反映其重复性的值,log文件会给出peaks通过IDR < 0.05的比率。IDR的值越小越好,说明两者间重复性越小。
sort -k8,8nr HBM-2_peaks.narrowPeak > sort.HBM-2_peaks.narrowPeak
idr --samples sort.HBM-1_peaks.narrowPeak sort.HBM-2_peaks.narrowPeak --input-file-type narrowPeak --rank p.value --output-file sort.sample-idr --plot --log-output-file sample.idr.log
11.计算nrf和PBC1、PBC2
NRF代表的是非冗余reads的比例,与参考基因组比对之后,我们可以得到所有比对上的reads, 其中有一部分是unique mapping的reads, 这些reads唯一比对到基因组上的一个位置,NRF就是unique mapping reads除以total mapped reads。
PBC1和PBC2称之为PCR阻塞系数,和NRF不同,这两个系数通过基因组位置的个数来进行计算。将unique mapping reads比对上的基因组位置称之为M, 根据每个位置上比对上的序列数,称之为M1, M2等,其中,PBC1为M1/M的值,PBC2为M1/M2的值。
samtools view -h output.bam | grep AS | grep -v XS |wc -l(找到唯一匹配)
samtools view -h output.bam |wc -l
在质检完成后,可以进行下一步的相关分析。
做完之后可以详细阅读这个教程,里面有很详细的流程指导以及步骤的意义,裨补缺漏。galaxy
12.绘制pca图,差异peak以及相关性分析
具体参数步骤详见:生信 | ATAC-Seq基础分析+高级分析+多组学分析 -
PCA主成分分析:原理是将高维数据投影到较低维空间,提取多元事物的主要因素,揭示其本质特征。得到主成分轴向(属性)的目的就是为了可以舍弃其他次要的成分,当然,主成分属性也是优于其他成分的属性,缺点就是这个属性没法用语言来解释。
原理:主成分分析(PCA)原理详解 - 知乎
在一般情况下,对于一个属性的数据分布来说,方差越大越好分类。PC1是影响分类的主要成分Principal components。和PC1垂直的y就是PC2。百分数是指这个主成分对总体方差的贡献率,比如PC1可以解释总体方差的44%。值是特征值,在第一维度,第二维度上分别表示出来。
相关性热图:一般来讲研究对象(样品或处理组)之间使用距离分析,而元素(物种或环境因子)之间进行相关性分析。策略是将基因组划分为等长的区间,称之为bin, 计算每个区间内的覆盖度,然后通过比较不同样本间的覆盖度来计算样本相关性。
区间覆盖度:每一碱基的覆盖率是基因组碱基被测序的平均次数。基因组的覆盖深度是通过与基因组匹配的所有短读的碱基数目除以该基因组的长度来计算的。
但是通过deeptools的multiBamSummary命令,发现画出来的bin并不是等分的,可以自己写个脚本做一下。
差异peak:找到多个样本相同的peak区间,然后基于这些相同区域的peak开始找差异(落在peak间的reads数量不同而造成),一般是已知结果用图来展示。
13.igv可视化
导入物种的基因组和GTF文件,在导入bw文件,寻找marker基因上peak是否富集。
igv操作:IGV可视化reads分布和表达峰图 - 知乎
14.寻找motif
motif我们可以简单理解为:在复杂网络中出现的局部规律,这种规律现象无处不在。
在生物中Motif是比较有特征的短序列,会多次出现。利用motif分析可以挖掘其修饰/结合偏好,进而锁定相关基因,对后续讨论、实验具有指导作用。用homer寻找motif时需要两个数据集:一种是常见的bed文件格式,另一种是HOMER软件指定使用的peak文件格式。步骤如下:
(1). 序列提取
通过bed文件给出的基因组位置信息,在对应基因组上提取出来的是对应的基因组序列
通过peak文件给出的位置信息提取ATAC-Seq中reads在基因组上的富集信息
(2).背景选择
使用的是基因组位置时从整个基因组序列抓取GC含量一致的序列作为背景序列(序列长度可设置)
(3).GC含量矫正
将目标序列和背景序列对GC含量进行分bin(5%区间),背景序列通过调节权重得到和目标序列同样的GC含量分布.
(4). 自动标准化
减少偏差
homer寻找motif有两种模式。
Discovering Motifs de novo
(1).解析输入序列
根据设置的motif长度(默认是8,10,12),将输入序列解析为寡核苷酸,生成一个寡核苷酸频度表,并记录它在目标和背景序列中出现的次数。
#寡核苷酸 (Oligonucleotide),是一类只有20个以下碱基的短链核苷酸的总称(包括脱氧核糖核酸DNA或核糖核酸RNA内的核苷酸)
(2).寡核苷酸自动均一化
(3).全局搜索
基本原理就是若某个motif富集,则其存在的寡核苷酸也同样富集,为了增加灵敏度和节省计算资源,允许错配。(超几何分布和二项式)
(4).矩阵优化
(5).标记和重复
当最优的寡核苷酸序列被优化成motif后,motif 对应的序列从要分析的数据中移除,接下来再分析直到设定个数的motif序列被发现。
Screening for Enrichment of Known Motifs,
(1).加载moitf数据库
(2).扫描所有的motif
扫描每个motif的序列并计算在多少目标或背景序列上出现来确定每个motif的富集度。
为什么要找motif,CHIP-seq和ATAC-seq的区别?
ATAC-seq根据motif找到的moti (转录因子集合位点独有的序列,起始位点在基因组上面),去在基因组上找转录因子。
CHIP-seq是已知转录因子,知道moti序列(特定的),然后看有没有peak。
总而言之做ATAC-seq是为了去发现感兴趣的位置。
2.使用ENCODE提供的ATAC-Seq pipeline
GitHub - ENCODE-DCC/atac-seq-pipeline: ENCODE ATAC-seq pipeline
输入原始fastq数据一直到peak caling结束的基础分析功能
pipeline中的build_genome_data.sh,用于将不同基因组处理成所需的文件。
质控标准:The fraction of reads in called peak regions (FRiP score) should be >0.3, though values greater than 0.2 are acceptable
结果会出现详细的质控报告