生信 | ATAC-Seq基礎分析+高級分析+多組學分析

寫在前面

  • 其實很多作者已經探索的差不多了,相關腳本、教程也很多,但我還是自己系統的總結一下吧。有時候感覺是浪費時間,但是在寫的時候能發現并學習到很多新的知識,不斷記錄反思,也算是對自己這段時間的學習成果有個交代。但由于我是初學者,還望各位不吝賜教。

ATAC-seq的首次提出:【文章原文】【scATAC原文】
ATAC-seq植物界的里程碑:【文章原文】【中文解讀】
ATAC-seq針對不同植物物種進行研究:【文章原文】【中文解讀】
ATAC-seq針對不同植物組織進行研究:【文章原文】【中文解讀】
ATAC-seq針對不同處理條件進行研究:【文章原文】【中文解讀】
ATAC-seq生信分析方法綜述:【文章原文】【中文解讀1】【中文解讀2】
ATAC-seq基礎原理一文了解:【一文了解ATAC-seq】

一、基礎知識

1. 解密表觀遺傳學的三個方向與測序方法

  • 1. 探索染色質的開放性(chromatin accessibility)
    ATAC-seq: Assay of Transposase Accessible Chromatin sequencing
    DNase-seq: DNase I hypersensitive sites sequencing
    FAIRE-seq: Formaldehyde-Assisted Isolation of Regulatory Elements sequencing
  • 2. 探索轉錄因子的綁定與組蛋白修飾(TF binding and histone modifications)
    ChIP-seq: Chromatin Immuno-Precipitation sequencing
  • 3. 探索核小體占位(nucleosome positioning and occupancy)
    MNase-seq: Micrococcal Nuclease sequencing

2. 名詞解釋

  • epigenetics:表觀遺傳學。表觀遺傳學修飾在不改變DNA序列的情況下控制著基因的表達,包括染色質重塑、組蛋白修飾、DNA甲基化和microRNA通路等
  • peaks: 峰。常用來表示染色質的開放程度,因為是測序的reads落在了染色質的開放區,堆疊后被可視化的一種豐度的體現。
  • THSs: 轉座酶超敏感位點(transposase hypersensitive sites)。
  • CREs: 順式調控元件(cis-regulatory elements)。即DNA分子中具有轉錄調節功能的特異DNA序列。按功能特性,真核基因順式作用元件分為啟動子、增強子沉默子。
  • ACRs: 染色質開放區域(accessible chromatin regions)。即正?;蚝诵◇w被酶切裸露出來的DNA片段所在的區域。這篇【NP | 2019】根據ACRs距離最近基因的距離將ACRs分為三種類型:genic (gACRs; overlapping a gene), proximal (pACRs; within 2?kb of a gene) or distal (dACRs; >2?kb from a gene),分別是跨越基因的,近端的,遠端的染色質開放區。
  • transposon: 轉座子。一段可以從原位上單獨復制或斷裂下來,環化后插入另一位點,并對其后的基因起調控作用的DNA序列。戳看轉座子科普
  • promoter: 啟動子。啟動子是位于結構基因5'端上游的DNA序列,能活化RNA聚合酶,使之與模板DNA準確的結合并具有轉錄起始的特異性。每個啟動子包括至少一個轉錄起始點以及一個以上的功能組件(典型的如TATA盒子)
  • proximal promoters: 近端啟動子。是DNA上位于基因開始之前的一個區域,在那里蛋白質和其他分子結合在一起準備讀取該基因。
  • enhancer: 增強子。增強子是遠離轉錄起始點、決定基因的時間、空間特異性表達、增強啟動子轉錄活性的DNA序列,其發揮作用的方式通常與方向、距離無關,可位于轉錄起始點的上游或下游。從功能上講,沒有增強子存在,啟動子通常不能表現活性;沒有啟動子時,增強子也無法發揮作用。
  • TFs: 轉錄因子(transcription factors)是保證目的基因以特定的強度在特定的時間與空間表達的蛋白質分子。與RNA聚合酶Ⅱ形成轉錄起始復合體,共同參與轉錄起始的過程。
  • TSS: 轉錄起始位點(transcription start site)。在一個典型的基因內部,排列順序為轉錄起始位點(TSS,一個堿基)-起始密碼子編碼序列 (ATG)-終止密碼子編碼序列(TGA)-轉錄終止位點 (TTS),即TSS-ATG-TGA-TTS
  • histone:組蛋白。通常含有H1,H2A,H2B,H3,H4等5種成分,其中H1與H3極度富含賴氨酸(lysine),H1不保守,其他組蛋白的基因非常保守。除H1外,其他4種組蛋白均分別以二聚體(共八聚體)相結合,形成核小體核心。DNA便纏繞在核小體的核心上。而H1則與核小體間的DNA結合
  • nucleosome: 核小體。是由DNA和組蛋白形成的染色質基本結構單位。每個核小體由146bp的DNA纏繞組蛋白八聚體1.75圈形成。核小體核心顆粒之間通過50bp左右的連接DNA相連,暴露在核小體表面的DNA能被特定的核酸酶接近并切割
  • H3K4me1: 組蛋白H3上的第4位賴氨酸發生單甲基化(mono-methylation of H3 at lysine 4) (NG | H3K4me1與增強子的關系)
  • H3K9ac:組蛋白H3上的第9位賴氨酸發生乙酰化(H3 acetylation marks at lysine 9)關于H3K4me1與H3K9ac的不同,依舊可以參考這篇文獻【NP | 2019】【NC | 2019】
  • 組蛋白甲基化:甲基化可發生在組蛋白的賴氨酸和精氨酸殘基上,而且賴氨酸殘基能夠發生單、雙、三甲基化,而精氨酸殘基能夠單、雙甲基化,這些不同程度的甲基化極大地增加了組蛋白修飾和調節基因表達的復雜性
  • 組蛋白乙酰化:四種類型的組蛋白相互作用,將細胞核里的DNA緊緊地包裝起來。這樣的緊密包裝能夠有效阻止酶讀取DNA上的遺傳信息。然而,乙?;B到組蛋白上能削弱它們對DNA的占據。因此局部乙酰化能暴露出相應的基因,讓它們更容易激活
    真核生物細胞核內染色質結構

