XHMM (Fromer et al., 2012) は CNV を検出するソフトウェアの一つである。XHMM は、WES のデータを GATK などで処理してから得られる depth of coverage file を入力データとして、CNV を検出する。詳細な XHMM の使い方は XHMM ウェブサイトあるいは Fromer et al., 2014 の論文で確認出来る 。
XHMM の使い方
データの準備
XHMM では、WES データをマッピングした結果である BAM ファイルを GATK で処理した後のデータを入力データとしている。サンプルデータ(EXAMPLE_BAMS.zip)は XHMM ウェブサイトでダウンロードできる。また、マッピング時に利用した FASTA ファイルは 1000 genome プロジェクトのサイトでダウンロードできる。
- EXAMPLE_BAMS.zip
展開後に BAM ファイルと BAM ファイルのインデックス、EXOME.interval_list、group1.READS.bam.list などのファイルが見られる。 - human_g1k_v37.fasta.gz
- human_g1k_v37.fasta.fai
GATK DepthOfCoverage 処理
BAM ファイルに対して、GATK DepthOfCoverage 処理を行い、sequencing depth を計算する。BAM ファイルが多い場合は、分割して GATK を実行することができる。この例の場合、サンプルデータの中には BAM ファイルが 30 個あり、これを 3 つのグループに分けて GATK の処理を行う。各グループにどのような BAM が入っているのかは group*.READS.bam.list のファイルに記載されている。
java -Xmx3072m -jar GenomeAnalysisTK.jar \
-T DepthOfCoverage -I group1.READS.bam.list -L EXOME.interval_list \
-R ./human_g1k_v37.fasta \
-dt BY_SAMPLE -dcov 5000 -l INFO --omitDepthOutputAtEachBase --omitLocusTable \
--minBaseQuality 0 --minMappingQuality 20 --start 1 --stop 5000 --nBins 200 \
--includeRefNSites \
--countType COUNT_FRAGMENTS \
-o group1.DATA
java -Xmx3072m -jar GenomeAnalysisTK.jar \
-T DepthOfCoverage -I group2.READS.bam.list -L EXOME.interval_list \
-R ./human_g1k_v37.fasta \
-dt BY_SAMPLE -dcov 5000 -l INFO --omitDepthOutputAtEachBase --omitLocusTable \
--minBaseQuality 0 --minMappingQuality 20 --start 1 --stop 5000 --nBins 200 \
--includeRefNSites \
--countType COUNT_FRAGMENTS \
-o group2.DATA
java -Xmx3072m -jar GenomeAnalysisTK.jar \
-T DepthOfCoverage -I group3.READS.bam.list -L EXOME.interval_list \
-R ./human_g1k_v37.fasta \
-dt BY_SAMPLE -dcov 5000 -l INFO --omitDepthOutputAtEachBase --omitLocusTable \
--minBaseQuality 0 --minMappingQuality 20 --start 1 --stop 5000 --nBins 200 \
--includeRefNSites \
--countType COUNT_FRAGMENTS \
-o group3.DATA
GATK を実行し終えた後に、3 つの結果をマージする。
xhmm --mergeGATKdepths -o ./DATA.RD.txt \
--GATKdepths group1.DATA.sample_interval_summary \
--GATKdepths group2.DATA.sample_interval_summary \
--GATKdepths group3.DATA.sample_interval_summary
XHMM 処理
XHMM を用いた処理では、
- 外れ値を除去
- PCA
- PCA 結果を用いて CNV を検出
の順で行う。
まずは sequencing depth に外れ値が存在するサンプルや検出ターゲット領域を除去する。
フィルタリングの 1 つである GC 含量を計算する。
java -Xmx3072m -jar GenomeAnalysisTK.jar \
-T GCContentByInterval -L EXOME.interval_list \
-R ./human_g1k_v37.fasta \
-o ./DATA.locus_GC.txt
cat ./DATA.locus_GC.txt | awk '{if ($2 < 0.1 || $2 > 0.9) print $1}' > ./extreme_gc_targets.txt
次に、フィルタリングの 1 つである repeat-masked bases を計算する。
./sources/scripts/interval_list_to_pseq_reg EXOME.interval_list > ./EXOME.targets.reg
pseq . loc-load --locdb ./EXOME.targets.LOCDB --file ./EXOME.targets.reg --group targets --out ./EXOME.targets.LOCDB.loc-load
pseq . loc-stats --locdb ./EXOME.targets.LOCDB --group targets --seqdb ./seqdb | \
awk '{if (NR > 1) print $_}' | sort -k1 -g | awk '{print $10}' | paste ./EXOME.interval_list - | \
awk '{print $1"\t"$2}' > ./DATA.locus_complexity.txt
cat ./DATA.locus_complexity.txt | awk '{if ($2 > 0.25) print $1}' > ./low_complexity_targets.txt
フィルタリング&外れ値除外を行う。
xhmm --matrix -r ./DATA.RD.txt --centerData --centerType target \
-o ./DATA.filtered_centered.RD.txt \
--outputExcludedTargets ./DATA.filtered_centered.RD.txt.filtered_targets.txt \
--outputExcludedSamples ./DATA.filtered_centered.RD.txt.filtered_samples.txt \
--excludeTargets ./extreme_gc_targets.txt --excludeTargets ./low_complexity_targets.txt \
--minTargetSize 10 --maxTargetSize 10000 \
--minMeanTargetRD 10 --maxMeanTargetRD 500 \
--minMeanSampleRD 25 --maxMeanSampleRD 200 \
--maxSdSampleRD 150
次に、外れ値を除去したのちに、PCA を行う。
xhmm --PCA \
-r ./DATA.filtered_centered.RD.txt \
--PCAfiles ./DATA.RD_PCA
PCA を行ったのちに、分散の大きい主成分を取り除く。これにより、CNV に由来しない主成分を除去することができる。具体的にある主成分の分散が、全主成分の分散よりも 0.7 倍よりも大きければ、その主成分を取り除く。そのような主成分を取り除いてから、残りのデータをもう一度正規化する。
xhmm --normalize -r ./DATA.filtered_centered.RD.txt \
--PCAfiles ./DATA.RD_PCA \
--normalizeOutput ./DATA.PCA_normalized.txt \
--PCnormalizeMethod PVE_mean \
--PVE_mean_factor 0.7
正規化に失敗したいくつかのデータをさらに取り除くために、Z スコアによるフィルタリングを行う。
xhmm --matrix -r ./DATA.PCA_normalized.txt \
--centerData \
--centerType sample \
--zScoreData \
-o ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt \
--outputExcludedTargets ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt.filtered_targets.txt \
--outputExcludedSamples ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt.filtered_samples.txt \
--maxSdTargetRD 30
ここまでの手順において、入力データに対して、主成分の分散や Z スコアによるフィルタリングが行われた。この過程において、いくつかのサンプルとターゲット領域が取り除かれた。ここで得られた解析後のデータと最初の入力データ DATA.RD.txt を比較可能にするために、同様なサンプルとターゲット領域を DATA.RD.txt からも取り除く。
xhmm --matrix -r ./DATA.RD.txt \
--excludeTargets ./DATA.filtered_centered.RD.txt.filtered_targets.txt \
--excludeTargets ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt.filtered_targets.txt \
--excludeSamples ./DATA.filtered_centered.RD.txt.filtered_samples.txt \
--excludeSamples ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt.filtered_samples.txt \
-o ./DATA.same_filtered.RD.txt
最後に HMM のアルゴリズムを利用して CNV を検出する。
xhmm --discover -p ./params.txt \
-r ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt -R ./DATA.same_filtered.RD.txt \
-c ./DATA.xcnv -a ./DATA.aux_xcnv -s ./DATA
出力ファイルである DATA.xcnv には CNV の検出結果が保存されている。1 つの CNV につき 1 行で記載されている。
上で検出できた CNV に対して、統計的な手法により検出結果の評価を行う。
xhmm --genotype -p ./params.txt \
-r ./DATA.PCA_normalized.filtered.sample_zscores.RD.txt -R ./DATA.same_filtered.RD.txt \
-g ./DATA.xcnv -F ./human_g1k_v37.fasta \
-v ./DATA.vcf
xcnv フォーマット
XHMM は最終的に拡張子が xcnv のタブ区切りのテキストファイルを出力する。
SAMPLE CNV INTERVAL KB CHR MID_BP TARGETS NUM_TARG Q_EXACT Q_SOME Q_NON_DIPLOID Q_START Q_STOP MEAN_RD MEAN_ORIG_RD
HG00121 DEL 22:18898402-18913235 14.83 22 18905818 104..117 14 9 94 94 84 -2.54 36.73
HG00113 DUP 22:17071768-17073440 1.67 22 17072604 4..11 8 25 99 99 54 25 4.04 193.79
SAMPLE | サンプル名 |
CNV | CNV の種類、DEL または DUP が記載される |
INTERVAL | CNV の範囲 |
KB | CNV の長さ kb |
CHR | 染色体番号 |
MID_BP | |
TARGETS | |
NUM_TARG | |
Q_EXACT | |
Q_SOME | |
Q_NON_DIPLOID | |
Q_START | |
Q_STOP | |
MEAN_RD | |
MEAN_ORIG_RD |
References
- Using XHMM Software to Detect Copy Number Variation in Whole-Exome Sequencing Data. Curr Protoc Hum Genet. 2014, 81:7.23.1-21. DOI: 10.1002/0471142905.hg0723s81 PMID: 24763994
- Discovery and statistical genotyping of copy-number variation from whole-exome sequencing depth. Curr Protoc Hum Genet. 2012, 91(4):597-607. DOI: 10.1016/j.ajhg.2012.08.005 PMID: 23040492