mcpField
G
gnomad-database

gnomad-database

github.com/leonchaoxデータ・データベース99470 回インストール15 週間前に更新
リポジトリ

gnomad-database について

遺伝学や臨床変異解釈向けの gnomAD データベース活用スキルです。集団頻度、変異注釈、遺伝子制約指標へのアクセス方法を説明し、変異評価や遺伝子の優先順位付けに利用できます。

主な機能

  1. 01遺伝子またはゲノム位置で変異を検索
  2. 02集団別のアレル頻度を比較
  3. 03遺伝子制約スコアを取得
  4. 04構造変異を検索
  5. 05ブラウザー、API、ダウンロードでデータにアクセス

活用シーン

  1. 01病原性候補変異の集団頻度を確認
  2. 02pLI や LOEUF による希少疾患候補遺伝子の優先順位付け
  3. 03祖先集団間の変異頻度を比較
  4. 04遺伝子に重なる構造変異を解析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/leonchaox/qinyan-academic-skills --skill gnomad-database

インストール後、Claude Code で/gnomad-databaseを入力して読み込まれたか確認します。

同梱ファイルreferences/graphql_queries.mdreferences/variant_interpretation.md

詳細

gnomAD データベース

概要

Genome Aggregation Database(gnomAD)は、大規模なシーケンシングプロジェクトから集約された、一般公開されている最大のヒト遺伝的変異データベースです。gnomAD v4 には、多様な祖先集団に属する730,947人のエクソーム配列と76,215人のゲノム配列が含まれています。集団内のアレル頻度、バリアントの影響に関する注釈、遺伝子レベルの制約指標を提供し、遺伝的バリアントの臨床的意義を解釈するうえで欠かせない情報源となっています。

主なリソース:

このスキルを使用する場面

次のような場合に gnomAD を使用します。

  • バリアント頻度の検索:バリアントが一般集団において稀か、一般的か、または存在しないかを確認する場合
  • 病原性の評価:稀なバリアント(MAF < 1%)は疾患の原因となる候補です。gnomAD は、良性の一般的なバリアントを除外するのに役立ちます
  • 機能喪失に対する非耐性:pLI および LOEUF スコアを用いて、遺伝子がタンパク質短縮バリアントに耐性を持つかどうかを評価する場合
  • 集団別の頻度:祖先集団間でアレル頻度を比較する場合(アフリカ系/アフリカ系アメリカ人、混合アメリカ系、アシュケナージ系ユダヤ人、東アジア系、フィンランド系、中東系、非フィンランド系ヨーロッパ人、南アジア系)
  • ClinVar/ACMG によるバリアント分類:gnomAD の頻度データは、バリアント分類における BA1/BS1 エビデンスコードに反映されます
  • 制約解析:ミスセンスまたは機能喪失変異が少ない遺伝子を特定する場合(z スコア、pLI、LOEUF)

主な機能

1. gnomAD GraphQL API

gnomAD は https://gnomad.broadinstitute.org/api からアクセスできる GraphQL API を使用しています。多くのクエリでは、遺伝子または特定のゲノム位置からバリアントを取得します。

利用可能なデータセット:

  • gnomad_r4 — gnomAD v4 エクソーム(推奨されるデフォルト、GRCh38)
  • gnomad_r4_genomes — gnomAD v4 ゲノム(GRCh38)
  • gnomad_r3 — gnomAD v3 ゲノム(GRCh38)
  • gnomad_r2_1 — gnomAD v2 エクソーム(GRCh37)

参照ゲノム:

  • GRCh38 — v3/v4 のデフォルト
  • GRCh37 — v2 用
2. 遺伝子ごとのバリアント検索
import requests

def query_gnomad_gene(gene_symbol, dataset="gnomad_r4", reference_genome="GRCh38"):
    """Fetch variants in a gene from gnomAD."""
    url = "https://gnomad.broadinstitute.org/api"

    query = """
    query GeneVariants($gene_symbol: String!, $dataset: DatasetId!, $reference_genome: ReferenceGenomeId!) {
      gene(gene_symbol: $gene_symbol, reference_genome: $reference_genome) {
        gene_id
        gene_symbol
        variants(dataset: $dataset) {
          variant_id
          pos
          ref
          alt
          consequence
          genome {
            af
            ac
            an
            ac_hom
            populations {
              id
              ac
              an
              af
            }
          }
          exome {
            af
            ac
            an
            ac_hom
          }
          lof
          lof_flags
          lof_filter
        }
      }
    }
    """

    variables = {
        "gene_symbol": gene_symbol,
        "dataset": dataset,
        "reference_genome": reference_genome
    }

    response = requests.post(url, json={"query": query, "variables": variables})
    return response.json()

