计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
tooluniverse-polygenic-risk-score【效率与协作】Build and interpret polygenic risk scores (PRS) for complex diseases using GWAS summary statistics. Covers PRS construction (clumping/thresholding, PRS-CS), validation in independent cohorts, ancestry-aware adjustment, and clinical interpretation (population-relative risk, not absolute prediction). Use for PRS-based risk stratification.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Build and interpret polygenic risk scores for complex diseases using genome-wide association study (GWAS) data.
A polygenic risk score predicts genetic risk, not disease. A high PRS means elevated risk relative to the population — it does not mean the person will develop the condition, and a low PRS does not confer immunity. PRS performance varies dramatically across ancestries: a European-derived PRS applied to a West African population can lose 50–70% of its predictive power because the underlying GWAS was trained on European allele frequencies and LD patterns. Effect sizes from discovery GWAS are subject to winner's curse (overestimation in single studies); always prefer weights from large meta-analyses or validated PGS Catalog models. PRS should always be interpreted in the context of non-genetic risk factors — for most complex diseases, environmental factors contribute as much or more than genetics.
LOOK UP DON'T GUESS: Do not assume effect sizes, allele frequencies, or which SNPs are genome-wide significant for a trait — always query GWAS Catalog (gwas_get_associations_for_trait) for actual data. Do not assume a validated PRS model exists for a trait; check PGS Catalog via PubMed search.
Use Cases:
What This Skill Does:
What This Skill Does NOT Do:
A polygenic risk score is calculated as a weighted sum across genetic variants:
PRS = Σ (dosage_i × effect_size_i)
Where:
Raw PRS is standardized to z-scores for interpretation:
z-score = (PRS - population_mean) / population_std
This allows comparison to population distribution and percentile calculation.
This skill uses ToolUniverse GWAS tools to query:
GWAS Catalog (EMBL-EBI)
gwas_search_associations (param: disease_trait, size; also gwas_get_associations_for_trait), gwas_get_snps_for_gene (param: gene_symbol), dbsnp_get_variant_by_rsiddisease_trait search returns associations where the trait is one of potentially several linked EFO traits. For precise filtering, use EFO IDs via efo_trait param.Open Targets Genetics
OpenTargets_search_gwas_studies_by_disease, EnsemblVEP_annotate_hgvs (for variant consequence/frequency)Variant Annotation
gnomad_search_variants + gnomad_get_variant — population allele frequencies (ancestry-specific via VEP colocated_variants)MyVariant_query_variants — CADD, SIFT, PolyPhen, ClinVar, gnomAD in one callgnomad_get_gene_constraints — gene constraint metrics (pLI, oe_lof) for target prioritizationPGS Catalog (pgscatalog.org, EMBL-EBI) — check this FIRST, before building anything from raw GWAS associations
PGSCatalog_search_traits(query=...) — resolve a free-text trait name to its real EFO/MONDO trait_id (e.g. "type 2 diabetes" -> MONDO_0005148) and see how many published scores exist. Always use the trait_id the tool returns — don't guess or reuse a remembered EFO/MONDO id, since the search can resolve to a different (but correct) ontology term than expected.PGSCatalog_get_scores_by_trait(trait_id=...) — list every published PGS for that trait: PGS id, variant count, development method (LDpred, P+T, genome-wide-significant-variants, etc.), genome build, and source publication. A trait can have 50+ scores of wildly different size and quality (e.g. type 2 diabetes: from a 62-variant 2014-era score to a 6.9-million-variant LDpred model) — don't assume the first result is the best one.PGSCatalog_get_score(pgs_id=...) — full metadata for one score, including its ancestry_distribution for both the development (GWAS) and evaluation cohorts. Read this before trusting a score: a score developed on 100% European samples (ancestry_distribution.dev.dist: {"EUR": 100}) is exactly the transferability risk this skill warns about above, even if it was later evaluated in more diverse cohorts.PGSCatalog_get_performance_metrics(pgs_id=...) — the actual published validation numbers per evaluation cohort: AUROC/C-index, hazard/odds ratios (including "top 10% vs. rest" comparisons), R², each tied to the specific ancestry and sample size it was measured in. This is how you judge whether a score is trustworthy for a given population — a high AUROC measured only in a European cohort tells you nothing about performance in other ancestries; look for an evaluation row matching your population of interest, or note its absence.Polygenic risk scores aggregate the effects of many genetic variants to estimate an individual's genetic predisposition to a trait or disease. Unlike Mendelian diseases caused by single mutations, complex diseases involve hundreds to thousands of variants, each with small effects.
Key Properties:
GWAS compare allele frequencies between cases and controls (or correlate with trait values) across millions of SNPs to identify disease-associated variants.
Study Design:
Nearby variants are often inherited together (LD). To avoid double-counting:
GWAS and PRS are most accurate when ancestries match:
PRS can stratify individuals for:
Example: Khera et al. (2018) showed PRS identifies 3× more individuals at >3-fold coronary artery disease risk than monogenic mutations.
run_ldsc_genetic_correlation (LD Score regression), which needs only summary stats (no individual genotypes) and corrects for sample overlap. Far more principled than correlating PRS values.Before or alongside building a PRS, quantify how much of the trait is captured by common SNPs and how traits relate — directly from GWAS summary statistics:
run_ldsc_heritability — SNP-based heritability (h²_SNP) from one GWAS's summary stats; the intercept also flags confounding/inflation vs. true polygenicity. This sets the ceiling a PRS can reach (the "heritability gap" below is exactly h²_SNP minus PRS R²).run_ldsc_genetic_correlation — genetic correlation (rg) between two GWAS, for shared-aetiology and cross-trait PRS questions.Both are remote tools (LD Score regression engine + reference LD-score panels). Use them to ground heritability/rg claims in data rather than citing literature point estimates.
Consumer genetic testing (23andMe, Ancestry DNA) provides raw genotypes. Users can:
Caution: Personal PRS should not replace medical advice. Results may cause anxiety if not properly contextualized.
Before extracting associations and building a PRS from scratch (steps 1-5 below), check whether a validated score already exists:
PGSCatalog_search_traits(query="<trait>") # resolve to a real trait_id
PGSCatalog_get_scores_by_trait(trait_id="<from above>") # list candidate scores
PGSCatalog_get_score(pgs_id="<candidate>") # check dev-cohort ancestry
PGSCatalog_get_performance_metrics(pgs_id="<candidate>") # check validated AUROC/OR/R2 by ancestry
If a well-validated score exists for the target population's ancestry, use its published weights (scoring_file URL) directly rather than re-deriving a cruder PRS from raw GWAS Catalog associations — this is exactly the "winner's curse" and LD-clumping problem the raw-GWAS path (steps 1-5) has to work around manually. Only fall back to building from raw associations when PGS Catalog has no score for the trait, or when every existing score was developed and evaluated in an ancestry that doesn't match the population you're scoring.
Identify the disease or trait of interest:
Query GWAS databases for genome-wide significant associations:
prs = build_polygenic_risk_score(
trait="coronary artery disease",
p_threshold=5e-8, # Genome-wide significance
max_snps=1000
)
Considerations:
Extract beta coefficients or odds ratios:
Quality control filters:
Calculate weighted sum of genotype dosages:
result = calculate_personal_prs(
prs_weights=prs,
genotypes=my_genotypes,
population_mean=0.0,
population_std=1.0
)
Genotype Sources:
Convert to percentiles and risk categories:
result = interpret_prs_percentile(result)
print(f"Percentile: {result.percentile:.1f}%")
print(f"Risk: {result.risk_category}")
Risk Categories:
Clinical Interpretation:
This skill is for educational and research purposes only.
For clinical genetic testing, consult:
PRS is a rapidly evolving field. Guidelines and best practices will continue to change as research progresses.
Regulatory Status: