1. 程式人生 > >質量值體系 Phred33 和 Phred 64 的由來 及其在質量控制中的實際影響

質量值體系 Phred33 和 Phred 64 的由來 及其在質量控制中的實際影響

最近在學習質控知識時, 對於質量值體系及轉換產生了一些疑問, 作了一些嘗試, 趁叢集故障, 在此總結一下

質量值體系

相比之前培訓時所學的質控內容, (我拿到的) 流程中還多了一步 phred33to64, 也就是把 .fastq 格式的資料從 Phred33 質量值體系轉換為 Phred64 質量體系, 於是先補充學習了下質量值體系:

首先要從質量值說起, 測序儀器下機資料的 fastq 檔案中, 每條序列都對應了相同長度的質量值, 反映出每個鹼基的準確性和可靠性, (現在主流用的) 計算公式為:

Q = -10log10p

而這個 p 值就是 Phred 計算出來的, 表示一個鹼基被識別錯誤的可能性, Phred 一開始是一個軟體 (或者說計算方法), 對測序儀器識別到的熒光強度 (三代的不瞭解) 進行評估, 針對不同儀器有不同的標準表, 然後根據表中熒光強度的範圍和解析度分析得出鹼基的 p 值, 由於比較可靠, 逐漸被各大公司採納 (以上腦補翻譯自 

Phred quality score 和 Phred base calling)

反正, Q 值為 10 就表示這個鹼基有 90% 的概率是正確的, 20 就是 99%, 40 就是 4 個 9, 很好記, 相信大家也都很熟悉

但是這時候問題就來了, 因為一個鹼基對應一個質量值, 可 Q 值可以是一位數也可以是兩位數, 連在一起的話就分不出哪個對應哪個鹼基 (比如某兩個鹼基的質量值序列為 123 , 則可能為 1|23 或 12 | 3, 當然這是個極端的例子), 此外也浪費儲存空間, 因為一個數字只有 10 種可能性, 卻要佔去一個字元位, 而一個位元組有 8 位, 理論上已經可以代表 256 種狀態, 這還沒換算一個字元要佔多少位元組, 因此就會把鹼基質量值轉換為相應的 ASCII 碼, 這是計算機中最基本的一套字元體系, 用來把常用符號 (共 127 個) 轉為二進位制以便於機器使用, ASCII 碼錶見 

ASCII code chart, 這樣一個字元就可以搞定了, 很方便很省事

但是這時候問題又來了, 最理想的情況當然是直接把質量值作為序號找出對應的那個 ASCII 碼, 比如質量值為 40 就換成十進位制 40 對應的 ASCII 碼,可惜質量值根據測序儀公司的標準不同, 範圍也各不相同, 基本都包括了 0 至 40 的區間, 甚至還可能是負值, 這就沒法愉快地玩耍了, 而且人家 ASCII 碼錶也不配合, 0 到 31 對應的都是些控制字元 (比如回車, 退格), 根本不適合列印和儲存, 可列印的都得從 32 號排起 (參見 ASCII printable code chart), 所以各家測序儀器公司就把質量值再加上某個固定值作為 ASCII 碼轉換成了可列印字元從而儲存在 FASTQ 檔案中

可是問題還沒有完, 這個固定值是多少好呢, 各家公司是競爭對手, 怎麼可能你用什麼我也用什麼, 所以 Sanger 公司加了 33, 也就是質量值為 0 就轉換成 ASCII 碼 33, 查表可知為 !, 也即從可列印的字元開始 (排除了空格), 這就是現在所謂的 Phred33 體系, 當時的 Solexa (後來被 Illumina 收購) 公司就偏不用 33 (此處為個人腦補), 偏要加個 64, 這樣質量值為 0 就用 @ 表示, 後面從 1 開始的就依次對應了 ABCD, 於是就成了 Phred64 體系, 至於當時三巨頭的另一家測序儀公司 454 Life Sciences (後被 Roche 收購) 就更絕, 人家從鹼基開始就不用 ACTG 表示, 直接整了個 ColorSpace 體系出來, 根本不和你們玩, (話說 Color Space 這玩意兒曾經把我狠狠地坑了好久), 當然後來大家也不跟 454 玩了, 最後他也就沒得玩了

回到質量值體系, 這樣就由 Sanger 公司和 Illumina 公司產生了 Phred33 體系和 Phred64 體系, 兩家互相拗著, 這就辛苦了寫生物資訊分析軟體的人, 兩種質量體系都要考慮, 當然好一點的軟體都是有引數接受體系型別的, 更好一點的軟體就會自動判斷體系型別進行對應轉換