二、基礎分析

1. 分析前的準備

1.1 下載ATAC測序數據(或者用你自己的數據也行)
# 提取100w條reads代碼
ls *gz|while read id;do zcat $id|head -4000000|gzip > ./100/${id};done
image.png
1.2 下載tair10基因組與gff3注釋文件
wget https://www.arabidopsis.org/download_files/Genes/TAIR10_genome_release/TAIR10_chromosome_files/TAIR10_chr_all.fas
wget https://www.arabidopsis.org/download_files/Genes/TAIR10_genome_release/TAIR10_gff3/TAIR10_GFF3_genes_transposons.gff
# 改名
mv TAIR10_chr_all.fas TAIR10_genome.fa
mv TAIR10_GFF3_genes_transposons.gff TAIR10.gff3
1.3 安裝miniconda
1.4 所需軟件安裝(分析中所用到的軟件都匯集于此,下文不再介紹如何下載)\color{red}{請先激活conda環境再安裝!?。?!}
conda install -c bioconda -y fastqc
conda install -c bioconda -y trimmomatic
conda install -c bioconda -y bwa
conda install -c bioconda -y samtools
conda install -c bioconda -y picard
conda install -c bioconda -y macs2
conda install -c bioconda -y bedtools
conda install -c bioconda -y deeptools
conda install -c bioconda -y homer

\color{red}{后續分析是使用SRR7512044用做測試(如下),但思路和方法都可以借鑒}

測試數據

2. 測序質量檢測

fastqc -t 8 -o ./ *.fastq.gz

-t: 線程
-o: 存放路徑,不用指定前綴,默認為.fastq.gz前面的字段
*.fastq.gz: fastqc可以同時接受多個fastq.gz文件,因此采用正則表達式【*】表示全部

  • 結果解讀
    由于開始測序時不準確,因此前15bp左右的ATGC含量有波動,需要在后面截掉。而最長reads為76bp,則暗示著我最后至少要保留多長的序列。
    一般我的計算思路是:保留的序列長度 =(最長的的reads長度-前面波動的堿基長度)× 40%

2. 測序質量檢控制

  • 所需軟件:Trimmomatic【官方網站】【中文介紹】
    其實這批數據已經做過質控了,如何判斷的呢?QC的為一個范圍且短于提供給NCBI上的數據。因此我們沒必要質控,但為了流程的完整性,還是假裝質控一下。質控之后,還要進行質檢,如此循環,直到合格。
# 定義一些變量,后面修改起來方便
filename=SRR7512044

trimmomatic PE -threads 10 \
./${filename}_1.fastq.gz ./${filename}_2.fastq.gz \
./${filename}_1.clean.fq.gz ./${filename}_1.drop.fq.gz \
./${filename}_2.clean.fq.gz ./${filename}_2.drop.fq.gz \
HEADCROP:15 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:24

PE: 雙端模式。需要兩個輸入文件,正向測序序列和反向測序序列:sample_R1.fastq.gzsample_R2.fastq.gz;
以及四個輸出文件:sample_1.clean.fq.gzsample_1.drop.fq.gz;sample_2.clean.fq.gzsample_2.drop.fq.gz
-threads: 線程數
HEADCROP: 從 reads 的開頭切掉指定數量的堿基,即從fastqc中看的
LEADING: 從 reads 的開頭切除質量值低于閾值的堿基
TRAILING: 從 reads 的末尾開始切除質量值低于閾值的堿基
SLIDINGWINDOW: 從 reads 的 5' 端開始,進行滑窗質量過濾,切掉堿基質量平均值低于閾值的滑窗
MINLEN: 如果經過剪切后 reads 的長度低于閾值則丟棄這條 reads,即上面的計算方法:(76-15)×40%≈24

3. 建立索引與序列比對

bwa index -p /路徑/bwaIndexTair /路徑/TAIR10_genome.fa

