RNAseq005 轉錄組入門(5):序列比對

1 比對的目的

  • 1.1 差異表達基因
    只需要確定不同的read計數,可以用bowtie, bwa這類比對工具,或者是salmon這類align-free工具,并且后者的速度更快。
  • 1.2 尋找新剪切位點
    但是如果需要找新的isoform,或RNA的可變剪切,看外顯子使用差異的話,需要TopHat, HISAT2或者是STAR這類工具用于找到剪切位點。

2 RNA-Seq數據比對和DNA-Seq數據比對有什么差異

RNA-Seq不同于DNA-Seq,DNA在轉錄成mRNA的時候會把內含子部分去掉,所以mRNA反轉的cDNA如果比對不到參考序列,會被分開,重新比對一次,判斷中間是否有內含子。

3 工具抉擇

在2016年的一篇綜述A survey of best practices for RNA-seq data analysis,提到目前有三種RNA數據分析的策略。那個時候的工具也主要用的是TopHat,STAR和Bowtie.其中TopHat目前已經被它的作者推薦改用HISAT進行替代。
最近的Nature Communication發表了一篇題為的Gaining comprehensive biological insight into the transcriptome by performing a broad-spectrum RNA-seq analysis的文章—被稱之為史上最全RNA-Seq數據分析流程,文章中在基于參考基因組的轉錄本分析中所用的工具,是TopHat,HISAT2和STAR,結論就是HISAT2找到junction正確率最高,但是在總數上卻比TopHat和STAR少。從這里可以看出HISAT2的二類錯誤(納偽)比較少,但是一類錯誤(棄真)就高起來。
就唯一比對而言,STAR是三者最佳的,主要是因為它不會像TopHat和HISAT2一樣在PE比對不上的情況還強行把SE也比對到基因組上。而且在處理較長的read和較短read的不同情況,STAR的穩定性也是最佳的。
就速度而言,HISAT2比STAR和TopHat2平均快上2.5~100倍。

3 index下載

3.1 hisat2主頁下載

http://daehwankimlab.github.io/hisat2/

image.png

http://daehwankimlab.github.io/hisat2/download/

image.png

3.2 http://ccb.jhu.edu/software.shtml

http://ccb.jhu.edu/software/hisat2/manual.shtml
ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/

image.png

cd referece && mkdir index && cd index
# hg19 index
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/hg19.tar.gz
# hg38 index
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/hg38.tar.gz

將上述鏈接復制放入迅雷,十分鐘搞定下載

4.比對alignment

4.1 說明書:https://daehwankimlab.github.io/hisat2/manual/
4.2 用法

hisat2 [options]* -x <hisat2-idx> {-1 <m1> -2 <m2> | -U <r> | –sra-acc <SRA accession number>} [-S <hit>]

  • 主要參數:
    -x <hisat2-idx>: 參考基因組索引文件的前綴
    如下圖,hisat2 hg19index解壓后如下,-x參數只需要index的前綴,也就是genome,所以直接在路徑后加入genome即可,如果直接使用路徑,或者使用正則表達式genome.*,或是cat合并成一個genome都是不可取的
    hisat2 hg19index

