Skip to content

RIDER as a robustness experiment

Tonight · ~40 min · hands-on · energy: active · setup: Python (pyradiomics, SimpleITK) + RIDER CT/SEG, optional 3D Slicer/SlicerRadiomics

Everything so far has been concepts. RIDER turns them into an experiment you can run tonight: one feature, two perturbations, and a prediction you check against the result. The goal is understanding, not a score — so you must not tune anything to win.

Why RIDER is the right dataset

RIDER Lung CT v3 is a public TCIA test–retest dataset: lung cancer patients scanned, then scanned again on the same scanner the same day, with matched tumour segmentations. That makes it a ready-made repeatability experiment — the two scans of one patient should give nearly identical features if the feature is repeatable. It is also exactly the data TRACE-CT downloads, preflights, and extracts from, so the geometry work from Chapter 2 is already done for you.

The one-parameter sensitivity experiment

TRACE-CT already extracts original_glcm_JointEntropy with a fixed pipeline (binWidth 25, 1 mm isotropic B-spline, NN mask, HU clip [-1000, 400]). Use a validated RIDER case and stress that one feature:

  1. Visualise first. In Slicer/SlicerRadiomics (or the Visual-QC pass), load CT + tumour mask; confirm the mask sits on the tumour before trusting any number.
  2. Get the reference. Inspect TRACE-CT’s reference extraction; note the reference JointEntropy and its exact pipeline pins.
  3. Predict, then perturb binWidth. In writing, predict the effect of binWidth 25 → 5 and → 50. From lesson 4: smaller → more grey levels → finer, more populated GLCM → typically higher Joint Entropy; larger → coarser → lower. Then run it, holding everything else fixed.
  4. Compare to your prediction; explain any mismatch mechanistically. A small ROI may saturate discretisation (few HU values, so binWidth matters less than expected); say so.
  5. Optionally vary the geometry. Resample 1 mm → 2 mm, or switch B-spline → linear, and watch the feature move — a felt demo of the dependence map (lesson 5).

The test–retest variant (repeatability)

If you have a paired RIDER case (the same patient’s two same-day scans), extract JointEntropy on both with the same pipeline and compare. A repeatable feature gives nearly the same value on the two scans; a non-repeatable one does not. Across several patients you can rank features by their test–retest agreement (ICC/CCC) — exactly the robustness filter of lesson 6, on real data. RIDER’s repeats are already paired by TRACE-CT’s preflight, so the pairing work is done.

The one rule that protects the experiment

Purpose: understanding, not a score. Do not tune binWidth (or spacing, or interpolation) to maximise a downstream metric. That is feature-fishing — it invalidates any validation and turns a learning exercise into an irreproducible result. You pin a pipeline, you report it, you observe what changes.

Bridge

When your prediction matches the run, you have connected the binWidth lesson to a number you produced yourself — the grey-level alphabet really did rebuild the matrix. When it does not match, the mismatch is the lesson: a small ROI, a near-uniform region, or an interaction with the HU clip all change the predicted direction. Either way you have stopped treating the feature as a black box.

Files to read alongside (TRACE-CT, read-only)

  • scripts/rider_radiomics_extraction.py — the full chain (CT load → SEG decode → 1 mm B-spline → NN mask → HU clip → PyRadiomics original_glcm_JointEntropy).
  • configs/pyradiomics_params.yaml — the pinned pipeline (binWidth 25, original, 3D, label 1).
  • scripts/rider_preflight.py classify_source_role() — tags lung_1_25mm vs standard_5_0mm, the reconstruction-sensitivity experiment made real.
  • compare_radiomics_runs.py — independent determinism check (feature agrees to 1e-6 across runs).

See the TRACE-CT learning map for paths.

What to retain

  1. RIDER is a ready-made test–retest experiment: same patient, same-day repeat, so feature differences are acquisition noise, not biology.
  2. The exercise: pin a pipeline, predict the effect of a perturbation (binWidth, spacing, interpolator), run it, explain the match or mismatch mechanistically.
  3. Test–retest across RIDER pairs ranks features by repeatability — the robustness filter on real data.
  4. Never tune pipeline parameters to a metric; the purpose is understanding, not a score. Pin, report, observe.

Next: the path from a trusted feature to a clinical claim — harmonisation, ComBat, and the model handoff.