2012年6月7日木曜日

.wigのtag countをmedianでノーマライズする


MACSが出力したwiggleのtag countや、samtools mpileup -Dあるいはsamtools depthで得られたdepthを比較解析したいとき、ノーマライズのひとつのやり方として、medianで割るという方法が考えられる。

Rを使えば簡単。

wiggleを読み込む。ヘッダー2行は省く(skip=2)。
wig <- read.table("<in.wig>",skip=2)

> head(wig)
  V1  V2
1  1   3
2 11  34
3 21  49
4 31  65
5 41  81
6 51 105

2列目のデータを、2列目のmedianで割った値で置き換える。
wig$V2 <- wig$V2/median(wig$V2)

> head(wig)
  V1          V2
1  1 0.007575758
2 11 0.085858586
3 21 0.123737374
4 31 0.164141414
5 41 0.204545455
6 51 0.265151515

小数点以下2桁にする
wig$V2 <- round(wig$V2,digits=2)

> head(wig)
  V1   V2
1  1 0.01
2 11 0.09
3 21 0.12
4 31 0.16
5 41 0.20
6 51 0.27

まとめてやるなら、
wig <- read.table("<in.wig>",skip=2)
wig$V2 <- round(wig$V2/median(wig$V2),digits=2)

必要に応じてread.tableで書き出したり、プロットしたりする。

IGVの調整によりwiggle等を開けるようにする


IGVの調整によりwiggleを開けるようにする

MACSが作成したwiggle(.wig)のヘッダー情報にある染色体名(chrom=)がIGVで用いるアセンブリと一致しない場合、wiggleのヘッダーを書き換える以外に、IGVの設定を調整するという解決策もある。

macなら、ホームフォルダに「igv」というフォルダがあり(IGV 2.0のときは不可視化されていた?)、その中の「genomes」に、エイリアスファイルなるものを作って入れてやるだけで良い。

詳しい説明はこちら。

.wigと染色体名が一致しない問題は、BWA等によるアライメントの時に使用するリファレンスゲノム(.fasta)の染色体名をあらかじめIGVに合わせておくことで回避できるが、様々なソースから得たGFFやBEDなどもまた、染色体名の記述方法が異なる場合がある。その都度書類を書き換えるより、上記のごとくIGVの設定を変更しておくと楽。


IGVでwiggleを開く


MACSが解析したChIP-seqのデータ(.wig)をIGVで眺める。


必要なデータ
 <in.wig.gz> MACSで作成したwiggle(.gzを解凍してもしなくても)


IGV(Integrative Genomics Viewer)はJavaで動くゲノムブラウザ。IGVのダウンロードページから、Binary distributionをダウンロードする。

IGV_2.1.17.zip(14.6 MB)を解凍し、igv.jarを起動。

生物(アセンブリ)を指定する。染色体名を確認する。「chr1」や「I」など、アセンブリにより染色体名の記述の仕方が異なる。

MACSが作成した.wig.gzを解凍して.wigにし、エディタで開いてヘッダーの2行目の「chrom=」の後ろを確認する。ここがIGVの記述方法と一致している必要がある。一致していなければ書き換える。

染色体名が一致していれば、.wig.gzのままでもIGVで開くことができる。

もうひとつのやり方はこちらを参照。


MACSでChIP-seqデータを解析

MACSはピークを検出するだけでなく、wiggle形式のデータも出力してくれる。

必要なデータ
 <treat.bam> サンプル1
 <control.bam> サンプル2

BWAとsamtools samseで、FASTQからBAMを得ておく。


他のパラメータ
 <genome.size> ゲノムサイズを「1.5e+9」などの形で与える必要がある
 <name> この名前のフォルダが作られる

コマンド
 macs14 -t <treat.bam> -c <control.bam> -f BAM -g <genome.size> -n <name> -w

作られるファイルとフォルダ
 <name>(フォルダ)
  <name>_peaks.bed
  <name>_peaks.xls
  <name>_negative_peaks.bed
  <name>_summits.bed
  <name>_MACS_wiggle(フォルダ)
   control(フォルダ)
   treat(フォルダ)

