SAIGE と SAIGE-GENE (パイプトランスフォーマーを使用) SAIGE and SAIGE-GENE (using Pipe Transformer)

SAIGEは、biobank データに対して遺伝的関連付けテストを実行するために R で記述されたコマンドラインツールです。SAIGE is a command-line tool written in R for performing genetic association tests on biobank-scale data. 光彩のパイプトランスフォーマーを使用して、SAIGE に対して1 つのバリアントアソシエーションテストメソッドと、地域ベースのアソシエーションテストメソッド SAIGE GENE on Databricks Runtimeを実行します。Run the single-variant association test method SAIGE and the region-based association test method SAIGE-GENE on Databricks Runtime for Genomics using Glow’s Pipe Transformer.

SAIGE クラスターの作成 Create a SAIGE cluster

Init スクリプトを使用して、クラスター内のすべてのノードにHTSLibと SAIGE パッケージ、その依存関係、および関連する入力ファイルをインストールします。Install HTSLib as well as the SAIGE package, its dependencies, and associated input files on every node in the cluster using an init script. ヒューズマウントを使用して、これらのファイルを保管してクラウドストレージからダウンロードするマウントポイントを作成することをお勧めします。We recommend creating a mount point to store and download these files from cloud storage with the FUSE mount. スクリプトの値をマウントポイントとローカルディレクトリに置き換えます。Replace the values in the script with your mount point and local directory.

#!/usr/bin/env bash

set -ex
set -o pipefail

# Install SKAT for SAIGE-GENE
sudo apt-get -y install libboost-all-dev autoconf
Rscript -e 'install.packages("SKAT", repos="https://cran.us.r-project.org")'

# Install SAIGE
cd /opt
git clone https://github.com/weizhouUMICH/SAIGE
cd SAIGE
Rscript extdata/install_packages.R
R CMD INSTALL *.tar.gz

# Install HTSLIB
cd /opt
git clone https://github.com/samtools/htslib
cd htslib
autoheader
autoconf
./configure
make
make install