本來就這樣結束的話也算是個圓滿的故事了, 可是墨菲他老人家不高興了 (Murphy's law), 所以在 2011 年, Illumina 公司表示他們又要改成 Phred33 體系了 (Upcoming changes in CASAVA), 真是大(wo)快(le)人(ge)心(qu)啊! 這麼來回一折騰, 結果還是回到了最初的起點, 與老基友相擁而泣了, Phred33 一統江湖! (當然實際上現在 Ilumina 的 Phred33 和最初 Sanger 的 Phred33 還是有點區別的, 詳見後文)

扯了這麼多, 發現寫了半天才剛交代完故事背景, 剩下的部分就等有空再寫了, 最後上點乾貨:

先是 wikipedia 上非常直觀的示例, 可以看出各家公司各個版本的質量值體系

  SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.....................................................
  ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
  ...............................IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII......................
  .................................JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ......................
  LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................................................
  !"#$%&'()*+,-./0123456789:;<=>[email protected][\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  |                         |    |        |                              |                     |
 33                        59   64       73                            104                   126
  0........................26...31.......40                                
                           -5....0........9.............................40 
                                 0........9.............................40 
                                    3.....9.............................40 
  0.2......................26...31........41                              

 S - Sanger        Phred+33,  raw reads typically (0, 40)
 X - Solexa        Solexa+64, raw reads typically (-5, 40)
 I - Illumina 1.3+ Phred+64,  raw reads typically (0, 40)
 J - Illumina 1.5+ Phred+64,  raw reads typically (3, 40)
     with 0=unused, 1=unused, 2=Read Segment Quality Control Indicator (bold) 
     (Note: See discussion above).
 L - Illumina 1.8+ Phred+33,  raw reads typically (0, 41)

然後光看也沒什麼用啊, 就有人寫了個小函式, 用來分析 fastq 檔案 (壓縮或未壓縮均可), 程式碼如下:

fqtype () {
        less $1 | head -n 999 | awk '{if(NR%4==0) printf("%s",$0);}' \
        | od -A n -t u1 -v \
        | awk 'BEGIN{min=100;max=0;}\
        {for(i=1;i<=NF;i++) {if($i>max) max=$i; if($i<min) min=$i;}}END\
        {if(max<=74 && min<59) print "Phred+33"; \
        else if(max>73 && min>=64) print "Phred+64"; \
        else if(min>=59 && min<64 && max>73) print "Solexa+64"; \
        else print "Unknown score encoding"; \
        print "( " min ", " max, ")";}'
}

寫在 shell 配置檔案裡, source 然後 fqtype <fastq_file> 就行了, 這個程式碼有點老, 還沒加 [35, 75] 的判斷, 我又懶得重新改判斷邏輯, 所以直接在最後加了個列印最小值最大值, 再跟上面的示例一比, 就基本確定是什麼體系了

關於這兩種體系對我們實際流程的影響和分析, 請聽下回分解

轉自:http://not.farbox.com/post/phred_p1

感覺寫的很好理解,特此謝謝。

相關推薦

量值體系 Phred33 Phred 64由來 及其質量控制實際影響

最近在學習質控知識時, 對於質量值體系及轉換產生了一些疑問, 作了一些嘗試, 趁叢集故障, 在此總結一下 質量值體系 相比之前培訓時所學的質控內容, (我拿到的) 流程中還多了一步 phred33to64, 也就是把 .fastq 格式的資料從 Phred33 質量

Oracle體系結構用戶管理

oracle 體系結構 用戶管理 數據庫體系結構 定義: 數據庫的組成,工作過程,數據庫中的數據的組成與管理機制。 組成: 實例、用戶進程、服務器進程、數據庫文件、

Spring MVC體系結構處理請求控制器

基於 耦合 handle 邏輯 圖解 運用 ann 處理方式 設計   MVC設計模式在各種成熟框架中都得到了良好的運用,它將View,Controller,Model三層清晰地劃分開,搭建一個松耦合,高重用性,高可適用性的完美架構。   Spring MVC框架是經典的M

Spring MVC 體系結構處理請求控制器

運行 替換 處理流 -c 視圖渲染 mapping exec 環境搭建 有一個 1.Spring框架簡介   Spring MVC框架是有一個MVC框架,通過實現Model-View-Controller模式來很好地將數據、業務與展現進行分離。在Spring MVC 框架中

第一章 概論 計算機網絡筆記 學堂在線 1.4 網絡體系結構協議

計算機 適合 下層 幀格式 會話 運行 規範 應用 tcp 1 分層對每一層進行定義:   下一層為本層提供的服務   本層為上一層提供的服務   本層需要完成的功能 對相鄰層之間接口進行定義:   n層通過接口發出服務請求,n-1 層通過接口提供服務響應。   只要n層與

hadoop學習筆記(三):hdfs體系結構讀寫流程(轉)

sim 百萬 服務器 發表 繼續 什麽 lose 基於 一次 原文:https://www.cnblogs.com/codeOfLife/p/5375120.html 目錄 HDFS 是做什麽的 HDFS 從何而來 為什麽選擇 HDFS 存儲數據 HDFS

java的類加載器體系結構雙親委派機制

答案 類加載器 父類 編譯 自己 體系 文件加載 ext 類名 類加載器將字節碼文件加載到內存中,同時在方法區中生成對應的java.land.class對象 作為外部訪問方法區的入口。 類加載器的層次結構:            引導類加載器《-------------擴

類加載器體系架構工作原理

每一個 工作原理 自定義 jar cat 嘗試 定義類 ava 類名 類加載器有三種分別是:啟動類加載器(Bootstrap ClassLoader):是java虛擬機jvm識別,java程序無法直接使用;擴展類加載器(Extension ClassLoader):開發者可

MySQL體系結構存儲引擎概述

管理軟件 文件 提高 數據存儲 系統 數據庫實例 sel 技術 bubuko 一、定義數據庫和實例 數據庫: 物理操作系統文件或其他形式文件類型的集合。數據庫文件可以是frm、MYD、ibd 結尾的文件。 從概念上來說,數據庫是文件的集合,是依照某種數據模型組織起來並

淺析理解Oracle數據庫體系結構存儲結構

控制文件 打開 提高 相互 col 刪除 undo 建議 行數 一、Oracle體系結構 個人比喻幫助理解:類似於圖書館,去圖書館的客戶(用戶進程和服務進程等)需要調取資料,求助於圖書管理員(實例)進入圖書分區(數據庫)進行資料查找。【如果比喻不當,歡迎指正,盡請諒解】

HDFS的體系結構操作

HDFS fs 常用命令 1.對hdfs操作的命令格式是hadoop fs   1.1 -ls 表示對hdfs下一級目錄的檢視 hadoop fs -ls hdfs://chaoren:9000/ ----對HDFS的根目錄進行檢視(Linux下:ls /)  

MyBatis的體系結構配置檔案詳解

一、SqlSessionFactory MyBatis 的應用都是以一個 SqlSessionFactory 的例項為中心的,它是單個數據庫對映關係經過編譯後的記憶體映象;SqlSessionFactory 的例項可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSes

NGS【1.1.2】測序量值(Q20 & Q30)

引言 高通量測序每測完一個鹼基,會給出一個相應的測序質量值,用於衡量測序儀的準確度。測序錯誤率是在鹼基識別過程中通過一種判斷髮生錯誤概率的數學模型計算得到的,再根據測序錯誤率與鹼基的測序質量值之間的轉化關係,最終得到測序質量值。 公式 假定鹼基的測序錯誤率為:Perror

《MySQL技術內幕:InnoDB儲存引擎》——第1章 MySQL體系結構儲存引擎

啟動 ./mysqld_safe & 檢視程序 ps -ef|grep mysqld 資料庫例項啟動時,讀取配置檔案的順序,後面的檔案配置會覆蓋前面的檔案配置 mysql --help | grep my.cnf mysql> show variables li

物聯網的體系結構關鍵技術

物聯網的體系結構和關鍵技術 ## 物聯網的體系結構 ## 物聯網是在網際網路和行動通訊網等網路通訊基礎上,針對不同領域的需求,利用具有感知、通訊和計算的智慧物體自動獲取現實世界的資訊,將這些物件互聯,實現全面感知、可靠傳輸、智慧處理,構建人與物、物與物互聯的智慧資訊服務系統。 物聯網體系結構主要

Oracle體系結構物理結構

下面咱們就具體瞭解一下Oracle的邏輯結構和物理結構: 一、Oracle邏輯結構  其他關係的邏輯結構,我感覺都是抽象的,但是,Oracle的邏輯結構不抽象,它是一種層次結構,主要由:表空間(Tablespace),段(segment),區(extents)和資料塊(b

Mysql的體系結構執行機理 --04

一、Mysql的體系結構整體圖 ​​​​ 上圖解析: 1.Connector:接入方支援多種協議 2.Management Serveices & Utilities:系統管理和控制工具,mysqldump、 mysql複製叢集、分割槽管

【MySQL技術內幕】01-MySQL體系結構儲存引擎

1、定義資料庫和例項 在資料庫領域中有兩個同很容易混淆,這就是“資料庫”(database)和“例項”(instance)。作為常見的資料庫術語,這兩個詞的定義如下。 資料庫:物理作業系統檔案或其他形式檔案型別的集合。在MySQL資料庫中,資料庫檔案可以是ftm、MYD、

VM安裝CentOS7 64位安裝

注:裝了gohome桌面需要建立一個額外的使用者 在xftp中設定 檔案 ->屬性->選項 勾選“使用utf-8編碼” 。 ifcfg-ens33檔案(/etc/sysconfig/network-scripts資料夾下的第一個檔案(可能

MySQL技術內幕InnoDB儲存引擎-01mysql體系結構儲存引擎

1.定義資料庫和例項 資料庫 (database): 物理作業系統檔案或其他形式檔案型別的集合。 例項(instance) : MySQL資料庫由後臺執行緒以及一個共享記憶體區組成,共享記憶體可以被執行的後臺執行緒所共享,資料庫例項才是真正用於操作資料庫檔案的。 mysql被設計