-1 <m1>: 雙端測序結果的第一個文件。若有多組數據,使用逗號將文件分隔。Reads的長度可以不一致。
-2 <m2>: 雙端測序結果的第二個文件。若有多組數據,使用逗號將文件分隔,并且文件順序要和-1參數對應。Reads的長度可以不一致。
-U <r>: 單端數據文件。若有多組數據,使用逗號將文件分隔。可以和-1、-2參數同時使用。Reads的長度可以不一致。
–sra-acc <SRA accession number>: 輸入SRA登錄號,比如SRR353653,SRR353654。多組數據之間使用逗號分隔。HISAT將自動下載并識別數據類型,進行比對。
-S <hit> : 指定輸出的SAM文件。

  • 輸入選項:
    -q:輸入文件為FASTQ格式。FASTQ格式為默認參數。
    -qseq:輸入文件為QSEQ格式。
    -f:輸入文件為FASTA格式。
    -r:輸入文件中,每一行代表一條序列,沒有序列名和測序質量等。選擇此項時,–ignore-quals參數也會被選擇。
    -c:此參數后是直接比對的序列,而不是包含序列的文件名。序列間用逗號隔開。選擇此項時,–ignore-quals參數也會被選擇。
    -s/–skip <int>:跳過輸入文件中前條序列進行比對。
    -u/–qupto <int>:只使用輸入文件中前條序列進行比對,默認是沒有限制。
    -5/–trim5 <int>:比對前去除每條序列5’端個堿基
    -3/–trim3 <int>:比對前去除每條序列3’端個堿基
    –phred33:輸入的FASTQ文件堿基質量值編碼標準為phred33,phred33為默認參數。

文章中提到:Samples 9-15 are mRNA-seq to determine effect of AKAP95 knockdown in human 293 cells (9-11) or mouse ES cells (12-15).

# -t參數可以顯示時間
# -x參數指定index位置:/mnt/e/bioinfo/reference/gtf/hisat2_index/hg19/,需要在路徑后添加index的前綴genome,否則會報錯
# -1,-2(雙向測序)參數指定數據存放位置:/mnt/e/bioinfo/rna_seq/ENA_data/
# -S指定輸出sam的路徑,僅有三個是人基因組數據
for i in {56..58};do hisat2 -t -x /mnt/e/bioinfo/reference/gtf/hisat2_index/hg19/genome  -1 /mnt/e/bioinfo/rna_seq/ENA_data/SRR35899${i}_1.fastq.gz  -2  /mnt/e/bioinfo/rna_seq/ENA_data/SRR35899${i}_2.fastq.gz   -S  /mnt/e/bioinfo/rna_seq/rna_seq/aligned/SRR35899$i.sam;done

我的筆記本是8G內存,差不多是半小時跑完一個數據,以下為比對運行結果


image.png

Hisat2 bowtie2比對結果解讀(Hisat2 Alignment summary)

  • 第一部分描述的是pair-end模式下的一致比對結果
    1820962 (6.31%) aligned concordantly 0 times 是什么意思?aligned concordantly就是read1和read2同時合理的比對到了基因組/轉錄組上。
    24723672 (85.68%) aligned concordantly exactly 1 time,exactly 1 time 就是只有一種比對結果。>1 times 就是read1和read2可以同時比對到多個地方。
  • 第二部分,pair-end模式下不一致的比對結果
    1820962 pairs aligned concordantly 0 times; of these: 90371 (4.96%) aligned discordantly 1 time,concordantly 0 times就是read1和read2不能同時合理的同時比對到基因組/轉錄組上
    aligned discordantly 1 time 最難理解,discordantly比對就是read1和read2都能比對上,但是不合理,
    1.比對方向不對,pair-end測序的方向是固定的;
    2.read1和read2的插入片段長度是有限的
  • 第三部分就是對剩余reads(既不能concordantly,也不能discordantly 1 time)的單端模式的比對,沒什么好說的。

5 SAMtools

Samtools是一個用于操作sam和bam格式文件的應用程序集合,具有眾多的功能。 它從SAM(序列比對/映射)格式導入和導出,進行排序,合并和索引,并允許快速檢索任何區域中的讀數。SAM和BAM格式的比對文件主要由bwa、bowtie2、tophat和hisat2等序列比對工具產生,用于記錄測序reads在參考基因組上的映射信息。其中,BAM格式文件是SAM文件的 的二進制格式,占據內存較小且運算速度更快。

