tooluniverse-variant-to-mechanism について
遺伝学研究者向けのバリアント機序分析スキルです。遺伝的バリアントから調節環境、標的遺伝子、分子経路、疾患表現型までを追跡し、複数データベースの証拠を統合して機序の根拠を評価します。
主な機能
- 01バリアントと調節環境の注釈
- 02eQTLと座位から遺伝子への証拠による標的特定
- 03遺伝子機能と分子経路の分析
- 04疾患表現型と遺伝子証拠の関連付け
- 05因果機序の構築と証拠評価
活用シーン
- 01GWAS座位の想定機序を追跡
- 02非コードバリアントの影響遺伝子を特定
- 03バリアントと疾患表現型の関連を調査
- 04候補標的遺伝子と証拠の強さを比較
MCP 対応
ToolUniverseのツールを使って、バリアント、遺伝子調節、経路、疾患のデータベースを検索し、機序分析の証拠をまとめます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mims-harvard/ tooluniverse --skill tooluniverse-variant-to-mechanismインストール後、Claude Code で/tooluniverse-variant-to-mechanismを入力して読み込まれたか確認します。
詳細
バリアントからメカニズムを解析するスキル
遺伝的バリアントから疾患メカニズムまでの因果関係を、調節環境、標的遺伝子、分子経路、表現型への影響を含めて追跡します。3つのエビデンス層(調節、分子、疾患)にまたがる7つ以上のデータベースを統合し、エビデンスレベルを付与したメカニズムモデルを構築します。
重要:ツールの呼び出しでは、必ず英語の用語を使用してください。回答はユーザーの言語で行ってください。
推測せず、検索する
科学的事実に確信が持てない場合は、記憶に頼って推論するのではなく、まずデータベース(PubMed、UniProt、ChEMBL、ClinVar など)を検索してください。データベースで検証した回答は、推測よりも常に信頼できます。
このスキルを使用する場面
以下のような依頼があった場合に使用してください。
- 「rs7903146 はどのようにして 2 型糖尿病を引き起こすのか?」と尋ねられた場合
- GWAS バリアントから生物学的メカニズムまで追跡したい場合
- 非コードバリアントと下流の経路を結び付ける必要がある場合
- 「このバリアントはどの遺伝子に影響し、どのような経路を介するのか?」と尋ねられた場合
- 調節バリアントのメカニズムを説明するストーリーを求められた場合
- GWAS 座位の原因遺伝子を特定する必要がある場合
- 「このイントロン SNP の機能的影響は何か?」と尋ねられた場合
対象外(代わりに他のスキルを使用してください):
- コーディングバリアントの病原性/ACMG 分類 ->
tooluniverse-variant-interpretationを使用 - メカニズムを扱わない純粋な調節エレメントの注釈 ->
tooluniverse-regulatory-genomicsを使用 - メカニズムを扱わない純粋な GWAS ヒット一覧 ->
tooluniverse-gwas-snp-interpretationを使用 - 薬理ゲノミクスのバリアント注釈 ->
tooluniverse-pharmacogenomicsを使用 - バリアントの文脈を伴わない遺伝子と疾患の関連 ->
tooluniverse-gene-disease-associationを使用
入力パラメーター
| パラメーター | 必須 | 説明 | 例 |
|---|---|---|---|
| variant | はい | rsID またはゲノム座標 | "rs7903146" または "10:112998590:C:T" |
| trait | いいえ | 疾患/形質の文脈(優先順位付けに役立ちます) | "type 2 diabetes" |
| tissue | いいえ | eQTL/発現を調べる対象組織 | "pancreas" |
ワークフローの概要
フェーズ 1 バリアントの特性評価(VEP、集団頻度、CADD) -> フェーズ 2 調節環境(GWAS、RegulomeDB、ENCODE、cCRE) -> フェーズ 3 標的遺伝子の特定(GTEx eQTL、OpenTargets L2G) -> フェーズ 4 遺伝子機能と経路(STRING、Reactome、GO) -> フェーズ 5 疾患との関連(OpenTargets、GenCC、DisGeNET) -> フェーズ 6 メカニズムの統合(因果関係、エビデンス評価、確信度のスコアリング)
フェーズ 1:バリアントの特性評価
バリアントの識別情報を解決し、基本的な注釈を取得します。
from tooluniverse import ToolUniverse
tu = ToolUniverse()
tu.load_tools()
# Step 1: VEP annotation
vep = tu.tools.EnsemblVEP_annotate_rsid(variant_id="rs7903146")
# NOTE: param is `variant_id`, NOT `rsid`
# Response format variable: list, {data, metadata}, or {error} -- handle all three
# Extract: consequence_type, gene, chromosome, position, alleles
# Step 2: Population frequency and pathogenicity scores
myvar = tu.tools.MyVariant_query_variants(
query="rs7903146", # NOTE: param is `query`, NOT `variant_id`
fields="dbsnp,gnomad_genome,cadd,clinvar"
)
# Returns: {hits: [{_id, dbsnp, gnomad_genome: {af: {af, ...ancestry}}, cadd: {phred}, clinvar}]}
# gnomAD AF: frequency in general population
# CADD phred: >=20 = top 1% deleterious, >=30 = top 0.1%
# Step 3: Confirm gene context
gwas_snp = tu.tools.gwas_search_snps(rs_id="rs7903146")
# Returns: SNP location, mapped genes, functional class
# Optional one-call shortcut (when a GRCh38 coordinate is available):
favor = tu.tools.FAVOR_annotate_variant(variant="19-44908822-C-T")
# Returns freq (BRAVO/gnomAD-by-ancestry/1000G) + CADD/SIFT/PolyPhen/AlphaMissense
# + conservation + ClinVar + regulatory annotation in a single call — a fast way to
# populate most of Phase 1 (and the regulatory block of Phase 2) before drilling in.
フェーズ 2:調節環境
バリアントの調節環境を評価します。
2a:GWAS 関連
# All trait associations for this variant
gwas = tu.tools.gwas_search_associations(rs_id="rs7903146", size=50)
# Returns: {data: [{disease_trait, p_value, or_per_copy_number, beta, study_accession}]}
# NOTE: Use gwas_search_associations, NOT gwas_get_associations_for_trait (BROKEN)
2b:RegulomeDB スコア
regulome = tu.tools.RegulomeDB_query_variant(rsid="rs7903146")
# Returns: {status, data: {score/ranking, probability, features}}
# Score 1a-2a = strong regulatory evidence
# Uses GRCh38 (NOT hg19)
2c:ENCODE クロマチン環境
# Check enhancer (H3K27ac), promoter (H3K4me3), and accessibility in disease-relevant tissue
encode_h3k27ac = tu.tools.ENCODE_search_histone_experiments(
histone_mark="H3K27ac", biosample_term_name="pancreas", limit=10)
encode_h3k4me3 = tu.tools.ENCODE_search_histone_experiments(
histone_mark="H3K4me3", biosample_term_name="pancreas", limit=10)
encode_atac = tu.tools.ENCODE_search_chromatin_accessibility(
biosample_term_name="pancreas", limit=10)
2d:cCRE とのオーバーラップ(座標が既知の場合)
# Check candidate cis-regulatory elements
ccres = tu.tools.UCSC_get_encode_cCREs(
chrom="chr10",
start=112998000,
end=112999000
)
# Returns: cCRE type (PLS=promoter, pELS=proximal enhancer, dELS=distal enhancer, CTCF-only)
2e:OLS による形質の解決(形質が指定されている場合)
# Resolve trait to ontology ID for downstream tools
ols = tu.tools.ols_search_terms(query="type 2 diabetes", ontology="efo")
# Returns: {status, data: [{iri, label, short_form, ontology_name}]}
# For OpenTargets: use MONDO_0005148 for T2D (NOT EFO_0001360)
フェーズ 3:標的遺伝子の特定
バリアントが調節する遺伝子を特定します。ここが重要なつながりです。
3a:GTEx eQTL(主要なエビデンス)
# Find eQTL associations for the nearest gene
eqtls = tu.tools.GTEx_query_eqtl(gene_symbol="TCF7L2", size=100)
# Returns: {status, data: [{snpId, geneSymbol, tissueSiteDetailId, pValue, nes}]}
# Filter for the specific rsID in the results
# NES > 0: alt allele increases expression; NES < 0: decreases
# Check expression levels to prioritize tissues
expression = tu.tools.GTEx_get_median_gene_expression(gene_symbol="TCF7L2")
# Returns: median TPM across GTEx tissues
# IMPORTANT: GTEx uses v8 data (v10 endpoints may return empty)
3b:OpenTargets Locus-to-Gene(L2G)
# Get credible sets and L2G predictions
credible = tu.tools.OpenTargets_get_variant_credible_sets(
variantId="10_112998590_C_T" # chr_pos_ref_alt format
)
# Returns: credible set membership, L2G scores for causal genes
# L2G > 0.5: high confidence causal gene
# L2G 0.1-0.5: moderate confidence
3c:最寄りの遺伝子のマッピング
# Get gene details for the candidate target
gene_info = tu.tools.MyGene_query_genes(
query="symbol:TCF7L2",
species="human",
fields="symbol,ensembl.gene,entrezgene,name,summary,go",
size=5
)
# Extract Ensembl ID for OpenTargets queries
# Filter by exact symbol match (first hit may not be correct gene)
標的遺伝子の特定について考える方法
非コード変異では、最も近い遺伝子が原因遺伝子とは限りません。調節エレメントは、介在する遺伝子を完全に飛び越えて、数百キロベース離れた領域に作用することがあります。ツールを調べる前に、どの遺伝子が標的である可能性が高いかを考えましょう。
- **疾患に関連する組織での eQTL は最も強い証拠です。**ある変異が膵臓で Gene X の eQTL であり、形質が糖尿病であれば、これは直接的な機序上の関連です。関連のない組織での eQTL は証拠として弱くなりますが、それでも有用な情報です。
- L2G スコアは複数のシグナル(距離、クロマチン相互作用、eQTL)を統合し、単一の予測値にします。L2G が 0.5 を超える場合は信頼度が高いものの、実験的な証明ではなく、計算による予測です。eQTL データと組み合わせましょう。両方の結果が一致すれば、信頼度は高くなります。
- **近接性だけでは信頼できません。**多くの GWAS 座位では、原因遺伝子はリード SNP から 2~3 個離れた遺伝子です。eQTL と L2G を確認せずに「最も近い遺伝子」と決めつけてはいけません。
- 複数の候補遺伝子に根拠がある場合は、根拠の強さに応じて順位を付け、すべて提示しましょう。実際に結論が不確かな場合もあります。
フェーズ 4:遺伝子の機能と経路
標的遺伝子を特定したら、分子機能を明らかにします。
# STRING PPI network — NOTE: param is `identifiers` (string), NOT `protein_ids`
ppi = tu.tools.STRING_get_interaction_partners(
identifiers="TCF7L2", species=9606, required_score=700)
# STRING functional enrichment (GO, KEGG, Reactome) — needs a gene SET,
# newline-separated; results are in data["enrichments"]
enrichment = tu.tools.STRING_get_enrichment(
identifiers="TCF7L2\nCTNNB1\nAPC\nLEF1", species=9606)
# Reactome pathway enrichment — space-separated STRING, NOT array
reactome = tu.tools.ReactomeAnalysis_pathway_enrichment(
identifiers="TCF7L2 CTNNB1 APC")
# UniProt function (returns list of strings, NOT dict)
uniprot_func = tu.tools.UniProt_get_function_by_accession(accession="Q9NQB0")
# PANTHER GO enrichment — GO:0008150=BP, GO:0003674=MF, GO:0005575=CC
panther = tu.tools.PANTHER_enrichment(
gene_list="TCF7L2,CTNNB1,APC,LEF1", organism=9606,
annotation_dataset="GO:0008150")
フェーズ 5:疾患との関連
分子機序を疾患の表現型と関連付けます。
# Disease associations for target gene (requires Ensembl ID)
ot_diseases = tu.tools.OpenTargets_get_diseases_phenotypes_by_target_ensembl(
ensemblId="ENSG00000148737")
# Specific gene-disease evidence (both IDs must be pre-resolved)
ot_evidence = tu.tools.OpenTargets_target_disease_evidence(
ensemblId="ENSG00000148737", efoId="MONDO_0005148")
# GenCC curated validity (Definitive/Strong/Moderate/Limited/Disputed/Refuted)
gencc = tu.tools.GenCC_search_gene(gene_symbol="TCF7L2")
# DisGeNET scored associations (requires DISGENET_API_KEY)
disgenet = tu.tools.DisGeNET_search_gene(gene="TCF7L2", limit=20)
# OpenTargets GWAS studies — use MONDO IDs, NOT EFO
ot_gwas = tu.tools.OpenTargets_search_gwas_studies_by_disease(
diseaseIds=["MONDO_0005148"])
フェーズ 6:機序の統合
因果連鎖の構築と評価方法
目指すのは、明示的な連鎖です。バリアント -> タンパク質または発現の変化 -> 経路の変化 -> 疾患表現型。 各矢印は、証拠を必要とするつながりです。すべてのつながりが裏付けられた連鎖は強固です。つながりが欠けている連鎖は、結論ではなく仮説です。
まず、バリアントの位置を確認します。 コーディング領域ですか、それとも非コーディング領域ですか? コーディングバリアントはタンパク質を直接変化させます。ミスセンスバリアントは1つのアミノ酸を置き換え、ナンセンスバリアントはタンパク質を短縮します。非コーディングバリアントはREGULATIONを変化させます。つまり、作られるタンパク質の量に影響し、タンパク質自体を変化させるわけではありません。この違いによって、分析の進め方全体が決まります。
コーディングバリアントの場合、次の点を確認します。この位置は種を超えて保存されていますか? 機能ドメイン(活性部位、結合界面、膜貫通ヘリックス)にありますか? 保存された活性部位の残基にあるバリアントは、無秩序ループにあるものより病原性である可能性が高いです。既存の評価についてはClinVarとCADDを確認しますが、構造的な背景については自分でも考察してください。
非コーディングバリアントの場合、次の点を確認します。このバリアントと近傍遺伝子を結び付けるeQTLはありますか? RegulomeDBとENCODEの情報によると、このバリアントはTFBS、エンハンサー、またはプロモーターにありますか? 疾患に関連する組織で、オープンクロマチン領域にあり、eQTLも確認されるバリアントには、明確な調節メカニズムがあります。eQTLがなく、遺伝子砂漠にあるバリアントは解釈がはるかに難しく、この不確実性を明記してください。
それぞれのつながりを個別に評価します。 連鎖内の各矢印について、証拠は何か、再現性はあるか、適切な組織に由来するかを確認します。そのうえで、連鎖全体を評価します。
- すべてのつながりが複数のデータベースによる収束した証拠で十分に裏付けられている = 確立されたメカニズム
- ほとんどのつながりは強く、1つだけが単一の情報源に依存している = 強力なメカニズム
- 複数のつながりで証拠が混在しているか、確度が中程度にとどまる = 中程度のメカニズム
- 1つ以上のつながりに直接的な証拠がなく、推論にとどまる = 予備的なメカニズム
- 近接性またはテキストマイニングのみを根拠としている = 推測的なメカニズム
証拠の階層は重要です。 臨床観察(臨床データを伴うClinVarの病原性判定)は、機能アッセイ(eQTL、クロマチンマーク)より強く、機能アッセイは計算上の予測(CADDスコア、L2Gモデル)より強い証拠です。CADDスコアだけでは弱い証拠です。複数の計算上の予測が収束していれば、中程度の証拠になります。疾患に関連する組織で複数の研究にわたって再現されたeQTLは、強い証拠です。
常に別のメカニズムも検討してください。 eQTLが遺伝子Aを示す一方で、L2Gが遺伝子Bを支持する場合は、両方のモデルを提示します。バリアントが発現ではなくスプライシングを介して作用する可能性がある場合は、その点も記載します。誤った確信よりも、誠実に不確実性を示すほうが有用です。
証拠の評価
各証拠がメカニズム上のつながりをどれほど直接的に裏付けているかに基づいて評価します。
- T1(最も強い):再現されたGWAS関連と機能的検証の組み合わせ。適切な組織でのeQTLに加え、バリアント位置に調節性クロマチンマークが認められること。これは独立した情報源から得られた収束した証拠です。
- T2:キュレーションされた生物学的知見。標的遺伝子が、既知の疾患関連経路(Reactome、GenCC Definitive)に含まれていること。これはバリアントがその経路を介して作用することの証明にはなりませんが、メカニズムの生物学的な妥当性を高めます。
- T3:計算上の予測。L2Gスコア、PPIネットワークのエンリッチメント、GO用語のエンリッチメントなどです。これらは確認のためではなく、仮説を立てるためのものです。T1/T2の証拠が乏しい場合に役立ちます。
- T4:単一の情報源による証拠、または間接的な証拠。最も近い遺伝子への割り当て、文献中での共起、テキストマイニングによる関連などです。これらだけを根拠として、メカニズムについて主張してはいけません。
よくある間違いと代替手段
パラメーターに関する注意点(正しいパラメーター名は上記のコードブロックを参照してください):
EnsemblVEP_annotate_rsidではrsidではなく、variant_idを使用しますMyVariant_query_variantsではvariant_idではなく、queryを使用しますReactomeAnalysis_pathway_enrichmentは配列ではなく、スペース区切りの文字列を受け取ります- OpenTargets の疾患検索では
queryではなく、queryStringを使用します - OpenTargets では EFO ID ではなく、MONDO ID(例:2 型糖尿病の場合は MONDO_0005148)を使用します
gwas_get_associations_for_traitは動作しません。代わりにgwas_search_associationsを使用してください- ENCODE のバイオサンプル名は、疾患名ではなく組織名または細胞株名です
データが欠けている場合は、分析を調整してください:
- eQTL がない場合:他の組織を確認し、L2G のみを使用して、確信度が低下することを明記します
- GWAS ヒットがない場合:バリアントが閾値未満であるか、真のシグナルと LD の関係にある可能性があります
- RegulomeDB のデータがない場合:ENCODE で該当位置のクロマチンマークを直接確認します
- L2G データがない場合:適切な注意事項を添えて、eQTL と最近傍遺伝子に切り替えます
- 遺伝子が STRING/Reactome にない場合:UniProt の機能情報と GO アノテーションを使用します
- 候補遺伝子が複数ある場合:証拠に基づいて順位付けしたすべての候補を提示し、無理に1つに絞りません
よくあるシナリオを通じた推論
シナリオ 1:明確な調節シグナルを持つ非コードバリアント
VEP でイントロンまたは遺伝子間のバリアントが示され、GWAS で形質との強い関連が示され、RegulomeDB で高スコア(1a~2a)が返された場合、推論の道筋は明快です。バリアントが調節エレメントを破壊しています。重要なのは、それがどの遺伝子を調節しているかです。まず疾患に関連する組織の eQTL を確認し、次に L2G を確認します。両方が同じ遺伝子を示す場合は、経路解析を通じて疾患までたどります。これは「理想的な経路」であり、Established の確信度が得られます。
シナリオ 2:標的遺伝子が曖昧な非コードバリアント
バリアントが複数の近傍遺伝子を持つ遺伝子間領域にあり、eQTL/L2G の証拠が弱い、または矛盾している場合は、最も近い遺伝子を選びたくなる衝動を抑えてください。代わりに、座位内のすべての候補遺伝子について eQTL を確認し、L2G スコアを比較して、候補の1つに疾患関連の既知の生物学的知見があるか検討します。証拠に基づいて順位付けした複数のモデルを提示してください。確信度は Preliminary または Moderate として報告します。
シナリオ 3:機能シグナルがまったくない
eQTL がなく、L2G の裏付けもなく、調節アノテーションもほとんどない場合は、データの不足を率直に認めてください。バリアントは、現在のデータベースでは捉えられない機序(細胞型特異的な調節、スプライシング QTL、3D ゲノム相互作用など)を介して作用している可能性があります。何を確認したか、何が陰性だったか、疑問の解明にどのような実験が必要かを述べてください。これは有効で有用な知見です。
プログラムによるアクセス(ツール以外)
ToolUniverse ツールが部分的なアノテーションしか返さない場合は、複数のソースから直接データを集約してください:
import requests, pandas as pd
rsid = "rs12345"
# Ensembl VEP REST — functional consequence prediction
vep = requests.get(f"https://rest.ensembl.org/vep/human/id/{rsid}?content-type=application/json").json()
# GTEx eQTL — tissue-specific expression effects
eqtl = requests.get(f"https://gtexportal.org/api/v2/association/singleTissueEqtl",
params={"snpId": rsid, "datasetId": "gtex_v8"}).json()
# ClinVar bulk (variant_summary.txt.gz, ~200MB, all variants)
# Download once, filter locally:
# df = pd.read_csv("https://ftp.ncbi.nlm.nih.gov/pub/clinvar/tab_delimited/variant_summary.txt.gz", sep="\t")
# hits = df[df["RS# (dbSNP)"] == int(rsid.replace("rs",""))]
# Combine into unified annotation DataFrame
annotations = {"rsid": rsid, "vep_consequence": vep[0]["most_severe_consequence"] if vep else None,
"eqtl_tissues": len(eqtl.get("singleTissueEqtl", [])),
"sources_checked": ["VEP", "GTEx", "ClinVar"]}
API の使用パターンとエラー処理については、tooluniverse-data-wrangling スキルを参照してください。
制限事項
- GTEx の eQTL はバルク組織のデータです(v8 データ)。細胞型特異的な効果やスプライシングへの影響が見逃される可能性があります。
- L2G と CADD は計算による予測であり、実験的な証明ではありません。
- GWAS の関連は相関関係です。LD によるタグ付けのため、リード SNP が因果バリアントとは限りません。
- 長距離の調節効果(>1Mb)や3D ゲノム相互作用は、現在のツールでは十分に捉えられません。
- OpenTargets のバリアント・クリーダブルセットでは chr_pos_ref_alt 形式が必要です。まず VEP からアレルを取得してください。