Skip to main content

panelbc — Focus-Anchored Breast-Cancer Prognostic Panel

License: MIT

A minimal, cheap, multiply-validated breast-cancer prognostic gene panel and the code that produced it. ICMR grant IIRPSG-2024-01-02447, Objective 3.

Starting from a mechanistically-defined protein complex (EEF1A2, IQGAP1, IQGAP2, FRG1), an unbiased genome-wide, leakage-free search yields a 7- or 9-gene panel that matches or beats the 50-gene PAM50 signature at a fraction of the genes, validated across four independent cohorts on three continents (TCGA, METABRIC, SCAN-B, GSE20685; ~6,800 patients).

Panel Genes External C-index (LOCO)
7-gene IQGAP1, IQGAP2, EEF1A2, FRG1, FLT3, CLIC6, SUSD3 0.65
9-gene + ZIC2, P4HA2 0.67
PAM50 (reference) 50 genes 0.63

Scientific note. The predictive signal is carried by the discovered genes (FLT3, CLIC6, SUSD3, ZIC2, P4HA2); the four complex genes are near-random as predictors on their own (C≈0.54) and are retained as the biological anchor and discovery scaffold, not as predictive features. See docs/.

Install

pip install -e .            # core scoring (numpy/pandas/scipy/scikit-learn/lifelines)
pip install -e ".[full]"    # + reproduction dependencies (xgboost, shap, sksurv, ...)
pip install -e ".[deep]"    # + torch for the deep-learning stage

Quick start — score your own cohort

import pandas as pd, panelbc
expr = pd.read_csv("my_expression.csv", index_col=0)   # samples x genes (any scale)
scores = panelbc.risk_score(expr, panel="9gene")       # higher = higher risk
groups = panelbc.risk_group(expr, panel="9gene")       # Low / Intermediate / High

or from the command line:

python scripts/predict.py --expr my_expression.csv --panel 9gene --out scores.csv

Reproduce the headline benchmark

With the cohort checkpoints in data/ (see docs/DATA.md):

python scripts/reproduce.py
# model           TCGA  METABRIC  SCAN-B    MEAN
# 7-gene         0.678     0.608   0.676   0.654
# 9-gene         0.710     0.617   0.688   0.671
# focus-only     0.569     0.532   0.516   0.539

Repository layout

panelbc/            installable package: locked panel defs (panels.json) + scoring
scripts/            predict.py (score a CSV), reproduce.py (headline benchmark)
analysis/           the 13 ordered stage scripts for the full study (01..13) + helpers
tests/              pytest suite (scoring correctness, direction, missing-gene handling)
docs/               DATA.md (how to obtain/rebuild cohort data), METHODS.md
requirements.txt    pip dependencies (core + extended tiers, with exact pins for reproduction)
pyproject.toml      installable package metadata (pip install -e .)

Install

pip install -r requirements.txt     # dependencies
pip install -e .                    # the panelbc package + panelbc-predict CLI
pytest tests/ -q                    # 5 tests, should all pass

The full analysis pipeline (analysis/)

Thirteen ordered stages documenting the complete study: dataset build (Aim I) -> transcriptional cross-talk (Aim II) -> genome-wide gene discovery -> leakage-free forward selection -> parsimony/cost frontier -> panel head-to-head -> deep learning (Phase II) -> 4th-cohort validation -> statistical rigor (calibration/DCA/clinical-independence) -> tumor-vs-normal (Aim III) -> (near-)exhaustive gene-set search -> KEGG pathway novelty -> immune-infiltration control. Stages 11-13 are the extended analyses:

  • 11_exhaustive_search.py — numba-JIT ridge-Cox engine; exhaustive enumeration of all 3-5 gene panels + wide-beam 6-10, anchored and free. Shows the best free panel contains zero focus genes at every size and plateaus at ~0.70.
  • 12_pathway_novelty.py — KEGG annotation of every panel gene; focus and discovered genes occupy disjoint pathway space (novel combination, not a known module). Requires NCBI + KEGG network access.
  • 13_immune_control.py — confirms the panel is not an immune-infiltration surrogate (risk-immune correlation ~0; immune adds nothing to C-index). Turnkey: runs from the six checkpoints.

These are the faithful record of what was computed in a persistent analysis kernel; stages 01-10 share in-memory state and are meant to be read/run in order (see analysis/helpers_reference.py for the shared functions), while 11-13 are more self-contained. The installable panelbc package + scripts/ are the turnkey, tested surface.

Method summary

  • Expression z-scored within each cohort before pooling — neutralises TPM/RSEM/microarray scale differences.
  • Prognosis = penalised Cox; discrimination = Harrell's C-index.
  • Leakage-free: survival-based gene selection done inside CV folds only.
  • External validation = leave-one-cohort-out + a fully held-out 4th cohort.

Data availability

All cohorts are public (cBioPortal, GEO). GDC/UCSC-Xena were unreachable in the original environment, so TCGA RSEM was obtained from cBioPortal's PanCancer Atlas. See docs/DATA.md.

Citation

See CITATION.cff.

License

MIT — see LICENSE.

Metadata

Release files for panelbc 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for panelbc 1.1.0
File Size Uploaded Provenance
panelbc-1.1.0.tar.gz 7.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for panelbc 1.1.0
File Interpreter ABI Platform
panelbc-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 14.8 kB

Release files / panelbc-1.1.0.tar.gz

Download URL panelbc-1.1.0.tar.gz
Size 7.5 kB
Tags Source
SHA-256 checksum
How to use checksums
58e6dd23e98624ecc8aa6a498d6c704aa091b110cefdab0c428ec499683d695c
BLAKE2b-256 checksum
How to use checksums
adf5cc060af7921f7e63e26b0e7c762b8284fd0dc80fe8e358fbd6dbe26dd8bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.11

Release files / panelbc-1.1.0-py3-none-any.whl

Download URL panelbc-1.1.0-py3-none-any.whl
Size 7.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9dec5b2ea49d0073cc8eb9a6c03839bd9eb4f39a3d481783155745ef66c7a229
BLAKE2b-256 checksum
How to use checksums
239f8b90d032cd1dc922dc2993070a4b8387e43e75e6adab78ef4df9f9ec5bf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.11

Security for panelbc 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page