Additional file 2: Frozen model reproducibility package

Purpose
-------
This archive provides the executable prediction code and frozen objects needed
to reproduce the standalone radiomics, morphologic, and stacked combined-model
predictions for a new case after radiomic feature extraction. It does not
contain patient-level images, clinical data, outcomes, or identifiers.

Files
-----
PyRadiomics_parameters.yaml
    Author-verified reconstruction of the extraction settings used in the
    study. The original standalone parameter file was not retained. The file
    encodes all nondefault settings confirmed from the extraction record:
    1-mm isotropic B-spline image resampling, bin width 25 HU, Original images,
    single-level coif1 Wavelet images, normalize=false, force2D=false, and no
    LoG or other image type. All other settings used PyRadiomics 3.1.0 defaults.

models/crossfit_lr_50model_ensemble.joblib
    Fifty frozen fold-specific LR pipelines. Each entry contains its exact
    feature list, fitted StandardScaler, fitted LR classifier, repeat/fold
    identifiers, and fold-specific regularization setting. Patient-level
    training and validation identifiers were removed before packaging.

models/combined_crossfitted_meta_model.joblib
    Frozen second-level coefficients and cutoff for the stacked model.

models/radiomics_full66_lr.joblib
    Frozen standalone eight-feature LR pipeline and cutoff.

models/morphologic_PI_only_logistic.joblib
    Frozen pleural-indentation comparator.

fold_model_parameters.json
    Human-readable specifications for all 50 fold-specific base models,
    including feature lists, scaler means/scales, coefficients, and intercepts.

predict_new_cases.py
    Command-line prediction utility. Input is a CSV with one row per case,
    an optional ID column, Pleural_indentation coded 0/1, and all radiomic
    columns named in required_feature_columns.txt.

required_feature_columns.txt
    Union of the radiomic columns used by the 50 base pipelines.

requirements.txt
    Software versions required to load and apply the frozen objects.

SHA256SUMS.txt
    Checksums for integrity verification.

Usage
-----
1. Extract radiomic features using PyRadiomics_parameters.yaml.
2. Create a CSV containing Pleural_indentation (0/1) and every column listed
   in required_feature_columns.txt. An ID column is optional.
3. In the extracted archive, run:

   python predict_new_cases.py input.csv predictions.csv

The output reports probabilities and classifications for the three frozen
models. The combined-model radiomics input is the mean probability across all
50 frozen fold-specific pipelines.

Important limitations
---------------------
The standalone radiomics model showed severe probability miscalibration in the
29-case second-look internal evaluation (calibration slope 0.026). Its output
must not be interpreted as a reliable absolute diagnostic probability. This
archive supports reproducibility; it does not establish clinical deployability.

Compatibility
-------------
The joblib files were created with scikit-learn 1.8.0 and joblib 1.5.3.
Loading serialized scikit-learn objects with different versions is discouraged.