# Example
result = query_gnomad_gene("BRCA1")
gene_data = result["data"]["gene"]
variants = gene_data["variants"]

# Filter to rare PTVs
rare_ptvs = [
    v for v in variants
    if v.get("lof") == "LC" or v.get("consequence") in ["stop_gained", "frameshift_variant"]
    and v.get("genome", {}).get("af", 1) < 0.001
]
print(f"Found {len(rare_ptvs)} rare PTVs in {gene_data['gene_symbol']}")
3. 特定のバリアントの検索
import requests

def query_gnomad_variant(variant_id, dataset="gnomad_r4"):
    """Fetch details for a specific variant (e.g., '1-55516888-G-GA')."""
    url = "https://gnomad.broadinstitute.org/api"

    query = """
    query VariantDetails($variantId: String!, $dataset: DatasetId!) {
      variant(variantId: $variantId, dataset: $dataset) {
        variant_id
        chrom
        pos
        ref
        alt
        genome {
          af
          ac
          an
          ac_hom
          populations {
            id
            ac
            an
            af
          }
        }
        exome {
          af
          ac
          an
          ac_hom
          populations {
            id
            ac
            an
            af
          }
        }
        consequence
        lof
        rsids
        in_silico_predictors {
          id
          value
          flags
        }
        clinvar_variation_id
      }
    }
    """

    response = requests.post(
        url,
        json={"query": query, "variables": {"variantId": variant_id, "dataset": dataset}}
    )
    return response.json()

# Example: query a specific variant
result = query_gnomad_variant("17-43094692-G-A")  # BRCA1 missense
variant = result["data"]["variant"]

if variant:
    genome_af = variant.get("genome", {}).get("af", "N/A")
    exome_af = variant.get("exome", {}).get("af", "N/A")
    print(f"Variant: {variant['variant_id']}")
    print(f"  Consequence: {variant['consequence']}")
    print(f"  Genome AF: {genome_af}")
    print(f"  Exome AF: {exome_af}")
    print(f"  LoF: {variant.get('lof')}")
4. 遺伝子の制約スコア

gnomAD の制約スコアは、遺伝子が想定値と比較してどの程度変異に耐性を持つかを評価します。

import requests

def query_gnomad_constraint(gene_symbol, reference_genome="GRCh38"):
    """Fetch constraint scores for a gene."""
    url = "https://gnomad.broadinstitute.org/api"

    query = """
    query GeneConstraint($gene_symbol: String!, $reference_genome: ReferenceGenomeId!) {
      gene(gene_symbol: $gene_symbol, reference_genome: $reference_genome) {
        gene_id
        gene_symbol
        gnomad_constraint {
          exp_lof
          exp_mis
          exp_syn
          obs_lof
          obs_mis
          obs_syn
          oe_lof
          oe_mis
          oe_syn
          oe_lof_lower
          oe_lof_upper
          lof_z
          mis_z
          syn_z
          pLI
        }
      }
    }
    """

    response = requests.post(
        url,
        json={"query": query, "variables": {"gene_symbol": gene_symbol, "reference_genome": reference_genome}}
    )
    return response.json()

# Example
result = query_gnomad_constraint("KCNQ2")
gene = result["data"]["gene"]
constraint = gene["gnomad_constraint"]

print(f"Gene: {gene['gene_symbol']}")
print(f"  pLI:   {constraint['pLI']:.3f}  (>0.9 = LoF intolerant)")
print(f"  LOEUF: {constraint['oe_lof_upper']:.3f}  (<0.35 = highly constrained)")
print(f"  Obs/Exp LoF: {constraint['oe_lof']:.3f}")
print(f"  Missense Z:  {constraint['mis_z']:.3f}")

制約スコアの解釈:

スコア範囲意味
pLI0–1LoF に対する非耐性の確率。>0.9 は非常に非耐性
LOEUF0–∞LoF の観測値/期待値の上限。<0.35 は制約あり
oe_lof0–∞LoF バリアントの観測値/期待値の比率
mis_z−∞~∞ミスセンス制約の z スコア。>3.09 は制約あり
syn_z−∞~∞同義置換の z スコア(対照値。0 に近い値が望ましい)
5. 集団頻度の解析
import requests
import pandas as pd

