SNPコール

SNP コール

この章では、アラインメント結果を利用して SNP コールを行う。

SNP コールのソフトウェアには、GATK、bcftools mpileup などが存在するが、ここでは bcftools mpileup を利用する。GATK は正確さが高いが、実行に時間がかかる。bcftools mpileup は GATK よりも速い。用いるデータセットにも依存するが、正確さは bcftools mpileup でも十分である。

SNP コールの例

snp-call.sh

#!/bin/bash
 
BAM_FILES=(bam/sample*_markdup.bam)
VCF_DIR=vcf
REF_SEQ_PATH=./refseq/GCF_002575655.2_Aet_v5.0_genomic.fna
 
if [ -d "$VCF_DIR" ]; then
        rm -r $VCF_DIR
fi
mkdir $VCF_DIR
 
# SNP コールを行う
# マッピングクオリティ (MAPQ) やリードのデプス (DP) などのフィルタリングを行う
bcftools mpileup -a AD -B -q 20 -Q 0 -A -O u -f ${REF_SEQ_PATH} ${BAM_FILES[*]} | \
        bcftools view -v snps | bcftools call -G - -mv - | \
        bcftools view --threads 2 -i 'DP>=5 & MQ >= 40' -o ${VCF_DIR}/snp.vcf.gz
 
# SNP のフィルタリングを行う
vcftools --gzvcf ${VCF_DIR}/snp.vcf.gz --recode --recode-INFO-all --stdout \
        --max-missing 0.8 --maf 0.05 | gzip -c > ${VCF_DIR}/snp_filtered.vcf.gz

スクリプトの実行

$ ./snp-call.sh

ここでは SNP のフィルタリング基準を以下のように設定している。

  • 最大欠損率 20% (--max-missing)
  • マイナーアリル頻度 5% (--maf)

これらの値を厳しくすると得られる SNP の数が減少してしまう。しかし、厳しくしないとクオリティの低い SNP が多く残ってしまい、解析結果に影響を及ぼす。

フィルタリング基準の設定は一般的に難しく、データセットの性質や解析の目的によって試行錯誤を行う必要がある。例えば、集団構造解析やゲノムワイドな QTL 解析を行う場合では SNP の数はそこまで多くなくてもよい。一方で、 GWAS を行う場合では SNP の数が多いほど検出力が上がる (要検証)。

また、Beagle (opens in a new tab) などの imputation 用ソフトウェアを用いることで、得られた VCF ファイルの欠損部分を統計的に補完することも可能である。このソフトウェアでは、haplotype phasing を経て imputation を行う。

VCF ファイル

SNP データは VCF ファイルとして得ることができる。VCF ファイルは集団の多型情報を格納するためにファイルフォーマットで、SAMtools の開発チームが規格を管理している。

VCFファイルは、集団構造解析や GWAS などの解析に利用することができる。解析ソフトウェアによって入力ファイルフォーマット形式が異なるため、それらに合わせた形式に変換することが必要である。Plink (opens in a new tab) というソフトウェアは、さまざまな形式のファイルに相互に変換する方法を提供している。

hoge.vcf.gz というファイルを tped / tfam 形式に変換するコマンド (plink バイナリのパスが $PATH に含まれている必要がある)

$ plink --vcf hoge.vcf.gz --out hoge --const-fid --allow-extra-chr --recode transpose

ファイルフォーマットの変換の際には、sed, awk などのストリームで動作するスクリプト言語や cut, grep などのコマンドも有用である。