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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

panelbc-1.1.0.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

panelbc-1.1.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file panelbc-1.1.0.tar.gz.

File metadata

  • Download URL: panelbc-1.1.0.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.11

File hashes

Hashes for panelbc-1.1.0.tar.gz
Algorithm Hash digest
SHA256 58e6dd23e98624ecc8aa6a498d6c704aa091b110cefdab0c428ec499683d695c
MD5 cfa5782ee9fd87cc0cde426e16cd751e
BLAKE2b-256 adf5cc060af7921f7e63e26b0e7c762b8284fd0dc80fe8e358fbd6dbe26dd8bc

See more details on using hashes here.

File details

Details for the file panelbc-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: panelbc-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.11

File hashes

Hashes for panelbc-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9dec5b2ea49d0073cc8eb9a6c03839bd9eb4f39a3d481783155745ef66c7a229
MD5 9fd453418ddc07e3fc82a96c3185e83b
BLAKE2b-256 239f8b90d032cd1dc922dc2993070a4b8387e43e75e6adab78ef4df9f9ec5bf0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page