* controlとtreatのフォルダに染色体毎のwiggle(.wig.gz)が作られる
* -wを与えなければwiggleは作られない
* コントロール(-c <control.bam>)は必ずしも必要ではない

.wigと.bedはIGVで開くことができる

SRAをFASTQに変換

NCBI SRA からダウンロードした.sra.fastqにする。

SRA Toolkitを使う(たとえば、ver 2.1.9)


必要なデータ
 <in.sra>

コマンド
 fastq-dump.2.1.9 <in.sra>

作られるデータ
 <in.sra>と同じprefixの.fastq(in.fastq)


paired-endのfastqがセットになった.sraの場合、
fastq-dump.2.1.9 に 「--split-3」を与える

コマンド
 fastq-dump.2.1.9 --split-3 <in.sra>

作られるデータ
 in_1.fastqとin_2.fastq


SRAをFASTQに変換できない?
そう困ったときは、paired-endかもしれないと疑ってみるのがいいみたい。

BAMからdepthを得る

.bamからdepthを得る

必要なデータ
 ref.fasta リファレンスゲノム
 in1.bam サンプル#1のデータ
 in2.bam サンプル#2のデータ
 .bamはsamtools view(必要ならrmdup)で得る

コマンド
 samtools mpileup -D -f <ref.fasta> <in1.bam> <in2.bam> > <mpileup.result1.txt>

生成されるデータ
 ref.fasta.fai
 mpileup.result1.txt

mpileup.result1.txtの内容
 1行目:染色体名
 2行目:塩基番号(1~)
 3行目:塩基(A, T, G or C)
 4行目:depth <in1.bam>
 5行目:リードの方向("." or ",") <in1.bam>
 6行目:対応するクオリティー <in1.bam>
 7行目:depth <in2.bam>*
 8行目:リードの方向("." or ",") <in2.bam>*
 9行目:対応するクオリティー <in2.bam>*
 *インプットが1つの場合、6行目まで


生成されるデータを軽量化する(リードの方向やクオリティーを省く)

コマンド
 samtools mpileup -D -f <ref.fasta> <in1.bam> <in2.bam> | awk  '{print($1,$2,$3,$4,$7)}' > <mpileup.result2.txt>

mpileup.result2.txtの内容
 1行目:染色体名
 2行目:塩基番号(1~)
 3行目:塩基(A, T, G or C)
 4行目:depth <in1.bam>
 5行目:depth <in2.bam>

高速シーケンスデータからBAMを得てバリアントをコールする

BWAによるアライメントの続き

samtools & bcftools
アライメントデータ(.sam)をバイナリデータ(.bam)に変換し、バリアント(SNP, indel)をコールする
bcftoolsはsamtoolsについてくる


必要なファイル
 ref.fasta
 fastq1.txt
 samse.result.sam
 sampe.result.sam


samtools view
 samtools view -uS <input.sam> | samtools sort - <name>
 → .bamファイルが作られる(name.bam:sort済みのuncompressedな.bam)

samtools rmdup
 samtools rmdup -s <imput.bam> <output.bam>
 → PCR duplicatesが取り除かれる

samtools index
 samtools index <input.bam>
 → .baiファイルが作られる

samtools flagstat
 samtools flagstat <input.bam> > <output.txt>
 → リードのマップ状況などに関する統計が表示される

samtools idxstats
 samtools idxstats <input.bam> > <output.txt>
 → 各染色体にマップされたリードの数が表示される

samtools pileup
 廃止された(現在はmpileupを使用する)

samtools mpileup(variantのコール)
 samtools mpileup -uf <ref.fasta> <input.bam> | bcftools view -bvcg - > <output.raw.bcf>
 → .bcfファイルが作られる(uncompressed BCF: binary call format)

bcftools view
 bcftools view <input.raw.bcf> | vcfutils.pl varFilter -D10000000 > <output.var.flt.vcf>
 → フィルター済みの.vcfファイルが作られる