RNAseq常規流程

轉錄組分析是生信分析的一個基礎和常見的分析流程,一般從下機數據開始,經過一系列的質控,基因組比對,差異分析等過程得到實驗組與對照組(或者腫瘤中的轉移組和原癌組)中差異表達的基因集,然后在基于該基因集結合我們的研究方向進行進一步的功能分析,信號通路分析,細胞間通訊,實驗驗證等得到一個可解釋的實驗結果。這篇文章主要就涉及到的基本流程和相應軟件進行一個簡單的介紹,后續更深入的知識點還需要小伙伴們自己去挖掘哦。

基本分析流程:

  1. 原始數據 -- Rawdata
  2. 質控 -- QC -- Trimmomatic,FastQC
  3. 基因組比對 -- Aligment -- STAR
  4. 比對結果量化 -- FeatureCount -- featurecount
  5. 兩組間的基因表達差異分析 -- DEGs -- limma
  6. 差異基因的功能富集分析 -- GO,KEGG -- clusterProfiler

一. 測序數據下機后處理

首先,我們拿到的原始序列文件就是fq.gz 文件

  • 一般研究人員會把自己的樣本(實驗組/對照組)送到測序公司進行測序,然后測序公司會返回給我們一個fq.gz文件,如下. 每個樣本都有兩條鏈的測序數據 *_1.fq.gz 和 *_2.fq.gz , 我們要把他們單獨放在一個文件夾下作為一個樣本進行后續分析。


    fq.gz.png

1.下載fastq.gz rawdata

wget url

2.每個樣本創建一個以樣本名命名的文件夾(eg RNA-1), 并將相應的._1.fq.gz/._2.fq.gz 放入文件夾(eg RNA-1),用作后續QC處理。

mkdir sample1 sample2 sample3 control1 control2 control3
for samp in {sample1 sample2 sample3 control1 control2 control3}
  do
  mv "../rawdata/*"$samp"*_1.fq.gz" $samp 
  mv "../rawdata/*"$samp"*_2.fq.gz" $samp 
  done

二. 低質量數據過濾和質量評估QC -- Trimmomatic/FastQC

1. Trimmomatic

Trimmomatic: A flexible read trimming tool for Illumina NGS data

  • 因為公司給的數據里面,是沒有去掉接頭的,所以需要跑之前先把接頭去掉,過濾質量后再用。
    使用Trimmomatic(或者Trim Galore)切除數據中的接頭序列和低質量序列,專門清洗illumina測序數據的常用工具
    優點:
    1、可直接對.fq.gz壓縮文件操作
    2、結果默認生成在同文件的目錄下,不生成文件夾,直接生成四個*.fq.gz文件。若需要有文件夾,需要額外建立文件夾的指令。參數-o,為文件夾(文件)
    trim_result.png

    Trimmomatic的執行文件是一個Java文件
### 切除接頭序列
java -jar /home/Software/Trimmomatic-0.39/trimmomatic-0.39.jar  \
PE  \    #  rawdata為雙端測序
-phred33 \   #  Fastq文件的質量值格式
-threads 6 \   #  6 線程
-trimlog Trimmomatic.log \   # 日志文件保存位置
$read1 $read2 \     # *_1.fq.gz, *_2.fq.gz  需要過濾的Fastq文件
$trim_read1 \        # *_1.clean.fq.gz  過濾后的Fastq文件
output_unpaired_1.fq.gz \    #  read1的5‘->3'和read2的3‘->5'未能匹配上的Fastq文件
$trim_read2 \        
output_unpaired_2.fq.gz \
ILLUMINACLIP:/home/Software/Trimmomatic-0.39/adapters/TruSeq3-PE-2.fa:2:30:10:1:TRUE  \   # 去除illumina測序平臺下的TruSeq3接頭序列,不知道可以問測序公司。
# 2:30:10即表示,在比對接頭序列時允許有兩個位置的堿基發生錯配,雙端測序的兩條reads與接頭序列匹配率超過30%的話,就會被切除掉,單條reads如果與接頭序列的匹配率超過10%,也會被切除掉。
LEADING:0 \    # 切除reads 5’端質量值低于0的堿基, 即不對5’端剪切
TRAILING:25 \    # 切除reads 3’端質量值低于25的堿基
SLIDINGWINDOW:50:25 \  #以50bp為窗口進行滑窗統計,切除堿基平均質量低于25的窗口及之后的序列。
MINLEN:50 \   #去除過濾后長度低于50的reads
HEADCROP:0 \   # 切除reads開頭的0個堿基
2>trim.log 1>trim.err   # 0 表示stdin標準輸入;1 表示stdout標準輸出;2 表示stderr標準錯誤

