全ゲノム解析ハンズオン 2024 新村グループ
—スモールデータで理解する SNP 解析の流れ
目標
コンテンツ
前準備
大腸菌の参照配列をダウンロード
ダウンロードしたファイルは圧縮されている (.gz) ので解凍する:
ファイル名が長いので Ecoli.fa に変えておく (任意):
参照配列の中身を見てみる:
> で始まるヘッダー行と配列からなる FASTA というファイル形式。
Fastq と似ているけど別フォーマット。
使うデータ (fastq と参照配列) が用意できたところで、 より小さなデータを使ってこれから扱うファイルの形式を先に理解しよう。
データ置き場: https://github.com/ymat2/md4rm
データをダウンロードする:
ディレクトリを移動して ls で中身を確認:
ref.fa: 参照配列。100bp。sra_1.fq, sra_2.fq: Paired-end のショートリード (もどき)。sra_1.fq, sra_2.fq には以下の5本のリードがある。

less などで中身を見てみる:
## 参照配列のインデックスを作る
bwa index ref.fa
## ショートリードを参照配列へマッピングする
bwa mem ref.fa sra_1.fq sra_2.fq > small.sam
## SAM ファイルを処理する
samtools collate small.sam -o small.c.sam # リード名ソート
samtools fixmate -m small.c.sam small.cf.sam # MC, ms タグを付加
samtools sort small.cf.sam -o small.cfs.sam # 位置順ソート
samtools markdup small.cfs.sam small.cfsm.sam # PCR duplicates をマーク
## BAM ファイルへ圧縮する
samtools view -b small.cfsm.sam > small.bam
# 一般的には BAM への圧縮を最初にやる。(SAM のサイズが大きいので。)
# 今回はファイルの中身を見ながら進めるので最後に。マッピングの結果はターミナルに出力されるので、 リダイレクト > して small.sam に書き込む。
https://samtools.github.io/hts-specs/SAMv1.pdf
参照配列にマッピングされたリードの情報を記載するためのフォーマット
@SQ SN:NC_052532.1 LN:100
@PG ID:bwa PN:bwa VN:0.7.17-r1188 CL:bwa mem -I 90 ref.fa sra_1.fq sra_2.fq
read1 99 NC_052532.1 3 60 40M = 53 90 TCACCCATCTCGGAGTGCTCACACCATCCCCATGATCTTG AAAAAAAAA6AAA7AAAAABBAAA?A7<?AAA:>6::662 NM:i:1 MD:Z:13G26 MC:Z:40M AS:i:35 XS:i:0
read1 147 NC_052532.1 53 60 40M = 3 -90 ATCACCCCCATGTCCCCCGGATGCTCACAGCATCACCCAT 266::6>:AAA?<7A?AAABBAAAAA7AAA6AAAAAAAAA NM:i:0 MD:Z:40 MC:Z:40M AS:i:40 XS:i:0
read2 83 NC_052532.1 55 60 40M = 5 -90 CACCCCCATGTCCCCCGGATGCTCACAGCATCACCCATCT 266::6>:AAA?<7A?AAABBAAAAA7AAA6AAAAAAAAA NM:i:0 MD:Z:40 MC:Z:40M AS:i:40 XS:i:0
read2 163 NC_052532.1 5 60 40M = 55 90 ACCCATCTCGGAGTGCTCACACCATCCCCATGATCTTGGG AAAAAAAAA6AAA7AAAAABBAAA?A7<?AAA:>6::662 NM:i:1 MD:Z:11G28 MC:Z:40M AS:i:35 XS:i:0
︙@ で始まるヘッダー行と、1リード1行のデータからなる。
11 列以上で構成され、11列目まではツール共通、それ以降はマッピングツールによって異なる。
QNAME: リード名FLAG: マッピング状況を表す数字RNAME: 参照配列の名前 (染色体、コンティグ等)POS: 位置MAPQ: マッピングクオリティ。\(-10 \times \log_{10}{\text{(誤マッピングの確率)}}\)。CIGAR: いくつの塩基がどう張り付いたかを示す文字列MRNM: Paired-end のもう片方が張り付いた染色体。一緒なら =。MPOS: Paired-end のもう片方の位置TLEN: Insert size (Paired-end の端から端までの長さ)SEQ: 配列QUAL: 配列のクオリティFLAG について (このあと出てくるので説明)リードのマッピング状況を表す数字。Bit 表現の足し算。
例えば FLAG が 99 なら 64+32+2+1 で「正しくマッピングされた、ペアが逆鎖のread1」、 133 なら 128+4+1 で「マッピングされていないペアのread2」となる。
collate, fixmatesamtools collatesamtools fixmate -mMC, ms) というタグを付加する。
markdup の際にどのリードを残すかの基準となる。
🔰 small.sam と small.cf.sam を見比べて、 リードの順番の違いと、行の右端に MC/ms タグがあることを確認しよう。
sortsamtools sortPOS に基づいて) 並び替える。
🔰 small.cf.sam と small.cfs.sam を見比べて、 リードの順番が4列目 POS の昇順になっていることを確認しよう。
markdupsamtools markdup🔰 small.cfs.sam と small.cfsm.sam とで read3 の2列目 FLAG の変化を比べよう。
read3 163 NC_052532.1 5 60 40M = 55 90 ACCCATCTCGGAGTGCTCACACCATCCCCATGATCTTGGG AAAAAAAAA6AAA7AAAAABBAAA?A7<?AAA:>6::662 NM:i:1 MD:Z:11G28 AS:i:35 XS:i:0 MQ:i:60 MC:Z:40M ms:i:1170
↓
read3 1187 NC_052532.1 5 60 40M = 55 90 ACCCATCTCGGAGTGCTCACACCATCCCCATGATCTTGGG AAAAAAAAA6AAA7AAAAABBAAA?A7<?AAA:>6::662 NM:i:1 MD:Z:11G28 AS:i:35 XS:i:0 MQ:i:60 MC:Z:40M ms:i:1170markdup -rsamtools markdup -r🔰 small.cfsm.sam から read3 が除かれたことを確認しよう。
BAM は SAM をバイナリに圧縮したファイル形式。 バイナリファイルなのでそのままでは読めず、インデックスを作って閲覧する。
閲覧方法
改めて先ほど取得した大腸菌のデータを使って、リードマッピングを行う。
cd .. # 元の snp24 ディレクトリへ移動
## インデックス作成とマッピング
bwa index Ecoli.fa
bwa mem Ecoli.fa qc_SRR030257_1.fq.gz qc_SRR030257_2.fq.gz > SRR030257.sam
## SAMtools による処理
samtools view -b SRR030257.sam > SRR030257.bam # 最初に BAM へ圧縮
samtools collate SRR030257.bam -o SRR030257.c.bam # リード名ソート
samtools fixmate -m SRR030257.c.bam SRR030257.cf.bam # MC, ms タグを付加
samtools sort SRR030257.cf.bam -o SRR030257.cfs.bam # 位置順ソート
samtools markdup SRR030257.cfs.bam SRR030257.cfsm.bam # PCR duplicates をマーク
samtools index SRR030257.cfsm.bam # インデックス作成🔰 samtools tview でリードのマッピング状況を可視化してみよう。 (矢印キー ←/→ で移動できる。)
samtools tview で眺めると変異らしき座位が見つかる
閲覧画面で / を押して Chromosome:161041 と打つとこの位置へジャンプ
SNP (T から G) ↑
バリアントコールのお気持ち。例えば参照配列が A のある座位に対して、
GG だろう。
A、51本が GA/G のヘテロだろう。
A、2本が GA/G のヘテロである確率よりは、2本が誤っている確率が高そう。A、1本が GA/G のヘテロだけど、本数が少ないので確実な変異とは言えない。
bcftools mpileupbcftools callmpileup で出力した遺伝子型尤度に基づいて遺伝子型を決定する。
-c: biallelic コール (REF/ALT)。-m にすると multi-allelic コール (REF/ALT1/ALT2…)。
-v: 変異がある座位のみを出力する。
--ploidy N: 一倍体か二倍体か。デフォルトは二倍体。
https://samtools.github.io/hts-specs/VCFv4.2.pdf
バリアントコールした変異の情報を記述するフォーマット。 BCF は VCF をバイナリ化したもの。
##fileformat=VCFv4.2
##FILTER=<ID=PASS,Description="All filters passed">
##bcftoolsVersion=1.13+htslib-1.13+ds
︙
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR030257.cfsm.bam
Chromosome 161041 . T G 225.007 . DP=55;VDB=0.000910305;SGB=-0.693147;MQSBZ=1.32288;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,20,35;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 380188 . A C 225.007 . DP=42;VDB=0.701392;SGB=-0.693146;MQSBZ=-0.595683;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,11,31;MQ=60;FQ=-999 GT:PL 1:255,0
︙## で始まるヘッダー行と、1座位1行のデータ行からなる。
8列目までは共通、10列目以降は各サンプルの列。
#CHROM: 染色体やコンティグの名前
POS: 染色体上の位置
ID: SNP に名前がついている場合がある。(例: rs247)
REF: 参照配列の塩基 (配列)
ALT: 変異の塩基 (配列)
QUAL: クオリティ。\(-10 \times \log_{10}{\text{(変異が間違いである確率)}}\)
FILTER: フィルターを通過したかどうか (PASS)
INFO: ; 区切りの追加情報。たいていヘッダー行に説明が書いてある。
##INFO=<ID=DP,Number=1,Type=Integer,Description="Raw read depth">FORMAT: 10列目以降の各サンプル列に何が書いてあるか。
FORMAT フィールドの読み方sampleA 以降の列には GT と PL の情報が : 区切りで書いてある。sampleA の GT は 0/1、PL は 139,0,112。sampleB の GT は 1/1、PL は 245,27,0。GT (genotype)/ もしくは | 区切りで、0/0 なら REF/REF (参照配列のホモ)、 0/1 なら REF/ALT (ヘテロ)、1/1 なら ALT/ALT (変異のホモ) のように読む。
PL (phred-scaled genotype likelihood), 区切りで REF/REF,REF/ALT,ALT/ALT の順にスコアリングされており、 数字が小さいほど尤もらしい。
SRR030257.vcf を見てみる## ヘッダー省略
#CHROM POS ID REF ALT QUAL FILTER FORMAT SRR030257.cfsm.bam
Chromosome 161041 . T G 225.007 . DP=55;VDB=0.000910305;SGB=-0.693147;MQSBZ=1.32288;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,20,35;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 380188 . A C 225.007 . DP=42;VDB=0.701392;SGB=-0.693146;MQSBZ=-0.595683;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,11,31;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 430835 . C T 225.007 . DP=72;VDB=0.0514064;SGB=-0.693147;RPBZ=-4.55905;MQBZ=5.72838;MQSBZ=-2.34454;BQBZ=-1.62502;SCBZ=-1.61283;FS=0;MQ0F=0.208333;AF1=1;AC1=1;DP4=1,13,31,27;MQ=46;FQ=-999;PV4=0.0020037,0.174994,1,1 GT:PL 1:255,0
Chromosome 475288 . CGGGG CGGGGG 217.469 . INDEL;IDV=34;IMF=0.772727;DP=44;VDB=0.0585699;SGB=-0.693132;RPBZ=-1.90593;MQBZ=-1.12363;MQSBZ=2.23545;SCBZ=-3.81819;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=3,1,14,20;MQ=60;FQ=-999;PV4=0.30678,1,0.282827,1 GT:PL 1:255,65,0
Chromosome 649391 . T A 225.007 . DP=60;VDB=0.100294;SGB=-0.693147;MQSBZ=-0.0713471;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,31,29;MQ=60;FQ=-999 GT:PL 1:255,0
︙
Chromosome 1286699 . C A 225.007 . DP=53;VDB=0.327747;SGB=-0.693147;MQSBZ=2.54111;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,21,32;MQ=59;FQ=-999 GT:PL 1:255,0
Chromosome 1329516 . C T 225.007 . DP=50;VDB=0.0979545;SGB=-0.693147;MQSBZ=2.05363;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,18,31;MQ=59;FQ=-999 GT:PL 1:255,0
Chromosome 1976879 . T G 225.007 . DP=48;VDB=0.218639;SGB=-0.693147;MQSBZ=-1.29099;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,30,18;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 2031736 . A G 18.0728 . DP=5;VDB=0.0672958;SGB=-0.590765;FS=0;MQ0F=0.2;AF1=1;AC1=1;DP4=0,0,0,5;MQ=19;FQ=-999 GT:PL 1:48,0
Chromosome 2054876 . A G 119.006 . DP=18;VDB=0.155125;SGB=-0.691153;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,18,0;MQ=31;FQ=-999 GT:PL 1:149,0## ヘッダー省略
#CHROM POS ID REF ALT QUAL FILTER FORMAT SRR030257.cfsm.bam
Chromosome 161041 . T G 225.007 . DP=55;VDB=0.000910305;SGB=-0.693147;MQSBZ=1.32288;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,20,35;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 380188 . A C 225.007 . DP=42;VDB=0.701392;SGB=-0.693146;MQSBZ=-0.595683;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,11,31;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 430835 . C T 225.007 . DP=72;VDB=0.0514064;SGB=-0.693147;RPBZ=-4.55905;MQBZ=5.72838;MQSBZ=-2.34454;BQBZ=-1.62502;SCBZ=-1.61283;FS=0;MQ0F=0.208333;AF1=1;AC1=1;DP4=1,13,31,27;MQ=46;FQ=-999;PV4=0.0020037,0.174994,1,1 GT:PL 1:255,0
Chromosome 475288 . CGGGG CGGGGG 217.469 . INDEL;IDV=34;IMF=0.772727;DP=44;VDB=0.0585699;SGB=-0.693132;RPBZ=-1.90593;MQBZ=-1.12363;MQSBZ=2.23545;SCBZ=-3.81819;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=3,1,14,20;MQ=60;FQ=-999;PV4=0.30678,1,0.282827,1 GT:PL 1:255,65,0
Chromosome 649391 . T A 225.007 . DP=60;VDB=0.100294;SGB=-0.693147;MQSBZ=-0.0713471;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,31,29;MQ=60;FQ=-999 GT:PL 1:255,0
︙
Chromosome 1286699 . C A 225.007 . DP=53;VDB=0.327747;SGB=-0.693147;MQSBZ=2.54111;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,21,32;MQ=59;FQ=-999 GT:PL 1:255,0
Chromosome 1329516 . C T 225.007 . DP=50;VDB=0.0979545;SGB=-0.693147;MQSBZ=2.05363;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,18,31;MQ=59;FQ=-999 GT:PL 1:255,0
Chromosome 1976879 . T G 225.007 . DP=48;VDB=0.218639;SGB=-0.693147;MQSBZ=-1.29099;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,30,18;MQ=60;FQ=-999 GT:PL 1:255,0
Chromosome 2031736 . A G 18.0728 . DP=5;VDB=0.0672958;SGB=-0.590765;FS=0;MQ0F=0.2;AF1=1;AC1=1;DP4=0,0,0,5;MQ=19;FQ=-999 GT:PL 1:48,0
Chromosome 2054876 . A G 119.006 . DP=18;VDB=0.155125;SGB=-0.691153;FS=0;MQ0F=0;AF1=1;AC1=1;DP4=0,0,18,0;MQ=31;FQ=-999 GT:PL 1:149,0https://samtools.github.io/bcftools/howtos/filtering.html
-i (or -e)-i (or 除外する -e)
"QUAL>20 && INFO/DP>10"QUAL フィールドの値が20より大きい、かつ (&&) INFO フィールドの DP が10より大きい。
🔰 条件を変えて bcftools filter してみよう。
🔰 SRR030257.vcf と hq_SRR030257.vcf を比べて意図した通りできているか確認しよう。
達成🎉
参考
| によるファイル出力の省略パイプ | は | の前のコマンドの標準出力を | の後のコマンドの標準入力へ渡す仕組み。
使い方:
bcftools mpileup の出力 (SRR030257.mpileup) を bcftools call の入力として直接使う。
apptainer イメージの使用https://sc.ddbj.nig.ac.jp/software/BioContainers/
Apptainer はユーザが解析ソフトウェアをインストール不要で使える仕組み。
「使いたいコマンドが遺伝研スパコンにない!」ときや「違うバージョンのソフトが使いたい!」ときに便利。