ShortRead 支援 FASTQ 檔案操作和序列品質控管 (圖:Morgan. (2013) An Introduction to ShortRead) |
>if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("ShortRead")
FASTQ 格式簡介
FASTQ 格式以四列字串記錄每一條核酸的辨識碼、序列及定序品質。
>@A77AV140207:1:1101:10732:16139/1 \\ sequence identifier
AACGTAGGTCACAAGCGTTGTCCGGAATTACTG \\ raw sequence letters
+ \\ optional description
?ABBBFFBF5B4BBG4AEEGGB5BEE1=1<E@1 \\ quality code
- sequence identifier:首列以
@
起頭,藉此區分每條核酸的紀錄。這一列通常會記錄序列的標識碼、定序儀器代碼、核酸在定序晶片的位置、barcode等資訊,不同定序平台有不同的格式。值得留意的是,在雙端定序的結果中,順向序列會在首列的最後標註1
,逆向序列則會標註2
。
- raw sequence letters:次列則核酸各位置的鹼基種類,即 A、T、C、G、N(N 表示不明),所以此列長度等同定序讀長。
- optional description:
+
號列,無含義。(雖然維基百科介紹說,這列可添加額外資訊,但目前還沒看過這樣標示的當案)
- quality code:與第二列一一對應,反映定序品質的ASCII字符。
序列的定序品質可以用 error probability(定序儀器誤判鹼基種類的機率)評估,error probability 愈低則定序的品質越高,即兩者呈負相關。
為了便於理解和檢視,error probability 需經數值轉換和 ASCII 編碼,才會成為 FASTQ 檔內的 quality code,所以 FASTQ 格式的第四列才會存在各種符號。
簡言之,error probability (P) 會先轉變為整數形式且與品質正相關的 quality value (Q)。雖然曾出現許多種轉換方式,但目前最通用方式為 phred quality score,即
平台間的編碼方式與 quality value 範圍各不相同(圖:https://en.wikipedia.org/wiki/FASTQ_format) |
> error probability (float)
→ quality value (int)
→ quality code (character)
讀取 fastq 檔案
使用 readFastq
即可讀取 FASTQ 並存為 ShortRead 物件。
>> library(ShortRead)
> rfq <- readFastq("./data/G64589_R1_001.fastq")
> rfq
class: ShortReadQ
length: 13510 reads; width: 175 cycles \\ length 是序列數,width 是序列長
也可以借助檔名的共同模式,一次讀取多個 FASTQ 檔。然而,這項操作會合併所有檔案的序列,所以無法追溯各自源於哪個檔案。
>> rfqs <- readFastq("./data/", pattern = "_001.fastq")
> rfqs
class: ShortReadQ
length: 51508 reads; width: 175 cycles
檢視序列的標識碼、鹼基種類與品質分數
ShortReadQ 物件包含 @id
、 @sread
和 @qulity
,分別對應 FASTQ 格式的ID、sequence letters 與 quality code。
瀏覽標識碼
>> rfq@id[1:2] \\ or id(rfq)[1:2]
BStringSet object of length 2:
width seq
[1] 32 A77AV140207:1:1101:10732:16139/1
[2] 32 A77AV140207:1:1101:10743:16162/1
id(rfq)
這寫法有時會和其他套件的 function 衝突,這時要改寫為 ShortRead::id(rfq)
才能順利運作。瀏覽序列
> rfq@sread[1:2] \\ or sread(rfq)[1:2]
DNAStringSet object of length 2:
width seq
[1] 175 AACGTAG...GATAC
[2] 175 AACGTAG...ATATG
瀏覽品質分數
> rfq@quality[1:2] \\ or quality(rfq)[1:2]
class: FastqQuality
quality:
BStringSet object of length 2:
width seq
[1] 175 ?ABBBFF...#####
[2] 175 AAAAACF...#####
查閱每個 ASCII 記號對應的品質分數
> encoding(quality(rfq))[1:15]
! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
取得定序品質指標
將 FastQuality class 的物件轉換為 quality value matrix。其中,row 為序列, column 則是序列上各鹼基的位置,每一元素都記錄了序列各鹼基的 quality value。
># transform FastqQuality class into matrix
> rfq_to_matrix <- function (rfq) {
return(as(quality(rfq), "matrix"))
}
> Qval <- rfq_to_matrix(rfq)
> Qval[1:5, 1:5]
[,1] [,2] [,3] [,4] [,5]
[1,] 30 32 33 33 33
[2,] 32 32 32 32 32
[3,] 32 32 32 32 32
[4,] 32 32 33 33 33
[5,] 34 34 34 34 34
由於 quality value matrix 不含序列 ID,所以要手動添加
>row.names(Qval) <- as.character(rfq@id)
延伸計算
Quality value,依照 Phred score 關係式回推 error probability。
># Transform phred score into error probability
errProb <- 10^-(Qval/10)
接著加總各列的定序錯誤率,可獲得各序列的 expected errors(錯誤鹼基數量期望值)。
># Calculate expected errors for each read
ee <- rowSums(errProb)
最後使用內建的資料選取方式,移除低品質序列。
># Discard read with expected errors above 5
> ee[ee <= 5]
小結
># 讀取 FASTQ 為 ShortRead 物件
rfq <- readFastq(path)
# 轉換 ShortRead 物件為 quality value matrix
Qval <- as(quality(rfq), "matrix")
# 轉換 Phred score 為 error probability
errProb <- 10^-(Qval/10)
# 計算 expected errors
ee <- rowSums(errProb)
沒有留言:
張貼留言