def get_population_frequencies(variant_id, dataset="gnomad_r4"):
    """Extract per-population allele frequencies for a variant."""
    url = "https://gnomad.broadinstitute.org/api"

    query = """
    query PopFreqs($variantId: String!, $dataset: DatasetId!) {
      variant(variantId: $variantId, dataset: $dataset) {
        variant_id
        genome {
          populations {
            id
            ac
            an
            af
            ac_hom
          }
        }
      }
    }
    """

    response = requests.post(
        url,
        json={"query": query, "variables": {"variantId": variant_id, "dataset": dataset}}
    )
    data = response.json()
    populations = data["data"]["variant"]["genome"]["populations"]

    df = pd.DataFrame(populations)
    df = df[df["an"] > 0].copy()
    df["af"] = df["ac"] / df["an"]
    df = df.sort_values("af", ascending=False)
    return df

# Population IDs in gnomAD v4:
# afr = African/African American
# ami = Amish
# amr = Admixed American
# asj = Ashkenazi Jewish
# eas = East Asian
# fin = Finnish
# mid = Middle Eastern
# nfe = Non-Finnish European
# sas = South Asian
# remaining = Other
6. 構造バリアント(gnomAD-SV)

gnomAD には構造バリアントのデータセットも含まれています。

import requests

def query_gnomad_sv(gene_symbol):
    """Query structural variants overlapping a gene."""
    url = "https://gnomad.broadinstitute.org/api"

    query = """
    query SVsByGene($gene_symbol: String!) {
      gene(gene_symbol: $gene_symbol, reference_genome: GRCh38) {
        structural_variants {
          variant_id
          type
          chrom
          pos
          end
          af
          ac
          an
        }
      }
    }
    """

    response = requests.post(url, json={"query": query, "variables": {"gene_symbol": gene_symbol}})
    return response.json()

クエリのワークフロー

ワークフロー 1:バリアントの病原性評価
  1. 集団内頻度を確認する — バリアントは病原性を示すほど稀ですか?

    • 劣性疾患では gnomAD AF < 1%、優性疾患では < 0.1% を使用します
    • 祖先集団ごとの頻度を確認します(全体では稀なバリアントが、ある集団では一般的な場合があります)
  2. 機能的影響を評価する — LoF バリアントは事前確率が最も高いバリアントです

    • lof フィールドを確認します。HC = 高信頼度 LoF、LC = 低信頼度
    • 「NAGNAG_SITE」や「PHYLOCSF_WEAK」などの問題がないか、lof_flags を確認します
  3. ACMG 基準を適用する:

    • BA1:AF > 5% → 良性の単独根拠
    • BS1:AF > 疾患有病率のしきい値 → 良性を支持
    • PM2:gnomAD に存在しない、または非常に稀 → 中程度の病原性根拠
ワークフロー 2:希少疾患における遺伝子の優先順位付け
  1. 候補遺伝子の制約スコアを検索します
  2. pLI > 0.9(ハプロ不全)または LOEUF < 0.35 の遺伝子に絞り込みます
  3. 遺伝子内で観察された LoF バリアントと照合します
  4. ClinVar および疾患データベースの情報を統合します
ワークフロー 3:集団遺伝学研究
  1. GWAS または臨床データから対象のバリアントを特定します
  2. 集団ごとの頻度を照会します
  3. 祖先集団間の頻度の違いを比較します
  4. 特定の創始者集団における濃縮を検証します

ベストプラクティス

  • 最新のデータには gnomAD v4 (gnomad_r4) を使用してください。 v2 (gnomad_r2_1) は GRCh37 との互換性が必要な場合のみ使用してください
  • null の応答を適切に扱ってください。 gnomAD で観察されないバリアントが、必ずしも病原性を持つとは限りません。不在も有益な情報です
  • エクソームデータとゲノムデータを区別してください。 ゲノムデータはカバレッジがより均一です。エクソームデータは規模が大きい一方、カバレッジに欠損がある場合があります
  • GraphQL クエリのレート制限を守ってください。 リクエストの間隔を空け、可能な場合はクエリをまとめてください
  • ホモ接合体の数(ac_hom)は、劣性疾患の解析に関係します
  • 遺伝子の制約度には pLI より LOEUF が適しています(サンプルサイズの影響を受けにくいため)

データへのアクセス

追加リソース

コメント