macでインフォマティクス

macでインフォマティクス

NGS関連のインフォマティクス情報についてまとめています。

変異のフィルタリングを行うSnpSift

以前SnpEffという変異のアノテーションを行うことができるツールを紹介した(リンク)。このツールにはもう一つSnpSiftというツールが同梱されている。SnpSiftは変異コール結果のVCFファイルを扱うツールで、クオリティやp値など様々な指標に基づいて変異を仕分けることができる。大きなゲノムの解析では数万を超える変異がコールされてくるのが普通だが、そういった時、統計の理屈上偽陽性は一定数出てきてしまう。そこで、はじめに信頼度などの条件に従って変異コール結果をフィルタリングできれば便利である。

SnpSiftはそんな時に使えるツールです。使い方をまとめてみます。

 

公式ページ

SnpSift

インストール

SnpEff

SnpEffのパッケージに入っているので、SnpEffをインストールしている人はすでに持っているはず。SnpEffはbrewでも導入できます。

 

VCFフォーマットについて簡単にまとめています。


 

ラン

filter 条件に従ってフィルタリングする。

 

quality30以上のコールだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter " ( QUAL >= 30 )" > filtered.vcf

 

 quality20以上のindelとquality30以上のコールを取り出す。(パイプ"|"でA or Bを表す)

cat variants.vcf | java -jar SnpSift.jar filter "(( exists INDEL ) & (QUAL >= 20)) | (QUAL >= 30 )" > filtered.vcf

 

カバレッジ (DP) 25以上のコールだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter "(DP >= 25)" > filtered.vcf

3つ以上のサンプルでhomozygoteのコールだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter "(countHom() > 3)" > filtered.vcf

heterozygoteでカバレッジ25以上のコールだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter "((countHet() > 0) && (DP >= 25))" > filtered.vcf

 

VCFの標準フォーマットに従っていれば、色々な取り出し方が可能である。例えば下のように

f:id:kazumaxneo:20170819204540j:plain

カラムの説明で#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Zがコールの1行前につけられている。上のVCFからCHROMフィールドが"chr"だけ取り出すなら

cat variants.vcf | java -jar SnpSift.jar filter "( CHROM = 'chr' )" > filtered.vcf

フィルターがPASSしているものだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter "(FILTER = 'PASS')"  > filtered.vcf

Positionが 123456-654321のコールだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter "( POS > 123456 ) & ( POS < 654321 )" > filtered.vcf

-n オプションを使い、chrとマッチしないものだけ取り出す。

cat variants.vcf | java -jar SnpSift.jar filter -n "( CHROM = 'chr' )" > filtered.vcf
  • -n Inverse. Show lines that do not match filter expression

 

genotypeフィールドでフィルタリングする。

2サンプルのコール結果なら、例えばgenotypeフィールドは

"GT:PL:GQ 1/1:255,66,0:63 0/1:245,0,255:99"

のようになっている。1番サンプルがGQ>60以上の部位だけ取り出すなら

cat variants.vcf | java -jar SnpSift.jar filter "( GEN[0].GQ > 60 )"  > filtered.vcf

サンプルはindexで管理されているので、2番サンプルならGEN[1]。全サンプルならGEN[*]で表せる

 

PLのように複数フィールドを持っているなら(上の例の1番サンプルならPLは255,66,0)、PLの後にも[index]をつける。

cat variants.vcf | java -jar SnpSift.jar filter "( GEN[0].PL[2] = 0 )"  > filtered.vcf

他にも多種多様なフィルタリングが可能になっている。公式に膨大な例があるので、そちらを確認してみてください。

 

 

 

Annotate 別のVCFファイルのアノテーション情報を移す。

 

dbSNPや1000ゲノムなど大規模データのアノテーション情報を移したりするのに使う。

java -jar SnpSift.jar annotate dbSnp132.vcf variants.vcf > variants_annotated.vcf 

 例えばアノテーション情報を移す前のVCFが以下なら、

22      16346045    .            T    C    0.0    FAIL    NS=244

変異が参照先のVCFと合致すると

22      16346045    rs56234788   T    C    0.0    FAIL    NS=244;RSPOS=16346045;GMAF=0.162248628884826;dbSNPBuildID=129;SSR=0;SAO=0;VP=050100000000000100000100;WGT=0;VC=SNV;SLO;GNO

 のようにIDフィールドとINFOフィールドに追記される。-idオプションをつけると、IDフィールドの書き込みだけ行われる。

 

 

他にも様々なコマンドが用意されている。時間を見つけて順番にまとめていきます。

 

CaseControl

 

RmRefGen

 

TsTv

 

 ExtractFields

 

varType

 

gwasCat

 

Split

 

Concordance

 

Private

 

Vcf2Tped

 

Intersect

 

RmInfo

 

GeneSets

 

GT

 

VcfCheck 

 

 

 

 

 

 

 

 

 

 

 

 

 

 似たツールにvcflibがある。こちらが完成次第、また紹介する。

https://github.com/vcflib/vcflib

 

 

 

 

引用

Using Drosophila melanogaster as a model for genotoxic chemical mutational studies with a new program, SnpSift

Cingolani, P., et. al., Frontiers in Genetics, 3, 2012.