-p: 索引前綴,后綴自動補充
TAIR10_genome.fa: 基因組文件

  • 序列比對
    由于sam文件較大,因此我們直接跳過sam,使用samtools轉換為排序后的bam文件,注意【|】不要漏掉,且排序是依據reads比對到基因組的位置排的
# 定義一些變量,后面用
filename=SRR7512044
index=/路徑/bwaIndexTair

bwa mem -M -t 8 \
-R "@RG\tID:${filename}\tSM:${filename}\tLB:WXS\tPL:Illumina" \
$index \
${filename}_1.clean.fq.gz \
${filename}_2.clean.fq.gz \
| samtools sort -O bam -@ 10 -o ./${filename}.raw.bam
#無論干啥,生成bam文件后就要建立bam索引,并檢查比對情況
samtools index -@ 10 -b ./${filename}.raw.bam
samtools flagstat ./${filename}.raw.bam > ./${filename}.raw.stat
cat ${filename}.raw.stat

-M: 將 shorter split hits 標記為次優,以兼容 Picard’s markDuplicates 軟件
-R: STR 完整的read group的頭部,可以用 '\t' 作為分隔符, 在輸出的SAM文件中被解釋為制表符TAB. read group 的ID,會被添加到輸出文件的每一個read的頭部,強推去看關于-R的解釋【-R的使用】
-O: 表示輸出的bam文件
-o: 輸出的bam文件名
-t@: 線程數

  • 關于stat中內容的解釋如下
14608455 + 0 in total (QC-passed reads + QC-failed reads) reads總數
37967 + 0 secondary                                       出現比對到參考基因組多個位置的reads數
0 + 0 supplementary                                       可能存在嵌合的reads數
0 + 0 duplicates                                          重復的reads數
14590894 + 0 mapped (99.88% : N/A)                        比對到參考基因組上的reads數
14570488 + 0 paired in sequencing                         屬于PE read的reads總數。
7285244 + 0 read1                                         PE read中Read 1 的reads 總數。
7285244 + 0 read2                                         PE read中Read 2 的reads 總數。
14507068 + 0 properly paired (99.56% : N/A)               完美比對的reads總數。PE兩端reads比對到同一條序列,且根據比對結果推斷的插入片段大小符合設置的閾值。
14551500 + 0 with itself and mate mapped                  PE兩端reads都比對上參考序列的reads總數。
1427 + 0 singletons (0.01% : N/A)                         PE兩端reads,其中一端比上,另一端沒比上的reads總數。
26260 + 0 with mate mapped to a different chr             PE read中,兩端分別比對到兩條不同的序列的reads總數。
17346 + 0 with mate mapped to a different chr (mapQ>=5)   PE read中,兩端分別比對到兩條不同

4. 去除PCR重復并再次進行質控

picard MarkDuplicates \
REMOVE_DUPLICATES=true \
I=${filename}.raw.bam \
O=${filename}.rmdup.bam \
M=${filename}.rmdup.log
# 實時監測我們的數據發生了什么變化
samtools index ${filename}.rmdup.bam
samtools flagstat ${filename}.rmdup.bam > ./${filename}.rmdup.stat

REMOVE_DUPLICATES=true: 表示將檢測出的PCR duplication直接去除;
I: 或者INPUT指定輸入的bam文件;
O: 或者OUTPUT指定輸出去除PCR duplication的bam文件;
M: 或者METRICS_FILE指定輸出的matrix log文件。

  • 下面是再次進行質控
samtools view -h -f 2 -q 30 ${filename}.rmdup.bam \
| grep -v -e "mitochondria" -e "*" -e "chloroplast" \
| samtools sort -O bam -@ 10 -o - > ${filename}.last.bam
# 實時監測我們的數據發生了什么變化
samtools index ${filename}.last.bam
samtools flagstat ${filename}.last.bam > ./${filename}.last.stat

-h: 輸出的sam文件帶header,默認不帶
-f: 輸出含有所有flag的reads
-q 比對的最低質量值,一般20/30都可以
其他參數介紹看 samtools 使用簡述,需要說明的是由于比對到線粒體和葉綠體的reads不是我們關注的重點,因此使用grep剔除掉,當然了,做動物的話需要剔除什么視情況而定了。

5. 統計過濾后的結果中Insertsize長度分布

  • 所需軟件:picard【官方網站】【中文介紹】
    Insertsize =(read2的比對位點 - read1的比對位點)+ read2的長度。也可以隨便點擊上圖IGV中任一一條reads查看插入片段的大小
picard CollectInsertSizeMetrics \
I=./${filename}.last.bam \
O=./${filename}.last.insertsize \
H=./${filename}.last.hist.pdf

有關下圖的介紹,請看【給你bam文件,你會畫插入片段長度分布圖嗎?】

5. \color{red}{peaks\ calling}與FRiP_score/SPOT_score的計算

effective_genome_size=119481543