5.1 語法
Program: samtools (Tools for alignments in the SAM format)
Version: 1.10 (using htslib 1.10)
Usage:   samtools <command> [options]
Commands:
  -- Indexing 索引
     dict           創建一個序列字典文件
     faidx          建立Fasta索引文件,以.fai后綴結尾
     fqidx          建立Fastq索引文件
     index          建立sam索引文件,需對bam文件進行排序后才能構建索引
  -- Editing 編輯
     calmd          重新計算MD/NM標簽和'='基數
     fixmate        為以名稱排序定位的alignment填入配對坐標
     reheader       替換BAM頭注釋
     targetcut      切割fosmid區域(僅適用于fosmid池)
     addreplacerg   添加或替換RG標簽
     markdup        重復標記
  -- File operations 文件操作
     collate        根據read name信息將bam文件進行隨機打散和分組
     cat            將多個bam文件合并為一個bam文件,無需對sam文件進行排序
     merge          將多個已經sort的bam文件進行合并
     mpileup        對參考基因組每個位點做堿基堆積,用于call SNP和INDEL。主要是生成BCF、VCF文件或者pileup一個或多個bam文件
     sort           對比對后的bam文件進行排序,默認按堿基位置坐標進行排序
     split          按讀取組分割文件
     quickcheck     快速檢查SAM/BAM/CRAM是否完整
     fastq          將BAM轉換為FASTQ
     fasta          將BAM轉換為FASTA
  -- Statistics 統計
     bedcov         統計給定region區間內reads的深度,每個堿基的深度疊加在一起
     coverage       統計每個堿基位點的測序深度及百分比
     depth          統計每個堿基位點的測序深度,注意計算前必須對bam文件排序并構建索引
     flagstat       統計bam文件中read的比對情況
     idxstats       統計bam索引文件里的比對信息
     phase          雜合子項
     stats          對bam文件做詳細統計, 統計結果可用mics/plot-bamstats作圖
  -- Viewing 查看
     flags          查看不同flag值的含義
     tview          直觀地顯示reads比對到參考基因組的情況,類似于基因組瀏覽器
     view           SAM<->BAM<->CRAM轉換
     depad          將填充的BAM轉換為未填充的BAM
5.2 Samtools常用命令

最常用的三板斧就是格式轉換,排序,索引

  • 轉換:samtools view -S SRR3589912.sam -b > SRR3589912.bam(-S是最新版的samtools為了兼容以前的版本寫的)
  • 排序:samtools sort SRR3589912.bam -o SRR3589912_sorted.bam
  • 索引:samtools index SRR3589912_sorted.bam
    比對后的sam文件應該先進行格式轉換,接著是排序,最后根據排序的文件建立索引文件
5.2.1 格式轉換 samtools view
5.2.1.1 用法
Usage: samtools view [options] <in.bam>|<in.sam>|<in.cram> [region ...]

Options:
  -b             輸出BAM
  -C             輸出CRAM (requires -T)
  -1             使用快速BAM壓縮(implies -b)
  -u             未壓縮的BAM輸出(implies -b)
  -h             在SAM輸出中包括頭注釋
  -H             僅打印SAM標頭(無比對信息)
  -c             僅打印匹配記錄的數量
  -o FILE        輸出文件名[stdout]
  -U FILE        輸出未過濾的reads到文件 [null]
  -t FILE        列出參考序列的名稱和長度[null]
  -X             包含通用的索引文件
  -L FILE        僅包括與該BED FILE重疊的Reads [null]
  -r STR         僅包含在STR組中的Reads [null]
  -R FILE        僅包含FILE [null]中列出的讀取組的Reads
  -d STR:STR     僅包含帶有標簽STR和關聯值STR的Reads [null]
  -D STR:FILE    僅包含帶有標簽STR以及FILE [null]中列出的相關值的Reads
  -q INT         僅包含映射質量> = INT [0]的Reads
  -l STR         僅包括對庫STR的Reads[null]
  -m INT         僅包含消耗CIGAR操作數的Reads
  -f INT         僅包括存在INT中所有FLAG的Read[0]
  -F INT         僅包括在INT中不存在任何FLAGS的Read[0] [0]
  -G INT         僅排除當前FLAGs為INT的Read [0]
  -s FLOAT       子樣本讀?。ńo定INT.FRAC選項值,0。FRAC是要保留的模板/讀取對的分數; INT部分設置種子)
  -M             使用多區域迭代器(提高速度,刪除重復項并按文件中的順序輸出讀取結果)
  -x STR         讀取標記以剝離[null]
  -B             折疊CIGAR操作
  -?             幫助,包括有關區域規范的注釋
  -S             忽略(自動檢測輸入格式)
  --no-PG  do not add a PG line
      --input-fmt-option OPT[=VAL]                      以OPTION或OPTION = VALUE的形式指定一個輸入文件格式選項
  -O, --output-fmt FORMAT[,OPT[=VAL]]...                指定輸出格式(SAM,BAM,CRAM)
      --output-fmt-option OPT[=VAL]                     以OPTION或OPTION = VALUE的形式指定單個輸出文件格式
  -T, --reference FILE                參考序列FASTA FILE 
  -@, --threads INT                   要使用的其他線程數[0]
      --write-index                   自動索引輸出文件[關閉]
      --verbosity INT                 設置詳細程度