使用參數

  • PE/SE
    rawdata為 Paired-End,還是 Single-End的reads,其輸入和輸出參數稍有不同。
  • -threads
    設置多線程運行數
  • -phred33
    設置堿基的質量格式,可選pred64
  • ILLUMINACLIP:TruSeq3-PE.fa:2:30:10
    切除adapter序列。參數后面分別接adapter序列的fasta文件:允許的最大mismatch數:palindrome模式下匹配堿基數閾值:simple模式下的匹配堿基數閾值。
  • LEADING:3
    切除首端堿基質量小于3的堿基
  • TRAILING:3
    切除尾端堿基質量小于3的堿基
  • SLIDINGWINDOW:4:15
    Perform a sliding window trimming。Windows的size是4個堿基,其平均堿基質量小于15,則切除。
  • MINLEN:50
    最小的reads長度
  • CROP:
    保留reads到指定的長度
  • HEADCROP:
    在reads的首端切除指定的長度
  • TOPHRED33
    將堿基質量轉換為pred33格式
  • TOPHRED64
    將堿基質量轉換為pred64格式

2.FastQC (測序數據質控)

  • FastQC 是高通量測序數據的高級質控工具,輸入FastQ,SAM,BAM文件,輸出對測序數據評估的網頁報告。
    一般在Trimmomatic之后,用FastQC軟件對預處理數據進行質量控制分析。
    優點:
    1、可直接對.fq.gz壓縮文件操作
    2、結果默認路徑生成在同文件的目錄下,生成的文件夾為XX_fastqc,里面有fastqc_data.txt , fastqc_report.html等重要文件
    fastqc $trim_read1 $trim_read2
    fqc.trim.png

    fqc_detail.trim.png

    3、可生成在指定的文件夾(應該說是路徑吧),需要額外建立文件夾,用-o參數,為文件夾(文件)
    fastqc -t 12 -o out_path sample1_1.fq sample1_2.fq
    使用說明
  • -t --threads:線程數
  • -o --outdir:輸出路徑
  • --extract:結果文件解壓縮
  • --noextract:結果文件壓縮
  • -f --format:輸入文件格式.支持bam,sam,fastq文件格式

結果解讀
我們對Trim過濾之后的序列進行質量評估,評估結果如下:
FastQC 會生成一個fastqc_report.html的結果報告,下面是軟件對質控結果進行判斷:綠色代表PASS;黃色代表WARN;紅色代表FAIL

image.png

簡單說一下報告中常見的幾張圖吧

  • 每個堿基位置的質量分數分布圖


    image.png

橫軸為read長度,縱軸為質量得分。說明trim后的Reads質量較高,可以用于后續分析。
一般要求所有位置的10%分位數大于20,即大于最多允許該位置10%的序列低于Q20。綠色區域說明數據質量較高。一般但隨著測序長度的加深,堿基的錯賠率會增加。

  • 平均質量分數分布圖


    image.png

橫軸表示Q值,縱軸表示每個值對應的read數目,當測序結果主要集中在高分中,證明測序質量良好

  • 每個堿基位置的堿基N百分比


    image.png

    N占比越低,數據質量越高

  • 序列的核酸組成偏好性


    image.png

    正常情況下,我們期望的是A=T=C=G,GC含量較高時,經常會出現A=T,C=G的情況。

  • 每條reads的GC占比


    image.png

GC含量-GC含量對應的read數。藍色為經驗分布給出的理論值,紅色是測序數據的真實值,但兩條線接近重合時,說明數據質量較高;當紅色出現雙峰可能是樣品被污染或不純。

  • 重復reads統計


    image.png

    橫軸表示重復的次數,縱軸表示重復的reads的數目

其他更多信息可以去官網自行查看。

三. Clean reads的基因組比對 Aligment -- STAR

針對每個樣本,利用 STAR軟件 將預處理序列與測序物種的參考基因組序列進行序列比對。