bedtools bamtobed -i ${filename}.last.bam > ${filename}.last.bed
macs2 callpeak \
-t ${filename}.last.bed \
-g ${effective_genome_size} \
--nomodel --shift -100 --extsize 200 \
-n ${filename}.last \
-q 0.01 --outdir ./peaks
  • 其實,這里面討論最多的是--nomodel --shift -100 --extsize 200這些參數如何選擇,下面的圖很形象的展示了參數的作用。當然,我也是查閱了很多資料與文獻,一般默認在ATAC-seq,DNase-seq,FAIRE-seq的時候將shift設置為extsize的一半,且參數固定為:--nomodel --shift -100 --extsize 200。而在MNase-seq的時候,參數固定為:--nomodel --shift 37 --extsize 73。在ChiP-seq的時候不用移峰,所以只使用-nomodel,當做組蛋白修飾的時候,由于peak并不典型,所以使用–nomodel –shift 73參數。另外如何使用macs2 predictd預測雙峰模型,這里就不展開介紹了,可以私聊我,我把腳本發你。
shift 與 extsize 到底在干啥?
  • 下面是我見過的圖中解釋移峰現象最清楚的了,可以參考
移峰
  • 最后,就是輸出文件的解讀
    1. ${filename}_peaks.xls
前幾行是callpeak時的命令。后面是:
1.染色體號
2.peak起始位點
3.peak結束位點
4.peak區域長度
5.peak的峰值位點(summit position)
6.peak 峰值的高度(pileup height at peak summit, -log10(pvalue) for the peak summit)
7.peak的富集倍數(相對于random Poisson distribution with local lambda)
    1. ${filename}_peaks.narrowPeak
narrowPeak文件是BED6+4格式,可以上傳到IGV查看
1.染色體號
2.peak起始位點
3.peak結束位點
4.peak name(樣本名+_peak_1的后綴之類的)
5.-10*log10qvalue
6.正負鏈
7.fold change
8.-log10pvalue
9.-log10qvalue
10.相對于峰的峰頂位置(relative summit position to peak start)
  • 注意:\color{red}{xls里起始坐標需要減1才與narrowPeak的起始坐標一樣,見下圖}
    1. ${filename}_summits.bed
BED格式的文件,包含peak的summits(峰頂)位置
1.染色體號
2.峰的峰頂起始位點(注意是峰頂,不是峰,他只是一個點)
3.峰的峰頂起始位點(因此二者就差一個堿基的位置)
4.峰頂(樣本名+_peak_1的后綴之類的)
5.-log10pvalue
  • 注意:\color{red}{xls里起始坐標需要減1才與bed的起始坐標一樣,見下圖}

  • 另外,需要告訴你的是,bed文件中第2列中的峰頂起始位點是如何計算的?
    bed文件中第2列(峰的峰頂起始位點) = xls第二列 + xls第十列 -1。或者↓↓↓↓
    bed文件中第2列(峰的峰頂起始位點) = narrowPeak第二列 + narrowPeak第十列

  • 總覽比較:


    bed,narrowPeak,bdg,xls四種類型輸出文件的比較
  • FRiP_score的計算【官方介紹】
    簡單來說,FRiP_score說的就是統計落在Peaks里面的reads數量與所有比對到基因組上reads數量的比值??梢宰鳛榕卸颖緶y序質量的一個指標。

