FASTQファイル - 塩基配列を格納するためのフォーマット

お疲れ様です。9月です。寒いです。

本日はバイオインフォマティクスの基礎の基礎。
FASTQファイルについて見ていきましょう。

ショートリードを生成するシーケンサーだと、だいだい <~200 bpの塩基配列を取得できます。
大抵の場合、シーケンサから出力されたデータは、まずFASTQファイルに変換されます。

なぜでしょう。

世界基準だからですかね。

とりあえずその程度普及しているフォーマットということです。

FASTQとは

FASTQ format is a text-based format for storing both a biological sequence (usually nucleotide sequence) and its corresponding quality scores.
~~~
recently become the de facto standard for storing the output of high-throughput sequencing instruments such as the Illumina Genome Analyzer.

Wikipedia

Fastqというのは、次世代シーケンサーからの出力データ(配列及びクオリティスコア)を保存するテキストベースのフォーマットです。今やこの業界のデファクトスタンダードといえるまで普及したフォーマットになります。

FASTA ? FASTQ?

同様の響きを持つフォーマットにFASTAなるものがあります。
DNAの塩基配列を格納する役割があるという意味では同じですが、FASTAはアミノ酸配でも使われます。 FASTAはFASTAというソフトウェアに由来していて、アライメントを行うためのフォーマットでした。これが一般的に普及して配列を格納するフォーマットとして使われていたりします。

FASTQファイルの基本構文

@SRR001666.1 071112_SLXA-EAS1_s_7:5:1:817:345 length=36  
GGGTGATGGCCGCTGCCGATGGCGTCAAATCCCACC  
+SRR001666.1 071112_SLXA-EAS1_s_7:5:1:817:345 length=36  
IIIIIIIIIIIIIIIIIIIIIIIIIIIIII9IG9IC  

FASTQファイルのフォーマットでは、4行ごとに1本の配列を表します。
1行目:@から始まるIDと、その他配列のメタデータ。
2行目:塩基配列
3行目:+
4行目:Phredクオリティスコア(2行目の配列に対応)

Phredクオリティスコアとは

現在多くのシーケンサでは、Phredクオリティスコアというスコアによってベースコールのクオリティを定義しています。
Phredは元々、ベースコールを行うプログラムだったらしく、
そこで使用されていたクオリティスコアがなかなか優秀であったため、現在でも使用されているとか何とか。

クオリティスコア(Q)の定義

Phredクオリティスコアでは、
任意の塩基のシーケンスクオリティスコア(Q)は、以下の式により定義されます。

Q = -10log_{10}(e)

ここで、eはベースコールが正しく行われない確率です。
つまり、Q値が高いほどエラーの確率が低く、正しいベースコールが行われていることを意味しています。

Q10、Q20、Q30の意味としては以下のようになります。

クオリティスコア ベースコールが正しく行われない確率 (e) 推定ベースコール精度
10(Q10) 10分の1 90%
20(Q20) 100分の1 99%
30(Q30) 1000分の1 99.9%

参考: https://jp.illumina.com/science/education/sequencing-quality-scores.html

クオリティスコアQは数値じゃないの?

って思われるかと思います。ごもっともです。
でもクオリティースコアは2桁だったりするわけです。
塩基と上下で見比べたいのに、縦が揃っていないと見にくいじゃないですか。

そんなわけで、ASCIIコードを使用しているのです。

#0-#32に対応するASCIIコードはプリントできない文字列なので、
#33〜#126の印刷可能な文字をFASTQファイルには使用します。

一方で、クオリティスコアQは0から定義したいので、
FASTQファイル内で使用するASCIIコードを以下のように定義します。

 Fastq ASCII code=Q+33=−10log_{10}e + 33

こうすると、スコア0には!、スコア1には"というように、スコアQとASCII文字が1対1に対応します。
このASCII文字が3行目に記されているということです!

ちなみに3行目は通常1行目と同じなのですが、optionalな情報やコメントなんかを載せるらしいです。
自分はそんなデータに遭遇したことはありませんのであまり気にしなくてよいかと思います。