alterlab-gnomad について
alterlab-gnomadは、ブラウザー、GraphQL API、ダウンロードデータを通じて、gnomADの集団変異情報と遺伝子制約情報を調べるスキルです。変異解釈、祖先集団別の頻度確認、遺伝子の優先順位付けに利用できます。
主な機能
- 01遺伝子・変異のGraphQL検索
- 02集団別アレル頻度
- 03遺伝子制約スコアの検索
- 04構造変異データの検索
- 05複数バージョンのデータセット
活用シーン
- 01候補変異の集団頻度評価
- 02祖先集団間での変異頻度比較
- 03LOEUFやpLIによる遺伝子の優先順位付け
- 04遺伝子内の構造変異の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-gnomadインストール後、Claude Code で/alterlab-gnomadを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/graphql_queries.mdvariant_interpretation.mdscripts/query_gnomad.py詳細
gnomAD データベース
概要
Genome Aggregation Database(gnomAD)は、大規模なシーケンスプロジェクトから集約された、一般に公開されているヒト遺伝的変異の最大のコレクションです。gnomAD v4 には、多様な祖先集団の730,947人分のエクソーム配列と76,215人分のゲノム配列が含まれています。現在のリリースは v4.1.1(2026年3月30日)で、遺伝子制約(ベイズ推定による LOEUF、chrX/chrY のカバレッジ)と LOFTEE フラグが更新されました。API のデータセット ID は引き続き gnomad_r4 です。集団ごとのアレル頻度、バリアントの影響アノテーション、遺伝子レベルの制約指標が提供され、遺伝的バリアントの臨床的意義を解釈するうえで不可欠です。
主なリソース:
- gnomAD ブラウザー:https://gnomad.broadinstitute.org/
- GraphQL API:https://gnomad.broadinstitute.org/api
- データのダウンロード:https://gnomad.broadinstitute.org/downloads
- ドキュメント:https://gnomad.broadinstitute.org/help
このスキルを使用する場面
次の場合に gnomAD を使用します。
- バリアント頻度の検索:一般集団において、あるバリアントがまれか、一般的か、あるいは存在しないかを確認する場合
- 病原性の評価:まれなバリアント(MAF < 1%)は疾患の原因候補です。gnomAD を使って、良性で一般的なバリアントを除外できます
- 機能喪失への耐性:pLI と LOEUF スコアを使って、遺伝子がタンパク質短縮バリアントを許容するか評価する場合
- 集団別の頻度:祖先集団(アフリカ系/アフリカ系アメリカ人、混合アメリカ系、アシュケナージ系ユダヤ人、東アジア系、フィンランド系、中東系、非フィンランド系ヨーロッパ人、南アジア系)ごとのアレル頻度を比較する場合
- ClinVar/ACMG によるバリアント分類:gnomAD の頻度データは、バリアント分類における BA1/BS1 エビデンスコードに使用されます
- 制約解析:ミスセンス変異または機能喪失変異が少ない遺伝子を特定する場合(z スコア、pLI、LOEUF)
該当しない場合
| シナリオ | 代わりに使用 |
|---|---|
| バリアントの臨床的意義/ACMG 分類の提出 | alterlab-clinvar |
| 腫瘍における体細胞変異の頻度 | alterlab-cbioportal |
| バリアントの影響予測(VEP)または遺伝子/転写産物モデル | alterlab-ensembl |
| 形質またはバリアントに関する GWAS 関連 | alterlab-gwas |
| 遺伝子の組織発現または eQTL | alterlab-gtex |
主な機能
1. gnomAD GraphQL API
gnomAD は https://gnomad.broadinstitute.org/api で利用できる GraphQL API を使用します。ほとんどのクエリでは、遺伝子または特定のゲノム位置を指定してバリアントを取得します。
利用可能なデータセット(DatasetId enum の値):
gnomad_r4— gnomAD v4(現在は v4.1.1)、GRCh38(推奨されるデフォルト。バリアントごとにexomeとgenomeの両方のブロックを返します。個別のgnomad_r4_genomesID はありません)gnomad_r4_non_ukb— UK Biobank サンプルを除く v4gnomad_r3— gnomAD v3 のゲノム、GRCh38(サブセット:gnomad_r3_non_cancer、_non_neuro、_non_topmed、_non_v2、_controls_and_biobanks)gnomad_r2_1— gnomAD v2、GRCh37(GRCh37 との互換性が必要な場合のみ使用。サブセット:_controls、_non_neuro、_non_cancer、_non_topmed)exac— 旧版の ExAC
(2026-09-23 に DatasetId enum をイントロスペクションして確認済みです。次のクエリで再確認してください。
{ __type(name: "DatasetId") { enumValues { name } } }。)
構造バリアントとコピー数バリアントでは、別の enum を使用します:structural_variants(dataset: gnomad_sv_r4)(v2 の SV:gnomad_sv_r2_1)および copy_number_variants(dataset: gnomad_cnv_r4)。
リファレンスゲノム:
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
symbol
variants(dataset: $dataset) {
variant_id
pos
ref
alt
consequence
genome {
af
ac
an
ac_hom
populations {
id
ac
an
ac_hom
}
}
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 protein-truncating variants.
# Note the parentheses: without them `and` binds tighter than `or`, so the AF
# filter would silently apply only to the consequence branch.
# Per-population frequency is af = ac / an (the populations entries expose
# ac/an, not af). Genome `af` here is absent for variants seen only in exomes,
# so fall back to exome af.
def variant_af(v):
g = (v.get("genome") or {}).get("af")
return g if g is not None else (v.get("exome") or {}).get("af", 1)
rare_ptvs = [
v for v in variants
if (v.get("lof") == "HC" or v.get("consequence") in ["stop_gained", "frameshift_variant"])
and variant_af(v) < 0.001
]
print(f"Found {len(rare_ptvs)} rare PTVs in {gene_data['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"
# On a single variant, consequence/lof are NOT top-level fields — they
# live under transcript_consequences[] (per transcript). Populations
# expose ac/an only; compute per-population af = ac / an.
query = """
query VariantDetails($variantId: String!, $dataset: DatasetId!) {
variant(variantId: $variantId, dataset: $dataset) {
variant_id
chrom
pos
ref
alt
rsids
genome {
af
ac
an
ac_hom
populations { id ac an ac_hom }
}
exome {
af
ac
an
ac_hom
populations { id ac an ac_hom }
}
transcript_consequences {
gene_symbol
major_consequence
lof
lof_flags
is_canonical
}
in_silico_predictors {
id
value
flags
}
}
}
"""
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-C") # BRCA1 missense, rs80357199
variant = result["data"]["variant"]
if variant:
genome_af = (variant.get("genome") or {}).get("af", "N/A")
exome_af = (variant.get("exome") or {}).get("af", "N/A")
# Pick the consequence from the canonical transcript when present.
tcs = variant.get("transcript_consequences") or []
canonical = next((t for t in tcs if t.get("is_canonical")), tcs[0] if tcs else {})
print(f"Variant: {variant['variant_id']}")
print(f" Consequence: {canonical.get('major_consequence')}")
print(f" Genome AF: {genome_af}")
print(f" Exome AF: {exome_af}")
print(f" LoF: {canonical.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
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['symbol']}")
print(f" pLI: {constraint['pLI']:.3f} (>0.9 = LoF intolerant)")
print(f" LOEUF: {constraint['oe_lof_upper']:.3f} (<0.45 = constrained, v4.1.1 guidance)")
print(f" Obs/Exp LoF: {constraint['oe_lof']:.3f}")
print(f" Missense Z: {constraint['mis_z']:.3f}")
制約スコアの解釈:
| スコア | 範囲 | 意味 |
|---|---|---|
pLI | 0–1 | LoF に対する不耐性の確率。>0.9 は非常に不耐性 |
LOEUF | 0–∞ | LoF の観測値/予測値の上限。v4.1.1 では <0.45 が制約あり(以前の <0.35 という閾値は v2 で較正されたもので、v4 には厳しすぎます) |
oe_lof | 0–∞ | 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
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"
# structural_variants requires a dataset argument (gnomad_sv_r4).
query = """
query SVsByGene($gene_symbol: String!, $dataset: StructuralVariantDatasetId!) {
gene(gene_symbol: $gene_symbol, reference_genome: GRCh38) {
structural_variants(dataset: $dataset) {
variant_id
type
chrom
pos
end
af
ac
an
}
}
}
"""
response = requests.post(
url,
json={"query": query, "variables": {"gene_symbol": gene_symbol, "dataset": "gnomad_sv_r4"}}
)
return response.json()
クエリのワークフロー
ワークフロー 1:バリアントの病原性評価
-
集団頻度を確認する — そのバリアントは病原性を示すほどまれですか?
- 劣性疾患では gnomAD AF < 1%、優性疾患では < 0.1% を使用します
- 祖先集団別の頻度を確認します(全体ではまれなバリアントでも、ある集団では一般的な場合があります)
-
機能的影響を評価する — LoF バリアントは事前確率が最も高いものです
lofフィールドを確認します:HC= 信頼度の高い LoF、LC= 信頼度の低い LoF- 「NAGNAG_SITE」や「PHYLOCSF_WEAK」などの問題がないか、
lof_flagsを確認します
-
ACMG 基準を適用する:
- BA1:AF > 5% → 単独で良性
- BS1:AF > 疾患有病率の閾値 → 良性を支持
- PM2:gnomAD に存在しない、または非常にまれ → 中等度の病原性
ワークフロー 2:希少疾患における遺伝子の優先順位付け
- 候補遺伝子の制約スコアをクエリします
- LOEUF < 0.45(gnomAD v4.1.1 の推奨値)で絞り込みます。古い文献との照合が必要な場合は、pLI > 0.9 を使用します
- 遺伝子内で観測された LoF バリアントと照合します
- ClinVar および疾患データベースと統合します
ワークフロー 3:集団遺伝学研究
- GWAS または臨床データから注目するバリアントを特定します
- 集団ごとの頻度をクエリします
- 祖先集団間の頻度差を比較します
- 特定の創始者集団における濃縮を検定します
ベストプラクティス
- 最新データには gnomAD v4(gnomad_r4)を使用します。v2(gnomad_r2_1)は GRCh37 との互換性が必要な場合にのみ使用します
- null の応答を適切に扱います:gnomAD で観測されないバリアントが必ずしも病原性とは限りません。存在しないこと自体が有用な情報です
- エクソームデータとゲノムデータを区別します:ゲノムデータはカバレッジがより均一です。エクソームデータは規模が大きい一方、カバレッジに欠損がある場合があります
- GraphQL クエリのレート制限を守ります:リクエスト間に遅延を入れ、可能な場合はクエリをまとめて送信します
- ホモ接合体数(
ac_hom)は劣性疾患の解析に関係します - 遺伝子制約の評価には pLI より LOEUF が推奨されます(サンプルサイズの影響を受けにくいため)。v4.1.1 ではベイズ(ガンマ事後分布)フレームワークで算出され、chrX/chrY にも制約評価が拡張されているため、値は v4.1 とは異なります。使用したバージョンを記録してください
データアクセス
- ブラウザー:https://gnomad.broadinstitute.org/ — バリアントと遺伝子をインタラクティブに閲覧
- GraphQL API:https://gnomad.broadinstitute.org/api — プログラムによるアクセス
- ダウンロード:https://gnomad.broadinstitute.org/downloads — VCF、Hail テーブル、制約テーブル
- Google Cloud:gs://gcp-public-data--gnomad/
追加リソース
- gnomAD のウェブサイト:https://gnomad.broadinstitute.org/
- gnomAD のブログ:https://gnomad.broadinstitute.org/news
- ダウンロード:https://gnomad.broadinstitute.org/downloads
- API エクスプローラー:https://gnomad.broadinstitute.org/api(インタラクティブな GraphiQL)
- 制約のドキュメント:https://gnomad.broadinstitute.org/help/constraint
- 引用文献:Karczewski KJ et al. (2020) Nature. PMID: 32461654; Chen S et al. (2024) Nature. PMID: 38057664
- GitHub:https://github.com/broadinstitute/gnomad-browser
スクリプト
scripts/query_gnomad.py — gnomAD GraphQL API 用の実行可能なヘルパーです(キー不要)。インラインの PEP 723 依存関係が含まれているため、requests を自動インストールするには、uv run でファイルを直接実行してください(uv run python ... ではなく)。
uv run scripts/query_gnomad.py variant 17-43094692-G-C --dataset gnomad_r4
uv run scripts/query_gnomad.py constraint BRCA1 --genome GRCh38