Reads=$(bedtools intersect -a ${filename}.last.bed -b ${filename}_peaks.narrowPeak |wc -l|awk '{print $1}')
totalReads=$(wc -l ${filename}.last.bed|awk '{print $1}') 
echo ${Reads} ${totalReads} ${filename} 'FRiP_score:' $(echo "scale=2;100*${Reads}/${totalReads}"|bc)'%'
  • 官網上說ATAC-Seq的FRiP score should be >30%(https://www.encodeproject.org/atac-seq/)我猜是如果大多數reads都不在peaks區域,說明測序質量或者實驗效果不是太好,因為酶切切開的就是peaks區域,太少不是就偏離實驗目的了嘛
  • SPOT_score的計算【官方介紹】【軟件安裝】
    簡單來說,SPOT_score就是在FRiP_score的基礎上增加了測序深度的條件限制,比如FRiP是統計全局的reads,而SPOT只統計測序深度為30×的reads,大于30×的reads不再參與統計。目前我還在探索中如何計算。

二、高級分析

所謂的高級并不高大上,做了有可能也不能讓你的文章提升檔次,望周知!

1. IGV可視化

  • 前面的bam文件,narrowPeak文件,bed文件都有了,現在還差一個bw文件,因此我們先跑下面的代碼,然后在IGV里面統一看一下

  • 所需軟件:deeptools【官方網站】【中文介紹】IGV
    主要是為生成bw文件用于IGV展示

bamCoverage --bam ${filename}.last.bam -o ${filename}.last.bw \
    --binSize 10 \
    --normalizeUsing RPGC \
    --effectiveGenomeSize ${effective_genome_size} \
    --ignoreForNormalization chrX \
    --extendReads

注:如果發現沒有這個包pysam.libchtslib,直接安裝pip install numpydoc
-o: 生成bw文件
binSize: 自行設定覆蓋度計算的窗口大小(bin)
normalizeUsing: 數據準化方法,有三種RPGC,RPKM,CPM,BPM
ignoreForNormalization: 設置你想忽略的染色體名稱
extendReads: 讓reads擴展至fragment的大小

  • IGV一覽
IGV可視化bw、narrowpeak,bed,bam,gff文件

2. TSS/TES 可視化

awk -vFS='[\t=;]' -vOFS="\t" \
'{if ($3=="gene") print $1,$4,$5,$10,$6,$7}' \
TAIR10.gff|sed 's/Chr//g' > refseq.bed  
#由于tair官網上提供的基因組文件中染色人命名沒有Chr,為保持一致,這里去掉
  • 然后進行TSS可視化
computeMatrix reference-point --referencePoint TSS  -p 15 \
    -b 2000 -a 2000 \
    -R ./refseq.bed \
    -S *.bw \
    -o TSS.gz \
    --skipZeros \
    --outFileSortedRegions Heatmap1sortedRegions.bed
plotHeatmap -m TSS.gz -out TSS.Heatmap.pdf --plotFileFormat pdf
plotProfile -m TSS.gz -out TSS.Profile.pdf --plotFileFormat pdf --perGroup
  • 然后進行TES 可視化
computeMatrix scale-regions  -p 15  \
    -b 2000 -a 2000 \
    -R ./refseq.bed \
    -S *.bw \
    --skipZeros -o body.gz
plotHeatmap -m body.gz -out body.Heatmap.pdf --plotFileFormat pdf
plotProfile -m body.gz -out body.Profile.pdf --plotFileFormat pdf --perGroup
  • 另外,參考下面這個圖,看每個參數控制的哪里,如何同時繪制多個等。這是我好久之前總結的,清晰度堪憂

3. 相關性可視化(依舊是使用deeptools)

  • 因為我測試樣本少,所以就使用官網的圖了哈,但代碼是能跑通的,放心使用。
  • 先使用 [bw] 文件生成 [npz] 文件。所有樣本做相關性,用 [*.last.bw],多個單列出來也行
multiBigwigSummary bins -b *.last.bw -o number.of.bins.npz
  • 畫相關性熱圖
plotCorrelation -in number.of.bins.npz \
--corMethod pearson \
--skipZeros \
--plotTitle "Pearson Correlation of Average Scores Per Transcript" \
--plotFileFormat pdf \
--whatToPlot heatmap --colorMap RdYlBu --plotNumbers \
-o heatmap_PearsonCorr_bigwigScores.pdf \
--outFileCorMatrix PearsonCorr_bigwigScores.tab
heatmap
  • 畫相關性點圖
plotCorrelation -in number.of.bins.npz \
--corMethod pearson \
--skipZeros \
--plotTitle "Pearson Correlation of Average Scores Per Transcript" \
--plotFileFormat pdf \
--whatToPlot scatterplot \
-o scatterplot_PearsonCorr_bigwigScores.pdf \
--outFileCorMatrix PearsonCorr_bigwigScores.tab
相關性點圖

5. ChIPseeker對peaks進行注釋和可視化

  • 對peak的注釋分為兩個部分——\color{red}{結構注釋與功能注釋}
    \color{red}{結構注釋}會將peak所落在基因組上的區域結構注釋出來,比如說啟動子區域,UTR區域,內含子區域等等。同時,也會將與peak最臨近的基因注釋出來,非常好用。
    \color{red}{功能注釋}其實并不是對peak進行注釋的,而是對peak最臨近的基因注釋的,因此這部分就和傳統的GO/KEGG等分析如出一轍啦。

5.1 結構注釋

5.1.1 準備工作:導入包,沒有的安裝吧。另外需要使用gff/gtf構建一個TxDb。因為官網上TxDb也不是每一個物種都有(目前共43個),因此我們自己手動構建。

#if (!requireNamespace("BiocManager", quietly = TRUE))
#    install.packages("BiocManager")
#BiocManager::install("clusterProfiler")

library(clusterProfiler)
library(ChIPseeker)
library(GenomicFeatures)
txdb <- makeTxDbFromGFF("public/bioinfoYu/genome/tair10/TAIR10.gff",
                        format="gff")    #也可以使用gtf
keytypes(txdb)    #感興趣的話,可以用以下方法探索txdb都包含了什么內容
keys(txdb)

5.1.2 單個文件的結構注釋(不推薦在這一步加OrgDB的內容,沒用)

#讀入單個summits文件
peaks <- readPeakFile("SRR7512044_summits.bed")
#結構注釋
peakAnno <- annotatePeak(peaks,
                         TxDb=txdb,
                         tssRegion=c(-1000, 1000))

上面的tssRegion取值有說法的,因為判定"Promoter", "Exon", "Intron", "Intergenic"等結構的依據就是根據范圍來的。比如定義1000以內的,則在1kbp之內規定為"Promoter (<=1kb)",而1k-2k內定義為"Downstream (1-2kb)"。但你定義2000以內呢,則在1kbp之內規定為"Promoter (<=1kb)",而1k-2k內定義為"Promoter (1-2kb)"。雖然,ChIPseeker會標記出來區域,但還是三思后再取范圍。

#注釋完,進行可視化,多種圖可供選擇
plotAnnoBar(peakAnno)
plotDistToTSS(peakAnno)
vennpie(peakAnno)
plotAnnoPie(peakAnno)
#install.packages("ggupset")
library(ggupset)
upsetplot(peakAnno)
#install.packages("ggimage")
library(ggimage)
upsetplot(peakAnno, vennpie=TRUE)

#最后將我們的注釋結果轉為數據框,便于查看
df <- as.data.frame(peakAnno)
#將注釋到的基因提取出來(第14列),用于后續功能分析
gene <- df[,14]
提供可視化的方法

5.1.3 多個文件的結構注釋

#一次也可以讀入多個summits文件,使用list存儲,然后使用lapply注釋
files = list(peak1 = "peaks.bed", peak2 = ("peak.bed"))
peakAnnoList <- lapply(files, 
                       annotatePeak,
                       TxDb=txdb,
                       tssRegion=c(-2000, 2000))
plotAnnoBar(peakAnnoList)
plotDistToTSS(peakAnnoList)
讀入多個summits文件的可視化

5.2 功能注釋

5.2.1 可選支線
由于這里需要物種的OrgDb注釋庫,但并不是所有的物種都有??!怎么辦?戳看【構建自己的OrgDb庫】。如果你足夠幸運,研究的物種正好在官網僅提供的20個物種中存在,那就拿來用吧。除了以上這些都好說,還有是\color{red}{ID轉換},后面再說。
5.2.2 OrgDb下載
本次測試是用擬南芥的樣本,在官網中可以直接將所需要的的OrgDb庫下載到服務器上,這樣就不用在R里面重復在網上獲取浪費時間了。比如說擬南芥,就可以下載。當然也可以直接install了,看你喜歡哪種了。

wget http://www.bioconductor.org/packages/release/data/annotation/src/contrib/org.At.tair.db_3.13.0.tar.gz
tar -zvxf org.At.tair.db_3.13.0.tar.gz

5.2.3 導入OrgDb

#從本地下載OrgDb庫(如果你直接下載到了R的lib里面,就直接library也可)
install.packages("/public/bioinfoYu/genome/tair10/org.At.tair.db", repos=NULL)
#另外一種方法
#if (!requireNamespace("BiocManager", quietly = TRUE))install.packages("BiocManager")
#BiocManager::install("org.At.tair.db")
#載入庫
library(org.At.tair.db)
#感興趣的話,看看org.At.tair.db包含的都是些啥
#查看包含的列名
keytypes(org.At.tair.db)
#查看包含的基因ID
keys(org.At.tair.db)
#隨便選擇一個基因和一些列名,看一看到第是什么東東,不過因為導入了其他包,下面命令報錯,我至今還沒有解決
select(org.At.tair.db,keys="AT1G01010",columns = c("ENTREZID","GO","SYMBOL"))

5.2.4 ID轉換(非必須)
上面5.1.2已經得到peak附近的基因集【gene】了,如果需要ID轉換,就是用Y叔clusterProfiler中的bitr函數

#首先,去除版本號,如AT1G50040.1后面的.1,當然我們的測試集沒有,因此不用做
#gene_rm <- gsub(".[0-9]+$","",gene)
#下面進行ID轉換
keytypes(org.At.tair.db)
gene_last <- bitr(geneID = gene, 
                    fromType = "TAIR",
                    toType = c("ENTREZID", "SYMBOL", "GENENAME"),
                    OrgDb = org.At.tair.db)

# geneID    需要轉換的ID
# fromType  當前ID類型
# toType    轉換成什么ID,使用keytypes()查看有哪些類型
# OrgDb     注釋數據庫

5.2.5 GO功能注釋

# 因為keyType不接受數據框類型的數據,因此我們轉換為字符型
genelist <- gene.symbol[,2]  #注意我這里把ENTREZID單獨拿出來了,所以下面自然是keyType = "ENTREZID",
go_result <- enrichGO(genelist,
                      keyType = "ENTREZID", 
                      OrgDb = org.At.tair.db, 
                      ont = "BP", #BP,MF,CC,ALL可選
                      pAdjustMethod = "BH", 
                      qvalueCutoff = 0.05, 
                      readable = FALSE)
#可視化,showCategory=20調整顯示的條目多少
dotplot(go_result, showCategory=20)
#將結果轉為數據框,可以選擇導出
goresult <- as.data.frame(go_result)
GO可視化

5.2.6 KEGG通路注釋

#geneClusters必須是數據框類型,ID必須是ENTREZID類型
class(gene.symbol)
compKEGG <- compareCluster(geneClusters=gene.symbol, 
                           fun = "enrichKEGG",
                           organism = "ath",    #在 http://www.genome.jp/kegg/catalog/org_list.html 上查看物種簡寫
                           pvalueCutoff  = 0.05, 
                           pAdjustMethod = "BH")
dotplot(compKEGG, showCategory = 20, title = "KEGG Pathway Enrichment Analysis")
KEGG可視化

6. homer尋找motif

# 提取peaks的位置信息文件
awk '{print $4"\t"$1"\t"$2"\t"$3"\t+"}' \
SRR7512044_peaks.narrowPeak > SRR7512044.homer_peaks.tmp
# 尋找motif
findMotifsGenome.pl SRR7512044.homer_peaks.tmp \
./TAIR10_genome.fa \  #指定參考基因組
./SRR7512044.motif \  #輸出文件夾的名字
-size 200 -len 8,10,12

7. DiffBind找差異peak

首先根據我自己的理解將找差異peak的原理說一下:既然是找差異的peak,那首先就要保證不同樣本間peak所在的區間基本一致才可以。因此第一步就是找到多個樣本相同的peak區間。第二步,基于這些相同區域的peak開始找差異,這個地方的差異和傳統的RNA-Seq找差異基因的原理一模一樣,都是對落在峰區間的reads進行計數,數量不同的話差異就由此而來。但軟件都幫我們做了,就不用考慮那么多了

  • 我廢話真多,其實最麻煩的就是準備輸入數據,下面來看怎么做
    一般情況相下需要包括以下幾列:"SampleID", "Tissue", "Factor", "Condition" ,"Treatment","Replicate", "bamReads" ,"ControlID" ,"bamControl" ,"Peaks"和"PeakCaller"

  • 但我們做ATAC-Seq的哪里有什么control,controlID,bamControl,因此刪掉,而"Tissue", "Factor", "Condition" ,"Treatment","Replicate",表示的都是分組的意思,因此我保留了兩個"Factor","Replicate",最后csv文件的樣子如下:

SampleID:不能有重復
Factor:進行分組,后面要做差異分析的依據
Replicate:重復的編號
bamReads:最后生成的bam文件。全路徑+bam文件名
Peaks:macs2生成的narrowPeak文件。全路徑+narrowPeak文件名
PeakCaller:說明peak類型,使用narrowPeak文件則為narrow。使用xls文件,則用macs。使用bed文件,則用bed

  • 開始正題
# 安裝包
if (!requireNamespace("BiocManager", quietly = TRUE))install.packages("BiocManager")
BiocManager::install("DiffBind")
library(DiffBind)
#導入數據,dba函數會將會將bam文件一同導入,因此csv中的路徑一定要準確
tamoxifen <- dba(sampleSheet="atDiff.csv")
#查看樣本間的相關性
plot(tamoxifen)
#計算每個樣本中的reads數
tamoxifen <- dba.count(tamoxifen)
#簡單查看計算結果
info <- dba.show(tamoxifen)
libsizes <- cbind(LibReads=info$Reads, FRiP=info$FRiP, PeakReads=round(info$Reads * info$FRiP))
rownames(libsizes) <- info$ID
libsizes
#統計結果
       LibReads FRiP PeakReads
cmt2_1  6720462 0.29   1948934
cmt2_2  7747491 0.33   2556672
wild_1  7078309 0.36   2548191
wild_2  8030752 0.34   2730456
ddcc_1  6370232 0.30   1911069
ddcc_2  6956429 0.35   2434750
#默認基于測序深度對數據進行標椎化
tamoxifen <- dba.normalize(tamoxifen)
norm <- dba.normalize(tamoxifen, bRetrieve=TRUE)
norm
#查看進行標準化的文庫大小(library-size),其實就是各樣本文庫大小總和的平均值,你可以計算驗證一下
normlibs <- cbind(FullLibSize=norm$lib.sizes, NormFacs=norm$norm.factors, NormLibSize=round(norm$lib.sizes/norm$norm.factors))
rownames(normlibs) <- info$ID
normlibs
#標椎化結果
       FullLibSize  NormFacs NormLibSize
cmt2_1     6720462 0.9398443     7150612
cmt2_2     7747491 1.0834724     7150612
wild_1     7078309 0.9898885     7150612
wild_2     8030752 1.1230859     7150612
ddcc_1     6370232 0.8908652     7150612
ddcc_2     6956429 0.9728438     7150612
#分組,格式是表頭在最前面,要分的組依次寫在后面,只能兩兩比較,因此后面只能寫兩組,但可以多執行幾次,都會追加到tamoxifen 中
#分組1,后面使用contrast=1單獨查看
tamoxifen <- dba.contrast(tamoxifen, contrast=c("Factor","ddcc","wild"))
#分組2,后面使用contrast=2單獨查看
tamoxifen <- dba.contrast(tamoxifen, contrast=c("Factor","cmt2","wild"))
#當然還可有分組3,4,5等,均可以使用contrast=number單獨查看
tamoxifen
#按照分組分別進行差異分析,默認使用DESeq2進行計算,可以選擇method = DBA_EDGER(edgR),或者兩個都要method = DBA_ALL_METHODS
tamoxifen <- dba.analyze(tamoxifen)
dba.show(tamoxifen, bContrasts=TRUE)
#查看差異分析的結果與導出為csv文件
#查看第1組差異分析的結果
tamoxifen.DB_1 <- dba.report(tamoxifen,contrast=1)
tamoxifen.DB_1
write.csv(tamoxifen.DB_1, file="diffBind_result.csv")

#查看第2組差異分析的結果
tamoxifen.DB_2 <- dba.report(tamoxifen,contrast=2)
tamoxifen.DB_2
write.csv(tamoxifen.DB_2, file="diffBind_result.csv")

##傳統的上下調在找差異peak中稱為“Gain”或“Loss”
#查看第1組的差異peak數量“Fold>0或<0”控制是“Gain”或“Loss”
sum(tamoxifen.DB$Fold>0,contrast=1)
sum(tamoxifen.DB$Fold<0,contrast=1)
#查看第2組的差異peak數量“Fold>0或<0”控制是“Gain”或“Loss”
sum(tamoxifen.DB$Fold>0,contrast=2)
sum(tamoxifen.DB$Fold<0,contrast=2)
  • 由于我是使用兩組進行測試的,所以可以使用contrast=1或contrast=2分別查看,由于都是相同的代碼,下面進行可視化的時候,只選擇contrast=1進行可視化
#韋恩圖可視化
dba.plotVenn(tamoxifen, contrast=1, bDB=TRUE, bGain=TRUE, bLoss=TRUE, bAll=FALSE)

#PCA
dba.plotPCA(tamoxifen) #這里可以使用所有樣本進行PCA
dba.plotPCA(tamoxifen, contrast=1, label=DBA_FACTOR)#單獨對分組1進行PCA

#MA plots
dba.plotMA(tamoxifen, contrast=1)

#Volcano plots
dba.plotVolcano(tamoxifen, contrast=1)

#Box plots
dba.plotBox(tamoxifen, contrast=1)

#Heatmap
hmap <- colorRampPalette(c("red", "black", "green"))(n = 13)
#對所有樣本的所有的差異peak畫熱圖
dba.plotHeatmap(tamoxifen,correlations=FALSE,scale="row",colScheme = hmap)
#單獨對分組1中所有的差異peak畫熱圖
dba.plotHeatmap(tamoxifen, contrast=1, correlations=FALSE, scale="row", colScheme = hmap)
dba.plotHeatmap(tamoxifen,correlations=FALSE,scale="row",colScheme = hmap)
  • 想畫下面的圖,可是一直提示\color{red}{could\ not\ find\ function\ dba.plotProfile},因此還沒有成功,用官方提供的圖展示一下吧,大家能畫出來可以和我說一聲哦。這是【官方文檔】可以參考
#Profiling and Profile Heatmaps
dba.plotProfile(tamoxifen)

8. footprint分析

目前我還沒有找到使用于所有物種的軟件,HINT-ATAC用來做footprint分析的話,應該只支持不幾個物種,比較雞肋。ATACseqQC應該是一款不錯的軟件,最近還在探索。各位如有建議,歡迎提出。

三、ATAC-seq與多組學數據聯合分析

轉錄因子ChIP-seq:由于大部分轉錄因子結合的是染色質開放區域,所以ATAC-seq的Peak可能和轉錄因子ChIP-seq的Peak存在部分重疊的情況,而且ATAC-seq得到的Peak長度往往更長,因此ATAC-seq數據和轉錄因子ChIP-seq數據可以相互驗證。轉錄因子在ChIP-seq中獨有的Peak暗示這個轉錄因子可能是結合在異染色質區域的驅動型轉錄因子(Pioneer TFs),驅動型轉錄因子隨后招募染色質重塑復合體以及其它轉錄因子開始轉錄。另外,聯合分析已經報道的ChIP-seq數據可以更準確地分析轉錄因子的足跡。
組蛋白修飾ChIP-seq:ATAC-seq數據同樣可以和組蛋白修飾ChIP-seq數據進行聯合分析,其中轉錄激活性修飾(H3K4me3,H3K4me1和H3K27ac等)與染色質開放程度呈正相關,轉錄抑制性修飾(H3K27me3)與染色質開放程度呈負相關。聯合已知的增強子和啟動子之間的相互作用數據也可以幫助構建調控網絡。
RNA-seq:ATAC-seq數據可以通過聯合分析RNA-seq數據來發現哪些差異表達的基因是受染色質可及性調控的,進一步可以推測這些差異表達的基因哪些是受開放染色質中具有motif和footprint的轉錄因子調控的,因此ATAC-seq與RNA-seq的聯合分析有助于破譯基因調控網絡和細胞異質性。

  • 前前后后用了1周的時間,將近段所學匯總于此,如有錯誤望各位多多諒解并指出,感謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容

  • ATACseq 基本原理如下圖所示。真核生物 DNA 與核小體結合形成染色質,結合的緊密程度是動態變化的。當 DN...
    BeeBee生信閱讀 19,640評論 16 46
  • 作者 | Arno審稿 | 童蒙編輯 | amethyst 上一期我們介紹了ATAC-seq相關的背景知識。ATA...
    生信阿拉丁閱讀 18,581評論 5 40
  • 這是目前為止我看到過的關于ATAC-seq的最新綜述,感興趣的話值得一讀。2020.4.22更新:我看到一個公眾號...
    Steven潘閱讀 19,093評論 1 62
  • 背景: 染色質和染色體的結構和功能 每一條染色單體由單個線性DNA分子組成。細胞核中的DNA是經過高度有序的包裝,...
    xuzhougeng閱讀 36,233評論 10 93
  • 表情是什么,我認為表情就是表現出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,537評論 2 7