Saige und Saige-Gene (mit Pipe- Transformator) SAIGE and SAIGE-GENE (using Pipe Transformer)

Saige ist ein Befehlszeilen Tool, das in R für die Durchführung von Tests der genetische Zuordnung in den Daten der Biobank-Skala geschrieben wurde.SAIGE is a command-line tool written in R for performing genetic association tests on biobank-scale data. Führen Sie die Einzel Variante Zuordnungs Testmethode Saige und die Regions basierte Zuordnungs Testmethode Saige-Gene auf Databricks Runtime für Genomics mit dem pipetransformator von Glüh ungen aus.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.

Erstellen eines Saige -Clusters Create a SAIGE cluster

Installieren Sie htlib sowie das Saige-Paket, dessen Abhängigkeiten und zugehörige Eingabedateien auf jedem Knoten im Cluster mithilfe eines Init-Skripts.Install HTSLib as well as the SAIGE package, its dependencies, and associated input files on every node in the cluster using an init script. Es wird empfohlen, einen Bereitstellungspunkt zum Speichern und Herunterladen dieser Dateien aus dem cloudspeicher mit der fuse-Bereitstellung zu erstellen.We recommend creating a mount point to store and download these files from cloud storage with the FUSE mount. Ersetzen Sie die Werte im Skript durch den Einstellungspunkt und das lokale Verzeichnis.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>

Ausführen von ZuordnungstestsRun association tests

Verwenden Sie den pipetransformator, um den Zuordnungs Test zu parallelisieren.To parallelize the association test, use the Pipe Transformer.

  • Befehl: ein JSON-Array, das ein Saige -oder Saige-gen- Skript enthältCommand: A JSON array containing a SAIGE or SAIGE-GENE script
  • Eingabeformatierer: VCFInput formatter: VCF
  • Ausgabe Formatierer: CSVOutput formatter: CSV
    • Header Kennzeichen: trueHeader flag: true
    • Trennzeichen: LeerzeichenDelimiter: 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=' ')

Sie können den Eingabe dataframe direkt aus einem VCF oder aus einer Delta Tabelle mit vcf-Zeilen lesen.You can read the input DataFrame directly from a VCF or from a Delta table with VCF rows.

Einvariant-Zuordnungs Test (Saige)Single-variant association test (SAIGE)

In der folgenden Zelle wird ein Beispiel für ein Saige-Skript gezeigt, das weitergeleitet werden sollThe following cell shows an example SAIGE script to be piped. Die Optionen werden in der eindimensionalenZuordnungs Test-Dokumentation erläutert.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}

Regions basierter Zuordnungs Test (Saige- Gene) Region-based association test (SAIGE-GENE)

Vor der Weiterleitung partitionieren Sie den Eingabedaten Rahmen nach Region oder Gene, wobei jede Partition den sortierten, eindeutigen und relevanten Satz von VCF-Zeilen enthält.Before piping, partition the input DataFrame by region or gene, with each partition containing the sorted, distinct, and relevant set of VCF rows. Die Regionen und entsprechenden Varianten sollten mit denen in der Gruppendatei übereinstimmen, auf die im Skript Saige-Gene verwiesen wird.The regions and corresponding variants should match those in the group file referenced in the SAIGE-GENE script. Regionen können aus jeder beliebigen Quelle abgeleitet werden, z. b. aus der snpeer-Pipeline.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")

In der folgenden Zelle wird ein Beispiel für ein Saige-gen-Skript gezeigt, das weitergeleitet werden soll.The following cell shows an example SAIGE-GENE script to be piped. Die Optionen werden in der Testdokumentation für Regions basierteZuordnungen erläutert.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}

Nach der Weiterleitung sollten Sie die Zuordnungs Ergebnisse für die einzelnen Daten im Ausgabedaten Rahmen eindeutig machen.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"])

Beispiel Notebooks Example notebooks

NULL logistisches gemischtes Modell passend NotebookNull logistic mixed model fit notebook

Notebook abrufenGet notebook

Saige NotebookSAIGE notebook

Notebook abrufenGet notebook

Saige-gen-NotebookSAIGE-GENE notebook

Notebook abrufenGet notebook