Stories

Colorectal cancer subtypes

Open the research page

From 5,973 genes to a 62-gene panel, and from a scatter of tumours to one continuous ring.

CMS1CMS2CMS3CMS4Unlabelled5,9731,0001001010.800.850.900.95Genes kept, removed step by stepCV accuracyBest of each run: 0.939 to 0.945, at 87 to 528 genes100 runs, one line each665 genes picked by at least one run, most often firstAfter 1 run: 121 genes pickedAfter 10 runs: 92 in every runAfter 50 runs: 63 in every runAfter all 100 runs: 62 in every run62 genesPCAt-SNEUMAPdensMAPPHATEPaCMAPcentre (5.2, 4)0901802703602468Angle around the centre, degreesRadiusWntRibosomeEMTImmuneEMT moduleWnt moduleMetabolism moduleMean expressionlowhighCMS1CMS2.1CMS2.2CMS3CMS4.2CMS4.1CMS4.3, centreCMS4 groups match single-cell intrinsic subtypesCMS2.1 to CMS4.2MCR coverMarch 2023Rationale1 / 22
  1. Rationale

    1I started from 3,232 colorectal tumours and all 5,973 genes, embedded so that tumours with similar expression sit close together.From MCR 2023 p. OF3 (3,232 patients, 5,973 genes) · figshare df.csv.gz densMAP_5973_d1/d2, CMS_network · 25_Clusters_for_manuscript.ipynb cell 4

  2. 2The four consensus subtypes separate, but bulk tumour data also carry signal from non-tumour cells, and much of the variation inside each subtype stayed unresolved.From MCR 2023 abstract p. OF1 · figshare df.csv.gz densMAP_5973_d1/d2

  3. Progress

    3A random forest removed genes step by step while I tracked cross-validated accuracy, and I repeated the whole elimination with 100 different seeds.From rfecv.py lines 14 to 41, 73 to 83; 01_RFECV cells 16-18 · rfecv_seed_curves.json, seeds 0 to 99

  4. 4Every run peaked between 0.939 and 0.945 accuracy, each with its own number of genes, from 87 to 528.From 01_RFECV.ipynb cells 19 and 21 · rfecv_seed_curves.json best_n, best score

  5. 5Each run kept its own set of genes. After the first run, 121 genes were in play.From rfecv_data pickles, in seed order · gene_selection_frequency.json checkpoint 1 · 01_RFECV.ipynb cell 22 (665-gene union)

  6. 6After 10 runs, only 92 genes had been picked by every one of them.From rfecv_data pickles, in seed order · gene_selection_frequency.json checkpoint 10

  7. 7After 50 runs, 63.From rfecv_data pickles, in seed order · gene_selection_frequency.json checkpoint 50

  8. 8Across all 100 runs, exactly 62 genes were picked every time; the next closest were picked 99 times. Those 62 became the panel.From features_tally_01092020_features_All.svg (cell 24) · 01_RFECV.ipynb cells 25 to 26; target_genes.sav · MCR 2023 p. OF2 (62 genes always appeared)

  9. 9With the 62 genes, I tried six ways to map the tumours: PCA, t-SNE, UMAP, densMAP, PHATE and PaCMAP.From dimred_compare.json (04, 25, 28 notebooks) · PCA, t-SNE, UMAP refit; PHATE, PaCMAP saved

  10. 10I kept densMAP, which also preserves how tightly tumours pack together.From dimred_compare.json subset.thin_index · figshare densMAP_62; MCR 2023 Fig 1 · Narayan, Berger, Cho, Nat Biotech 2021

  11. 11Two rounds of Louvain clustering split CMS2 in two and CMS4 in three, giving seven groups, and a classifier trained on the clustered tumours labelled the rest, including those with no subtype.From MCR 2023 p. OF2 (two Louvain rounds) · 12_62_Genes_..._DL_Models_Tuning cells 5-8, 34-40 · figshare df.csv.gz new_cms

  12. 12After the clusters were set, I placed a centre by hand on the 62-gene map and read the map as a graph around it.From novel_representation_cms_102921 cells 26, 35 · figshare df.csv.gz densMAP_62_d1/d2

  13. 13Measured from that centre, every tumour has an angle and a radius. Laid flat, angle runs across and radius runs up.From novel_representation_cms_102921 cells 26, 37 · figshare df.csv.gz densMAP_62_angle/radius

  14. 14Wrapping the flat graph around the centre turns it into the ring: horizontal lines bend into circles and vertical lines become spokes.From novel_representation_cms_102921 cells 27, 29 · polar_grid.json (matplotlib default grid) · MCR 2023 Fig 1E p. OF4 (polar view)

  15. Findings

    15CMS2 split in two and CMS4 in three, and the CMS4 groups line up with intrinsic subtypes found in single-cell data.From MCR 2023 abstract p. OF1 · MCR 2023 p. OF5 and Discussion p. OF11 · figshare df.csv.gz new_cms

  16. 16Directional GSEA ranked the genes along 50 directions around the ring and tested gene sets in each direction.From novel_representation_cms_102921 cells 8, 106 · figshare directional_pearson_correlation.csv

  17. 17A Wnt module and the ribosome-biogenesis set were enriched toward CMS2, and an EMT module and an adaptive-immune module toward CMS1 and CMS4.2.From figshare gsea_custom_genes_103121.pkl · novel_representation_cms_102921 cells 105, 108 · MCR 2023 p. OF3 (FDR 0.01), Fig 7

  18. 18Mapping a module's mean expression around the ring shows where it rises: an EMT module peaks in CMS4.2.From figshare df.csv.gz expression, densMAP_62_angle · figshare gsea pkl EMT2 genes · MCR 2023 p. OF6, Fig 7F

  19. 19A Wnt module is highest on the CMS2 side, peaking in CMS2.2.From figshare df.csv.gz expression, densMAP_62_angle · figshare gsea pkl WNT2 genes · MCR 2023 p. OF7 (second WNT module)

  20. 20A metabolism module peaks in CMS3.From figshare df.csv.gz expression, densMAP_62_angle · figshare gsea pkl metabolism2 genes · novel_representation_cms_102921 cells 103, 105

  21. 21Read around the ring, the panel shows a continuous progression from CMS2 to CMS4.From MCR 2023 abstract p. OF1 · MCR 2023 p. OF5 (CMS2.1 to CMS4.2 trajectory) · figshare df.csv.gz densMAP_62_angle, new_cms

  22. Impact

    22This layout became the cover of Molecular Cancer Research in March 2023, and the panel, coordinates, labels and plotting code are public.From MCR 21(3) March 2023 cover image · github cmb-chula/CRCPolarCMS · figshare 10.6084/m9.figshare.18238505.v2

Open the research page