1. 比對原理

將QC后的reads比對到參考基因組上,一般分為有參考基因組比對和無參考基因組比對。我們常用的就是有參考基因組的比對。


aligment.png
  • 如果數據庫中存在該物種的物種基因組(fasta)及其基因組注釋文件(gff, gtf),那么,我們就可以用該基因組信息作為參考基因組進行clean reads序列比對,便可以知道基因組的哪些位置轉錄了RNA序列,通過對reads進行計數,而得到基因表達的定量數據。
  • 如果沒有可用的參考基因組及其注釋信息,則需要考慮無參考基因組的比對方法進行比對。首先先將reads 進行組裝拼接,得到從頭組裝的組裝轉錄本,然后再將clean reads比對到組裝轉錄本上得到比對結果。

在參考基因組比對的時候,會優先考慮大片段比對,如果比對不上,再考慮將片段切割成不同區段進行比對。

RNAseq 常用的比對工具有:Hisat2, STAR 等

2. STAR 比對

STAR 
--runThreadN 20 \      # 線程數
--genomeDir /home/database/ref \   # 參考基因組
--readFilesCommand gunzip -c \  # *.gz 文件解壓縮
--readFilesIn *_1.fq.gz *_2.fq.gz \  #輸入文件,空格隔開
--outSAMtype BAM SortedByCoordinate \  #  輸出bam文件(默認輸出sam文件)
--outFileNamePrefix Aligment \  # 輸出文件的位置和前綴

結果解讀

  • 比對結果:Aligned.out.sam或者Aligned.out.bam
  • 比對完以后的統計信息: Log.final.out
  • 剪切的信息:SJ.out.tab

BAM/SAM文件
bam是sam的壓縮格式,在內容上是一樣的,linux下可使用samtools, bamtools 進行查看與轉換。
bam文件分為2個部分,header和record.

  • header,以@開頭,包含:
    @HD 版本信息;
    @SQ 比對參考序列信息;
    @RG 測序平臺信息;
    @PG 序列比對使用的軟件信息
  • record為基因組比對信息,每一行信息為:
    reads ID
    比對到基因組上的信息
    比對到的染色體
    比對上的位置信息
    比對質量值
    堿基組成
    堿基質量值等


    bam.png

比對率統計


mapcount.png

總比對率和唯一比對率是我們關注的,尤其是總比對率。

  • 總比對率低,一般可分為2種情況,總比對率低于10% ,可能是弄錯了物種來源,比如鼠源細胞當成了人源的;總比對率低于60%,說明有外源基因組的污染,最常見的就是細胞培養的時候受到支原體污染。

比對區域分布統計


image.png

比對reads在每條染色體上的密度分布情況


image.png

可以通過IGV軟件可視化查看BAM文件信息
具體以后再詳細展開……

四. 比對結果的外顯子(基因)表達計數 FeatureCount -- featurecount

在高通量測序分析中用于下游分析的關鍵信息是比對到每個genomic feature(外顯子的表達量、featurecounts是一款使用于RNA-seq和DNA-seq的read summarization工具,應用了高效率的染色體哈希算法和feature區塊技術因等)中的read數目。
featurecounts 速度快,需要的內存空間少,同時可以用于單端和雙端的數據

通過STAR等軟件比對得到的BAM文件,利用計數軟件(如 featurecount, HTseq, stringtie),獲取各基因的 reads count。
假設前提:認為比對到基因的reads 數與該基因的表達量成正相關。


readscount.png

featurecount的調用方法

/home/Software/featureCounts \
-T 4 \    # 線程數目,1~32
-a $gtf \  # 參考gtf文件
-o read.count \   # 輸出文件的名字,輸出文件的內容為read 的統計數目
-p \     # 只能用在paired-end的情況中,會統計fragment而不統計read  (-p -B -C 同時使用、不使用)
-B \    # 在-p選擇的條件下,只有兩端read都比對上的fragment才會被統計
-C \    # 如果-C被設置,那融合的fragment就不會被計數,這個只有在-p被設置的條件下使用
-t exon \   # 設置feature-type,-t指定的必須是gtf中有的feature,同時read只有落到這些feature上才會被統計到,默認是“exon”
-g gene_name \  # 默認為gene_id,注意!選擇gtf中提供的id identifier!!!
-s 2  \   # 2條鏈比對
Align.sorted.bam   # 輸入的bam/sam文件,支持多個文件輸入

