| name | scientific-variant-effect-prediction |
| description | 計算バリアント効果予測スキル。AlphaMissense (タンパク質構造ベース病原性予測)、
CADD (統合アノテーションスコア)、SpliceAI (スプライシング影響予測) の
3 大予測ツールを統合したコンセンサス病原性評価パイプライン。
Ensembl VEP 連携、バリアントフィルタリング、優先順位付け対応。
9 の ToolUniverse SMCP ツールと連携。
|
| tu_tools | [{"key":"spliceai","name":"SpliceAI","description":"スプライシングバリアント効果予測"},{"key":"cadd","name":"CADD","description":"統合アノテーション依存性枯湇スコア"}] |
Scientific Variant Effect Prediction
AlphaMissense / CADD / SpliceAI の 3 大計算予測ツールを統合した
バリアント病原性評価・優先順位付けパイプラインを提供する。
When to Use
- ミスセンスバリアントの病原性を計算予測するとき
- CADD スコアで全ゲノムバリアントの有害度を評価するとき
- SpliceAI でスプライシング影響を予測するとき
- 複数予測ツールのコンセンサススコアを算出するとき
- WGS/WES バリアントの優先順位付けが必要なとき
Quick Start
1. AlphaMissense 病原性予測
import pandas as pd
import numpy as np
import requests
def alphamissense_predict(variants, uniprot_id=None):
"""
AlphaMissense タンパク質構造ベース病原性予測。
Parameters:
variants: list[dict] — [{"protein": "P12345", "position": 42, "ref": "A", "alt": "V"}]
uniprot_id: str — タンパク質単位で全ポジションのスコア取得
"""
results = []
if uniprot_id:
print(f"Fetching AlphaMissense scores for {uniprot_id}...")
for var in variants:
protein = var.get("protein", uniprot_id)
pos = var["position"]
ref_aa = var.get("ref", "")
alt_aa = var.get("alt", "")
score = var.get("score", np.nan)
if not np.isnan(score):
if score > 0.564:
classification = "likely_pathogenic"
elif score < 0.340:
classification = "likely_benign"
else:
classification = "ambiguous"
else:
classification = "unknown"
results.append({
"protein": protein,
"position": pos,
"ref_aa": ref_aa,
"alt_aa": alt_aa,
"am_score": score,
"am_class": classification,
"variant": f"{ref_aa}{pos}{alt_aa}",
})
df = pd.DataFrame(results)
print(f"AlphaMissense: {len(df)} variants scored")
return df
2. CADD スコア取得
def cadd_score_variants(variants, genome="GRCh38", version="v1.7"):
"""
CADD (Combined Annotation Dependent Depletion) スコア取得。
Parameters:
variants: list[dict] — [{"chr": "1", "pos": 12345, "ref": "A", "alt": "G"}]
genome: "GRCh37" or "GRCh38"
version: CADD バージョン
"""
base_url = f"https://cadd.gs.washington.edu/api/{version}"
results = []
for var in variants:
chrom = str(var["chr"]).replace("chr", "")
pos = var["pos"]
ref = var["ref"]
alt = var["alt"]
url = f"{base_url}/{genome}/{chrom}:{pos}"
try:
resp = requests.get(url, timeout=30)
if resp.status_code == 200:
data = resp.json()
for hit in data:
if hit.get("Ref") == ref and hit.get("Alt") == alt:
raw = hit.get("RawScore", np.nan)
phred = hit.get("PHRED", np.nan)
break
else:
raw, phred = np.nan, np.nan
else:
raw, phred = np.nan, np.nan
except Exception:
raw, phred = np.nan, np.nan
phred >= :
cadd_class =
phred >= :
cadd_class =
phred >= :
cadd_class =
:
cadd_class =
results.append({
: chrom, : pos, : ref, : alt,
: raw,
: phred,
: cadd_class,
: ,
})
df = pd.DataFrame(results)
(
)
df
3. SpliceAI スプライシング予測
def spliceai_predict(variants, genome="GRCh38",
delta_threshold=0.2):
"""
SpliceAI スプライシング影響予測。
Parameters:
variants: list[dict] — [{"chr": "1", "pos": 12345, "ref": "A", "alt": "G"}]
delta_threshold: float — Δスコア閾値
0.2: high recall, 0.5: recommended, 0.8: high precision
"""
results = []
for var in variants:
chrom = str(var["chr"]).replace("chr", "")
pos = var["pos"]
ref = var["ref"]
alt = var["alt"]
ds_ag = var.get("ds_ag", 0)
ds_al = var.get("ds_al", 0)
ds_dg = var.get("ds_dg", 0)
ds_dl = var.get("ds_dl", 0)
max_delta = max(ds_ag, ds_al, ds_dg, ds_dl)
if max_delta >= 0.8:
splice_class = "high_impact"
elif max_delta >= 0.5:
splice_class = "moderate_impact"
elif max_delta >= 0.2:
splice_class = "low_impact"
else:
splice_class = "no_impact"
results.append({
"chr": chrom, "pos": pos, : ref, : alt,
: ds_ag,
: ds_al,
: ds_dg,
: ds_dl,
: max_delta,
: splice_class,
: ,
})
df = pd.DataFrame(results)
impacted = (df[] >= delta_threshold).()
(
)
df
4. コンセンサス病原性評価
def consensus_pathogenicity(am_df, cadd_df, spliceai_df,
am_threshold=0.564, cadd_threshold=20,
splice_threshold=0.5):
"""
AlphaMissense + CADD + SpliceAI のコンセンサス評価。
Parameters:
am_df: AlphaMissense 結果 DataFrame
cadd_df: CADD 結果 DataFrame
spliceai_df: SpliceAI 結果 DataFrame
"""
merged = cadd_df.copy()
if len(am_df) > 0:
merged = merged.merge(
am_df[["variant", "am_score", "am_class"]],
on="variant", how="left"
)
if len(spliceai_df) > 0:
merged = merged.merge(
spliceai_df[["variant", "max_delta", "splice_class"]],
on="variant", how="left"
)
def compute_consensus(row):
votes = 0
total = 0
if "cadd_phred" in row and not pd.isna(row.get("cadd_phred")):
total += 1
if row["cadd_phred"] >= cadd_threshold:
votes += 1
if "am_score" in row and not pd.isna(row.get()):
total +=
row[] >= am_threshold:
votes +=
row pd.isna(row.get()):
total +=
row[] >= splice_threshold:
votes +=
total == :
ratio = votes / total
ratio >= :
ratio >= :
:
merged[] = merged.apply(compute_consensus, axis=)
merged[] = merged.apply(
r: ( c [, , ]
c r pd.isna(r.get(c))), axis=)
(
)
merged
References
Output Files
| ファイル | 形式 |
|---|
results/alphamissense_scores.csv | CSV |
results/cadd_scores.csv | CSV |
results/spliceai_scores.csv | CSV |
results/consensus_pathogenicity.csv | CSV |
figures/variant_score_distribution.png | PNG |
利用可能ツール
ToolUniverse SMCP 経由で利用可能な外部ツール。
| カテゴリ | 主要ツール | 用途 |
|---|
| AlphaMissense | AlphaMissense_get_protein_scores | タンパク質全体スコア |
| AlphaMissense | AlphaMissense_get_variant_score | 個別バリアントスコア |
| AlphaMissense | AlphaMissense_get_residue_scores | 残基レベルスコア |
| CADD | CADD_get_variant_score | 個別バリアント PHRED スコア |
| CADD | CADD_get_position_scores | ポジション全体スコア |
| CADD | CADD_get_range_scores | 範囲一括スコア |
| SpliceAI | SpliceAI_predict_splice | スプライシングΔスコア予測 |
| SpliceAI | SpliceAI_predict_pangolin | Pangolin スプライシング予測 |
| SpliceAI | SpliceAI_get_max_delta | 最大Δスコア取得 |
参照スキル
| スキル | 関連 |
|---|
scientific-variant-interpretation | ACMG/AMP 臨床バリアント解釈 |
scientific-population-genetics | gnomAD 集団頻度参照 |
scientific-disease-research | 疾患-バリアント関連 |
scientific-pharmacogenomics | PGx バリアント効果 |
scientific-protein-structure-analysis | 構造→機能影響評価 |
依存パッケージ
pandas, numpy, requests