# Sync SAIGE input files
cp -r <mount-point>/* <local-dir>

アソシエーションテストの実行Run association tests

アソシエーションテストを並列化するには、パイプトランスフォーマーを使用します。To parallelize the association test, use the Pipe Transformer.

  • Command: SAIGEまたはSAIGEスクリプトを含む JSON 配列Command: A JSON array containing a SAIGE or SAIGE-GENE script
  • 入力フォーマッタ: .VCFInput formatter: VCF
  • 出力フォーマッタ: CSVOutput formatter: CSV
    • ヘッダーフラグ: trueHeader flag: true
    • 区切り記号: スペースDelimiter: space
import glow
import json

cmd = json.dumps(["bash", "-c", saige_script])
output_df = glow.transform("pipe", input_df, cmd=cmd, input_formatter='vcf', in_vcf_header=input_vcf,
                           output_formatter='csv', out_header='true', out_delimiter=' ')

入力データフレームは、.VCF から直接読み取ることも、または .VCF 行を含むデルタテーブルから読み取ることもできます。You can read the input DataFrame directly from a VCF or from a Delta table with VCF rows.

単一バリアントアソシエーションテスト (SAIGE)Single-variant association test (SAIGE)

次のセルは、パイプ処理される SAIGE スクリプトの例を示しています。The following cell shows an example SAIGE script to be piped. これらのオプションについては、単一バリアントのアソシエーションテストに関するドキュメントで説明されています。The options are explained in the single-variant association test docs.

#!/bin/sh
set -e

export tmpdir=$(mktemp -d -t vcf.XXXXXX)
cat - > ${tmpdir}/input.vcf
bgzip -c ${tmpdir}/input.vcf > ${tmpdir}/input.vcf.gz
tabix -p vcf ${tmpdir}/input.vcf.gz

Rscript /opt/SAIGE/extdata/step2_SPAtests.R \
    --vcfFile=${tmpdir}/input.vcf.gz \
    --vcfFileIndex=${tmpdir}/input.vcf.gz.tbi \
    --SAIGEOutputFile=${tmpdir}/output.txt \
    --sampleFile=<local-dir>/input/sampleIds.txt \
    --GMMATmodelFile=<local-dir>/step-1/output.rda \
    --varianceRatioFile=<local-dir>/step-1/output.varianceRatio.txt \
    --vcfField=GT \
    --chrom=22 \
    --minMAF=0.0001 \
    --minMAC=1 \
    --numLinesOutput=2 \
    >&2

cat ${tmpdir}/output.txt
rm -rf ${tmpdir}

リージョンベースのアソシエーションテスト (SAIGE- GENE) Region-based association test (SAIGE-GENE)

パイプを使用する前に、入力データフレームを region または gene でパーティション分割します。各パーティションには、並べ替えられた、個別の、関連する一連の .VCF 行が含まれています。Before piping, partition the input DataFrame by region or gene, with each partition containing the sorted, distinct, and relevant set of VCF rows. リージョンと対応するバリアントは、SAIGE-GENE スクリプトで参照されるグループファイル内のものと一致している必要があります。The regions and corresponding variants should match those in the group file referenced in the SAIGE-GENE script. 地域は、 Snpeff パイプラインの gene 注釈など、任意のソースから派生できます。Regions can be derived from any source, such as gene annotations from the SnpEff pipeline.

input_df = genotype_df.join(region_df, ["contigName", "start", "end"]) \
  .repartition("geneName") \
  .select("contigName", "start", "end", "referenceAllele", "alternateAlleles", "genotypes") \
  .sortWithinPartitions("contigName", "start")

次のセルは、パイプ処理される SAIGE GENE スクリプトの例を示しています。The following cell shows an example SAIGE-GENE script to be piped. これらのオプションについては、リージョンベースの関連付けのテストに関するドキュメントをご確認ください。The options are explained in the region-based association test docs.

#!/bin/sh
set -e

export tmpdir=$(mktemp -d -t vcf.XXXXXX)
uniq -w 100 - > ${tmpdir}/input.vcf
bgzip -c ${tmpdir}/input.vcf > ${tmpdir}/input.vcf.gz
tabix -p vcf ${tmpdir}/input.vcf.gz

Rscript /opt/SAIGE/extdata/step2_SPAtests.R \
    --vcfFile=${tmpdir}/input.vcf.gz \
    --vcfFileIndex=${tmpdir}/input.vcf.gz.tbi \
    --SAIGEOutputFile=${tmpdir}/output.txt \
    --groupFile=${tmpdir}/groupFile.txt \
    --sampleFile=<local-dir>/input/sampleIds.txt \
    --GMMATmodelFile=<local-dir>/step-1/output.rda \
    --varianceRatioFile=<local-dir>/step-1/output.varianceRatio.txt \
    --sparseSigmaFile=<local-dir>/step-1/output.varianceRatio.txt_relatednessCutoff_0.125_2000_randomMarkersUsed.sparseSigma.mtx \
    --vcfField=GT \
    --chrom=22 \
    --minMAF=0 \
    --minMAC=0.5 \
    --maxMAFforGroupTest=0.5 \
    --numLinesOutput=2 \
    >&2

cat ${tmpdir}/output.txt
rm -rf ${tmpdir}

パイプの後、出力データフレーム内の各 gene のアソシエーション結果を明確にします。After piping, disambiguate the association results for each gene in the output DataFrame.

from pyspark.sql import Window

window_spec = Window.partitionBy("Gene")
assoc_df = output_df.withColumn("numMarkerIDs", size(split("markerIDs", ";"))) \
  .withColumn("maxNumMarkerIDs", max("numMarkerIDs").over(window_spec)) \
  .filter("numMarkerIDs = maxNumMarkerIDs") \
  .drop("numMarkerIDs", "maxNumMarkerIDs") \
  .drop_duplicates(["Gene"])

ノートブックの例 Example notebooks

Null ロジスティック混合モデルが notebook に適合Null logistic mixed model fit notebook

ノートブックを入手Get notebook

SAIGE notebookSAIGE notebook

ノートブックを入手Get notebook

SAIGE-GENE notebookSAIGE-GENE notebook

ノートブックを入手Get notebook