# Serum metabolomics and colorectal cancer: an inspectable reanalysis

Completed 2026-09-29 using the existing local Python Notebook environment. No packages were installed, no application changes were made, and no remote compute was used.

**Finding.** The public data contain a reproducible within-study discrimination signal. For colorectal cancer (CRC) versus polyps, a regularized logistic regression model achieved held-out ROC AUC **0.856**, with an approximate conditional 95% bootstrap interval **0.787–0.916**. Three repeated nested-cross-validation estimates ranged from **0.856 to 0.871**. Apparent training AUC was **0.958**, illustrating substantial optimism when a model is evaluated on the samples used to fit it. These results support further validation; they do not establish a reliable clinical screening test or performance in a new population.

The selected data are [Metabolomics Workbench ST000284, analysis AN000452](https://www.metabolomicsworkbench.org/data/DRCCMetadata.php?StudyID=ST000284), project PR000226, [dataset DOI 10.21228/M8FG61](https://doi.org/10.21228/M8FG61). The repository identifies the material as human blood serum, measured with targeted LC-MS/MS, and reports intensities in cps. Its API states CC BY 4.0. The original publication is Zhu et al., *Colorectal cancer detection using targeted serum metabolic profiling*, J. Proteome Research (2014), [DOI 10.1021/pr500494u](https://doi.org/10.1021/pr500494u), verified through [PubMed PMID 25126899](https://pubmed.ncbi.nlm.nih.gov/25126899/). The publication abstract and deposited metadata were inspected; complete original preprocessing and collection details could not be verified from the accessible records.

**Why this dataset and comparison.** ST000284 has a downloadable processed matrix and explicit CRC, polyp and healthy labels. Smaller public serum candidates ST000065 and ST000082 had roughly 65 samples, but their available factor tables did not provide a usable cancer-versus-non-cancer contrast; they were rejected before modeling. Dataset selection did not depend on predictive performance.

The primary comparison was fixed as **64 CRC versus 76 polyp samples** (140 total). Polyps are a clinically relevant non-cancer disease comparator, although they are not a complete representation of all non-cancer patients and some polyps can be premalignant. Distinguishing cancer from polyps does not answer whether the test detects advanced neoplasia. CRC versus 84 healthy samples, and CRC versus all 160 non-cancer samples, were retained as separate exploratory comparisons. Their different control mixtures are not interchangeable estimands.

| Deposited group | Samples | Mean age, years (SD) | Female / male | BMI available |
|---|---:|---:|---:|---:|
| CRC | 64 | 57.59 (13.80) | 30 / 34 | 36 |
| Polyp | 76 | 55.34 (7.04) | 39 / 37 | 39 |
| Healthy | 84 | 54.83 (12.93) | 44 / 40 | 83 |

**Data quality.** The matrix has 224 samples and 113 unique metabolites, with exact agreement between matrix and metadata sample IDs. There are no explicit missing or nonfinite values, nonpositive intensities, constant features, exact duplicate sample profiles or exact duplicate feature profiles. No samples were removed. Two samples (IDs 199 and 483) were flagged by a descriptive robust outlier rule on median log-intensity and retained. No outcome-dependent outlier deletion was performed.

There are **69 entries exactly equal to 1**, affecting 62 samples and seven metabolites, especially cytosine (44 entries). Their origin is undocumented: they could represent a floor, censoring or upstream imputation. A fully populated processed table is not evidence of complete raw measurements. The primary pipeline retained these positive values; a quality-triggered sensitivity check treating them as missing was specified before fitting any models. Raw spectra, QC injection precision, drift, run order and analyte identification confidence were not independently assessed.

The publication describes **234 samples (66 CRC, 76 polyp, 92 healthy) and 158 monitored metabolites**, whereas the deposit contains **224 samples (64, 76, 84) and 113 metabolites**. The reason for these differences was not resolved. Missing people and unreported analytes were not reconstructed. Upstream normalization, imputation and feature inclusion remain incompletely documented, so leakage or selection occurring before deposition cannot be excluded.

All deposited Subject ID fields are “-”; there are no usable participant, batch, site or collection-date identifiers. **Disjoint sample IDs cannot establish independent participants.** The analysis assumes sample independence, and cannot detect unlabelled repeated specimens, split by hospital or batch, or resample participant clusters. Broad collection descriptions in the deposit are incomplete; pretreatment status and harmonized fasting/collection timing were not established for each sample.

**Validation method.** The session protocol was saved before model results, including exact repetition counts and seeds. It was not an external preregistration. A single simple model family was selected: L2 logistic regression with C in {0.01, 0.1, 1, 10}, selected by inner ROC AUC. Three repeats of five outer stratified folds used seeds 17, 29 and 43; each outer training set used three inner folds. The 140 primary samples receive exactly one held-out prediction per repeat. An outer model is trained on 112 samples, so this estimates that training procedure, not precisely the performance of a future model fit on all 140.

Every fitted preprocessing step is inside the training pipeline: invalid/nonpositive handling, a 20% missingness filter, median imputation, log10 transformation, constant-feature removal and standardization. No supervised metabolite selection, whole-cohort fitted normalization or outer-test-driven threshold tuning was used. Diagnosis, stage, sample IDs and group labels were excluded from predictors. The fixed classification threshold was 0.5. A dummy comparator predicts the training-fold CRC fraction. No convergence warnings occurred in the evaluated model fits. These controls prevent leakage introduced by this reanalysis; they cannot undo unknown upstream processing.

**Primary held-out results.** Repeat 1 was chosen in advance for the principal point estimate and intervals.

| Metric | Estimate | Approximate conditional 95% interval |
|---|---:|---:|
| ROC AUC | 0.856 | 0.787–0.916 |
| Average precision | 0.872 | 0.811–0.923 |
| Balanced accuracy | 0.797 | 0.728–0.861 |
| Sensitivity at 0.5 | 0.766 | 0.656–0.859 |
| Specificity at 0.5 | 0.829 | 0.750–0.908 |
| Brier score (lower is better) | 0.153 | 0.123–0.187 |

The confusion counts are **49 true positives, 15 false negatives, 63 true negatives and 13 false positives**. The primary cohort CRC fraction is 0.457, the relevant reference level for average precision. The dummy model has balanced accuracy 0.500 and Brier score 0.248. Its pooled out-of-fold AUC is 0.488, slightly below the theoretical 0.5 constant-score reference because training-fold class fractions differ; this is not useful predictive performance.

Intervals use **1,000 stratified sample bootstraps of the fixed first-repeat out-of-fold predictions**. They are approximate, conditional intervals: predictions from overlapping training folds are dependent, and this bootstrap does not refit the full training procedure. It does not capture all model-fitting uncertainty, uncertainty about the study's sampling process, or transport to new settings. The three repeat estimates are also dependent; they were not treated as three independent studies, and fold variability was not used as a conventional standard error.

All **99 planned label permutations** completed, each rerunning the full first-repeat nested procedure, including preprocessing and tuning. None reached the observed AUC; the corrected Monte Carlo p-value is **(0 + 1)/(99 + 1) = 0.01**. Permuted AUCs ranged from 0.340 to 0.687. With 99 permutations, 0.01 is the smallest attainable corrected value, not evidence that the true tail probability is exactly 0.01. The test assumes exchangeability of samples; it cannot distinguish cancer biology from clinical or technical factors associated with the labels.

**Robustness and alternative explanations.**

| Analysis | Sample count | AUCs for repeats 1 / 2 / 3 |
|---|---:|---|
| Primary: CRC versus polyp | 140 | 0.856 / 0.871 / 0.856 |
| CRC versus healthy | 148 | 0.835 / 0.852 / 0.844 |
| CRC versus pooled non-cancer | 224 | 0.878 / 0.899 / 0.872 |
| Age, sex and BMI only; CRC versus polyp | 140 | 0.609 / 0.600 / 0.542 |
| Exact-1 intensities treated as missing | 140 | 0.841 / 0.849 / 0.847 |
| Exact-1 indicators only | 140 | 0.423 / 0.419 / 0.391 |

The signal persists under the alternative floor-value treatment. Exact-1 indicators alone provide no useful discrimination here; their scores were not inverted after seeing results. An ordinary missingness-only baseline is uninformative because there are no explicitly missing/nonpositive values. The clinical baseline is weaker than the metabolite model, but that does **not** show that metabolites contribute independently of all confounding: BMI is incomplete, only a simple clinical model was used, and diet, medication, inflammation, collection practice, batch and site may be unmeasured. No formal hypothesis test of model-to-model AUC differences was performed. The healthy and pooled comparisons share samples with the primary comparison and are not independent replications.

CRC cases include 19 stage I/II, 17 stage III and 28 stage IV samples. At the fixed threshold, the first-repeat model detected **12/19 stage I/II (63.2%)**, **11/17 stage III (64.7%)** and **26/28 stage IV (92.9%)**. These are exploratory, small-subgroup descriptions using the same model, not stage-specific validation studies. They emphasize that the overall performance is weighted toward a cohort containing many advanced cancers and does not establish early-screening sensitivity.

**What can generalize—and what remains untested.** The evidence supports an association between this processed serum profile and diagnosis among samples from this study, with nontrivial discrimination after honest internal model fitting. It does not establish causal cancer-specific biomarkers, patient-independent validation, robustness across laboratories, prediagnostic detection, useful screening predictive values, or clinical benefit. AUC 0.856 is a ranking measure, not “85.6% accurate.”

The case/control proportions here differ from clinical screening prevalence. The model's probabilities are not calibrated population risks; descriptive calibration bins in the evidence archive are irregular, and no recalibration or clinical decision threshold was validated. Sensitivity and specificity may also change when the disease spectrum and control diagnoses change. Low-prevalence screening predictive values cannot be read directly from this dataset.

A meaningful next test would lock the assay, preprocessing, model and decision rule before testing a separately recruited cohort with participant identifiers, blinded reference diagnoses and well-recorded collection and treatment timing. Include adequate early-stage cases and relevant benign diagnoses, distinguish advanced adenomas where appropriate, randomize analytical runs across groups, and assess independent sites/batches. Report calibration, clinically required sensitivity/specificity, predictive values at the target prevalence and decision utility. Prospective evaluation would be needed before claiming screening or patient-care value.

**Reproducibility and inspection.** The archive contains the licensed source JSON, source URLs and SHA-256 checksum, extracted matrix and metadata, all inclusion decisions, sample/feature quality tables, clinical summaries, outer test assignments and predictions, inner split assignments, tuning settings, all bootstrap and permutation results, calibration/subgroup tables, figures and the verification record. Outer training memberships are the complement of each recorded outer test fold; inner training memberships are the complement within that outer training set. No data from additional unpublished cohorts are used.

The finalized Python code was rerun from the saved checksum-locked input in a clean namespace within the same existing Notebook runtime. All **420 primary out-of-fold predictions**, 15 outer-fold tuning settings, 1,680 inner-fold held-out membership records, primary metrics and apparent training metrics reproduced; maximum prediction difference was **0.0** (tolerance 1e-10). The bootstrap/permutation calculation completed once and was not rerun solely for verification. This is a clean-namespace check, not a separate operating-system process or independent scientific replication.

Unzip `analysis_evidence.zip` and run `python analysis.py --input inputs/ST000284_AN000452.json --output rerun` in a compatible existing Python environment. The default run is offline and regenerates the audit, six model analyses, 1,000 bootstraps, 99 permutations and figures. It refuses a changed input checksum or an existing output directory. `requirements.txt` records the installed direct dependencies; it is not a complete transitive environment lock. Full methods and exact seeds are in `analysis_protocol.md`.

**Figure descriptions.** `data_quality.png` shows each sample's median log10 intensity, exact-1 count, age and available BMI; black lines mark medians and panel-specific counts show missing BMI. No flagged sample is hidden. `validation_results.png` shows first-repeat ROC curves, the three dependent repeat AUCs, the primary conditional interval, the permutation null and individual held-out probabilities. All underlying values are included as tables.

Additional selection references: [ST000065](https://www.metabolomicsworkbench.org/data/DRCCMetadata.php?StudyID=ST000065), [ST000082](https://www.metabolomicsworkbench.org/data/DRCCMetadata.php?StudyID=ST000082). A further literature candidate, *A Metabolomics-Based Screening Proposal for Colorectal Cancer*, states that its data are not public because of privacy ([PubMed PMID 35208185](https://pubmed.ncbi.nlm.nih.gov/35208185/); [DOI 10.3390/metabo12020110](https://doi.org/10.3390/metabo12020110)), and was not used.