5.2.1.2 samtools的view不僅可以進行格式轉換,還可以進行數據的提取
# 提取1號染色體上1234~123456區域的以對read
samtools view SRR3589957_sorted.bam chr1:1234-123456 | head
5.2.1.3 SAM文件中FLAG值的理解

FLAG列在SAM文件的第二列,這是一個很重要的列,包含了很多mapping過程中的有用信息


image.png
  • SAM文件的flag標簽包含0x4
### 小寫的f是提取,大寫的F是過濾
samtools view -f4 sample.bam sample.unmapped.sam
  • 對于PE數據,在未比對成功的測序數據可以分成3類:

僅reads1沒有比對成功,該提取條件包括:
該read是read1,對應于二進制FLAG的第7位,該位取1,其十進制值為64;
該read未成功比對到參考基因組,對應于二進制FLAG的第3位,該位取1,其十進制值為4;
另一配對read成功比對到參考基因組,對應于二進制FLAG的第4位,該位取0,其十進制值為8;

 # 對于取1的位點采用提取的策略,用-f參數,值設為64+4=68
 # 對于取0的位點采取過濾的策略,用-F參數,值設為8
 samtools view -u -f 68 -F 8 alignments.bam >read1_unmap.bam

僅reads2沒有比對成功,該提取條件包括:
該read是read2,對應于二進制FLAG的第8位,該位取1,其十進制值為128;
該read未成功比對到參考基因組,對應于二進制FLAG的第3位,該位取1,其十進制值為4;
另一配對read成功比對到參考基因組,對應于二進制FLAG的第4位,該位取0,其十進制值為8;

# 對于取1的位點采用提取的策略,用-f參數,值設為128+4=132
# 對于取0的位點采取過濾的策略,用-F參數,值設為8
samtools view -u -f 132 -F 8 alignments.bam >read2_unmap.bam

兩端reads都沒有比對成功,該提取條件包括:
該read未成功比對到參考基因組,對應于二進制FLAG的第3位,該位取1,其十進制值為4;
另一配對read未成功比對到參考基因組,對應于二進制FLAG的第4位,該位取1,其十進制值為8;