得到read.count數據之后,還需要進行進一步處理才能夠進行分析。

由于實驗中每個樣本的上樣量不同,或者基因的長度,測序深度不同等導致基因count本身就存在著較大差異,所以,我們是不能夠直接只用count 數據進行后續的基因表達差異分析的。因此我們需要對 count 數據進行標準化。

countToFpkm <- function(counts, effLen) {N <- sum(counts)
     exp( log(counts) + log(1e9) - log(effLen) - log(N) )}

轉錄本表達量計算采用FPKM計算度量指標(FPKM- Fragments Per Kilobase of transcript per Million fragments mapped)。FPKM含義是以每百萬比配成對序列每1Kbp長度做轉錄本表達量指標,其中轉錄本長度和總比配成對read數目用于歸一化表達量數值。用cuffnorm程序分別計算各個樣本FPKM表達量取log2。

genecount.png

五. 不同分組間的基因差異表達分析 DEGs -- limma

根據樣本的實驗設計,利用limma包對不同樣本組之間篩選差異表達的已知轉錄本。滿足pvalue <= 0.05和大于等于2倍差異表達范圍篩選兩組之間的差異轉錄本


image.png

差異基因可視化 -- 火山圖


volcano.png
wenn.png

針對組間篩選的不同差異基因集, 采用venn方法進行共同和特有的比較分析

heatmap.png

針對樣本組間篩選的差異表達基因, 采用對基因和樣本進行雙向層級聚類并且用熱圖顯示

六. 差異基因的功能富集分析 -- GO,KEGG

拿到差異基因之后,需要將這些基因從微觀映射到宏觀,從分子表達水平上升到功能分析,這樣也具有更好的解釋性。GO和KEGG就是基于不同的分類思想而儲存的基因相關功能的數據庫。

  • GO和KEGG是兩個數據庫,里面有每個基因相關的功能信息,而富集分析就是一個把這些功能進行進行整合計算的算法。
  • GO和KEGG富集的R包clusterProfiler

1. GO功能分析

GO功能分析是針對全基因/轉錄本和差異基因/轉錄本進行功能注釋和歸類。GO數據庫,全稱是Gene Ontology(基因本體),他們把基因的功能分成了三個部分分別是:細胞組分(cellular component, CC)、分子功能(molecular function, MF)、生物過程(biological process, BP)。利用GO數據庫,我們就可以得到我們的目標基因在CC, MF和BP三個層面上,主要和什么有關。

library(clusterProfiler)
ego<-enrichGO(gene=genelist,OrgDb="org.Hs.eg.db",minGSSize = 2,keyType = "ENTREZID",ont ="ALL",pvalueCutoff = 0.1, readable=TRUE)
write.table(ego@result,"GO_enrichment.xls",row.names=F,quote=F,sep="\t")

條形圖可以顯示,DEGs中的差異基因都顯著富集到了哪些通路上面。


GO.png

還可以更詳細地查看通路富集情況


GO-tree.png

2.KEGG富集通路分析

KEGG數據庫:除了對基因本身功能的注釋,我們也知道基因會參與人體的各個通路,基于人體通路而形成的數據庫就是通路相關的數據庫。而KEGG就是通路相關的數據庫的一種。其實通路數據庫有很多,類似于wikipathway,reactome都是相關的通路數據庫。只是因為KEGG比較被人熟知,所以基本上都做這個分析的.

library(clusterProfiler)
kk<-enrichKEGG(gene=genelist,organism='hsa',keyType="ncbi-geneid",pvalueCutoff = 0.05,pAdjustMethod = "BH",  minGSSize = 2, maxGSSize = 500,qvalueCutoff = 0.2, use_internal_data = FALSE)
res_pathview<-kk@result
kk<-setReadable(kk,OrgDb="org.Hs.eg.db",keyType="ENTREZID") ###mapping gene id to gene symbol
res<-kk@result
colnames(res)[1]<-"pathwayID"
write.table(res,"KEGG_enrichment.xls",quote=F,row.names=F,sep="\t")

富集通路的條形圖,可以顯示差異基因富集到的通路有哪些。


keggpathway.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

推薦閱讀更多精彩內容