# 對于取1的位點采用提取的策略,用-f參數,值設為4+8=12
$ samtools view -u -f 12 alignments.bam >pairs_unmap.bam
5.2.2 排序 samtools sort
Usage: samtools sort [options...] [in.bam]
Options:
  -l INT     設置輸出文件壓縮等級。0-9,0是不壓縮,9是壓縮等級最高。不設置此參數時,使用默認壓縮等級
  -m INT     設置每個線程運行時的內存大小,可以使用K,M和G表示內存大小
  -n         設置按照read名稱進行排序
  -t TAG     Sort by value of TAG. Uses position as secondary index (or read name if -n is set)
  -o FILE    設置最終排序后的輸出文件名
  -T PREFIX  設置臨時文件的前綴 PREFIX.nnnn.bam
  --no-PG不添加PG行
      --input-fmt-option OPT [= VAL]                      以OPTION或OPTION = VALUE的形式指定一個輸入文件格式選項
  -O,--output-fmt FORMAT [,OPT [= VAL]] ...             指定輸出格式(SAM,BAM,CRAM)
      --output-fmt-option OPT [= VAL]                     以OPTION或OPTION = VALUE的形式指定單個輸出文件格式選項
      --reference FILE                                    參考序列FASTA FILE [null]
  -@, --threads INT               設置排序和壓縮是的線程數量,默認是單線程
      --verbosity INT               Set level of verbosity

對bam文件進行排序,不能對sam文件進行排序。以leftmost coordinates的方式對比對結果進行排序,或者使用-n參數以read名稱進行排序。將會添加適當的@HD-SO排序順序標頭標簽或者如果有必要的話,將會更新現存的一個排序順序標頭標簽。sort命令的輸出默認是標準輸出寫入,或者使用-o參數時,指定bam文件輸出名。sort命令還會在內存不足時創建臨時文件tmpprefix.%d.bam。

samtools的排序方式有兩種(常用)

# 默認方式,按照染色體的位置進行排序
 for i in {56..58};do samtools sort SRR35899${i}.bam -o SRR35899${i}_sorted.bam;done
# 參數-n則是根據read名進行排序。
 for i in {56..58};do samtools sort -n SRR35899${i}.bam -o SRR35899${i}_nsorted.bam;done
image.png
  • bam文件是Sam 文件的二進制壓縮格式,保留了與sam 完成相同的內容信息。SAM/BAM 文件可以是未排序的,但是按照坐標(coodinate)排序可以線性的監控數據處理過程。samtools可以用來轉化bam/sam文件,可以merg,sort aligment,可以去除duplicate,可以call snp及indels.
  • BAM 文件是壓縮的二進制文件,對文件內容排序之后相似的內容排在一起,使得文件壓縮比提高了,因此排序之后的 BAM 文件變小了,相對應的 SAM 文件就是純文本文件,對 SAM 文件進行排序就不會改變文件大小。而且由于 RNA-seq 中由于基因表達量的關系,RNA-seq 的數據比對結果 BAM 文件使用 samtools 進行 sort 之后文件壓縮比例變化會比 DNA-seq 更甚。
5.2.3 索引 samtools index
Usage: samtools index [-bc] [-m INT] <in.bam> [out.index]
Options:
  -b       創建bai索引文件,未指定輸出格式時,此參數為默認參數
  -c       創建csi索引文件,默認情況下,索引的最小間隔值為2^14,與bai格式一致
  -m INT   創建csi索引文件,最小間隔值2^INT
  -@ INT   設置線程數[無]

為了能夠快速訪問bam文件,可以為已經基于坐標排序后bam或者cram的文件創建索引,生成以.bai或者.crai為后綴的索引文件。,必須使用排序后的文件。另外,不能對sam文件使用此命令。如果想對sam文件建立索引,那么可以使用tabix命令創建。在使用與region參數相關的其它samtools命令時,需要創建索引

# -i 參數直接用 {}就能代替管道之前的標準輸出的內容
ls *sorted.bam | xargs -i samtools index {}
# 或是ls *.bam | xargs -n1  samtools index

xargs命令可參考:http://www.lxweimin.com/writer#/notebooks/45449543/notes/76201605/preview

image.png

報錯:默認排序可以建立index,但是按reads名排序(sort -n)無法建立index

Reference

http://www.lxweimin.com/p/681e02e7f9af
http://www.lxweimin.com/p/68f6e35fa4a2
https://ming-lian.github.io/2019/02/07/Advanced-knowledge-of-SAM/

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