Metadata-Version: 2.4
Name: radiomicsmodellingsuite
Version: 0.2.6
Summary: Details about the package
Author: AllisonNg067
Author-email: allison.ng@uwa.edu.au
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: asttokens==3.0.0
Requires-Dist: attrs==18.2.0
Requires-Dist: autograd==1.8.0
Requires-Dist: autograd-gamma==0.5.0
Requires-Dist: Bottleneck==1.4.2
Requires-Dist: Brotli==1.0.9
Requires-Dist: cffi==2.0.0
Requires-Dist: clarabel==0.11.1
Requires-Dist: click==8.1.8
Requires-Dist: cloudpickle==3.0.0
Requires-Dist: colorama==0.4.6
Requires-Dist: comm==0.2.2
Requires-Dist: contourpy==1.3.0
Requires-Dist: cvxpy==1.7.2
Requires-Dist: cycler==0.11.0
Requires-Dist: cytoolz==1.0.1
Requires-Dist: dask==2024.5.0
Requires-Dist: debugpy==1.8.14
Requires-Dist: decorator==5.2.1
Requires-Dist: dicom2nifti==2.3.4
Requires-Dist: docopt==0.6.2
Requires-Dist: ecos==2.0.14
Requires-Dist: exceptiongroup==1.3.0
Requires-Dist: executing==2.2.0
Requires-Dist: fonttools==4.55.3
Requires-Dist: formulaic==1.2.0
Requires-Dist: fsspec==2025.3.2
Requires-Dist: gmpy2==2.2.1
Requires-Dist: imagecodecs==2022.9.26
Requires-Dist: imageio==2.37.0
Requires-Dist: imbalanced-learn==0.12.4
Requires-Dist: imblearn==0.0
Requires-Dist: importlib_metadata==8.7.0
Requires-Dist: importlib_resources==6.4.0
Requires-Dist: interface-meta==1.3.0
Requires-Dist: ipykernel==6.29.5
Requires-Dist: ipython==8.18.1
Requires-Dist: jedi==0.19.2
Requires-Dist: Jinja2==3.1.6
Requires-Dist: joblib==1.4.2
Requires-Dist: jupyter_client==8.6.3
Requires-Dist: jupyter_core==5.8.1
Requires-Dist: kiwisolver==1.4.4
Requires-Dist: lazy_loader==0.4
Requires-Dist: lifelines==0.30.0
Requires-Dist: lime==0.2.0.1
Requires-Dist: llvmlite==0.43.0
Requires-Dist: locket==1.0.0
Requires-Dist: MarkupSafe==3.0.2
Requires-Dist: mkl_fft>=2.0.0
Requires-Dist: mkl_random>=1.2.10
Requires-Dist: mkl-service==2.4.2
Requires-Dist: MLstatkit==0.1.9
Requires-Dist: mpmath==1.3.0
Requires-Dist: narwhals>=2.1.2
Requires-Dist: nest_asyncio==1.6.0
Requires-Dist: networkx==3.2.1
Requires-Dist: neuroCombat==0.2.12
Requires-Dist: neurocombat-sklearn==0.1.3
Requires-Dist: nibabel==5.3.2
Requires-Dist: numba==0.60.0
Requires-Dist: numexpr==2.10.1
Requires-Dist: numpy<2.0
Requires-Dist: ordered-set==4.1.0
Requires-Dist: osqp==1.0.4
Requires-Dist: packaging==24.2
Requires-Dist: pandas==2.3.1
Requires-Dist: parso==0.8.4
Requires-Dist: partd==1.4.2
Requires-Dist: patsy==1.0.1
Requires-Dist: pdflatex==0.1.3
Requires-Dist: pickleshare==0.7.5
Requires-Dist: pillow==11.0.0
Requires-Dist: pip==25.1
Requires-Dist: platformdirs==4.9.6
Requires-Dist: plotly==6.3.0
Requires-Dist: prompt_toolkit==3.0.51
Requires-Dist: psutil==7.0.0
Requires-Dist: pure_eval==0.2.3
Requires-Dist: pycparser==2.21
Requires-Dist: pydicom==2.4.4
Requires-Dist: Pygments==2.19.1
Requires-Dist: pykwalify==1.8.0
Requires-Dist: PyLaTeX==1.4.2
Requires-Dist: pyparsing==3.2.0
Requires-Dist: pyradiomics==3.0.1a1
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: pytz==2024.1
Requires-Dist: pywavelets==1.6.0
Requires-Dist: pywin32==307
Requires-Dist: PyYAML==6.0.2
Requires-Dist: pyzmq==26.2.0
Requires-Dist: qdldl==0.1.7.post5
Requires-Dist: ruamel.yaml==0.18.10
Requires-Dist: ruamel.yaml.clib==0.2.12
Requires-Dist: scikit-image==0.24.0
Requires-Dist: scikit-learn==1.6.1
Requires-Dist: scipy==1.13.1
Requires-Dist: scs==3.2.8
Requires-Dist: seaborn==0.13.2
Requires-Dist: setuptools==78.1.1
Requires-Dist: shap==0.48.0
Requires-Dist: simplegeneric==0.8.1
Requires-Dist: SimpleITK==2.2.1
Requires-Dist: sip==6.10.0
Requires-Dist: six==1.17.0
Requires-Dist: slicer==0.0.8
Requires-Dist: stack_data==0.6.3
Requires-Dist: statsmodels==0.14.4
Requires-Dist: sympy==1.14.0
Requires-Dist: threadpoolctl==3.5.0
Requires-Dist: tifffile==2022.10.10
Requires-Dist: tomli==2.0.1
Requires-Dist: toolz==1.0.0
Requires-Dist: tornado==6.5.1
Requires-Dist: tqdm==4.67.1
Requires-Dist: traitlets==5.14.3
Requires-Dist: trimesh==4.6.11
Requires-Dist: typing_extensions==4.14.0
Requires-Dist: tzdata==2025.2
Requires-Dist: tzlocal==5.2
Requires-Dist: unicodedata2==15.1.0
Requires-Dist: wcwidth==0.2.13
Requires-Dist: wheel==0.45.1
Requires-Dist: wrapt==1.17.3
Requires-Dist: xgboost==2.1.3
Requires-Dist: zipp==3.21.0
Dynamic: author
Dynamic: author-email
Dynamic: description
Dynamic: description-content-type
Dynamic: license-file
Dynamic: requires-dist
Dynamic: summary

# Radiomics Modelling Suite

Radiomics Modelling Suite (RMS) is for building and evaluating radiomics machine learning models from raw medical images and corresponding segmentations using Python. Each stage of the RMS outputs a PDF report reporting the details of that stage. 

RMS is designed to aid adherence to the [RQS](https://www.nature.com/articles/nrclinonc.2017.141) and [METRICS](https://link.springer.com/article/10.1186/s13244-023-01572-w) criteria, developed by Lambin *et al.* and Kocak *et al.* respectively, by automatically reporting the information required for a high RQS or METRICS score. This will increase transparency in reporting of radiomics studies, leading to increased reliability of the results of the study. 

RMS is capable of processing PET, MRI, or CT medical images in dicom format. Models can be trained from radiomics features extracted from different imaging modalities, such as radiomics features from PET and MRI data from the same patient. Binary classification and survival model training is supported.

**Not approved for clinical use.**

## Stages of the Radiomics Pipeline

RMS incorporates the following stages of the radiomics pipeline.
1. Sample size calculation
2. Data preparation
3. Image pre-processing
4. Feature extraction
5. Feature Selection
6. Model Training
7. Model Evaluation

### Sample Size Calculation

There are two modules present for sample size calculation: one which calculates the sample size for a prospective study, and another which calculates the sample size for a validation study. 

### Data Preparation

RMS reads DICOM medical images and registers them to their corresponding NIfTI segmentations before converting them to NIfTI files. The acquisition parameters from the DICOM files are reported as a PDF and are used to calculate the SUV values in PET images. If multiple segmentations for a given patient are specified (for example, automatic and manual segmentations), the segmentations can be compared using a variety of metrics.

### Image Pre-Processing

The available pre-processing modules include image normalisation, gray-level discretisation, and resampling. Two methods of normalisation are available: normalisation of values to a fixed range specified by the user and normalisation of values to their Z-score. For gray-level discretisation, the user can specify the bin width or the number of bins for the gray-levels they desire.

### Feature Extraction

The feature extraction module was built using the feature extractor implemented by [PyRadiomics](https://github.com/AIM-Harvard/pyradiomics/tree/master/radiomics), which automates the extraction of features which adhere to the IBSI standard for radiomics feature extraction. In addition to the features extracted by PyRadiomics, the software also extracts the normalised hotspot to centroid distance, which was found to be predictive of survival in Chen *et al.*'s [study](https://link.springer.com/article/10.1007/s00259-025-07659-4) (2025).

### Feature Selection

Feature selection is crucial for radiomics models as radiomics data is high-dimensional (number of features is greater than sample size), leading to trained radiomics models overfitting to the training data. Harmonisation using the ComBat and HarMSTD methods is supported to account for inter-scanner variability. Features can be filtered by their robustness (comparing feature values between different segmentations of the same patient), and by their redundancy (only keeping predictive features which are not highly correlated with each other). Principal component analysis is also supported: however, this is not strictly a feature selection method as the features are transformed to linear combinations before dimensionality reduction is performed.

### Model Training

The model training module supports the training of a logistic regression, decision tree, SVM, random forest, or [XGBoost](https://github.com/dmlc/xgboost) model for classification problems. Cross-validation to optimise hyperparameters using grid search is optional. Survival analysis using the Kaplan-Meier estimator, the Cox proportional hazards model, and accelerated failure time models is also supported using the Python [lifelines](https://github.com/lifelines/lifelines) package.

### Model Evaluation

There are four stages of model evaluation supported by RMS:
1. Discrimination analysis

    Selects the optimal threshold for classification and evaluates model's performance.

2. Model calibration analysis

    Evaluates the agreement between the model's prediction of risk and the observed risk.
   
3. Decision curve analysis

    Quantifies the clinical value of the model as a diagnostic test.
   
4. Model explainability

   Helps the researcher understand the model's reasoning behind its predictions, improving model trustworthiness.

## Quality Scores

### RQS

Using all modules of RMS will result in a [RQS](https://www.nature.com/articles/nrclinonc.2017.141) score of at least 33.3% if automatic segmentations are not available and 36.1% if both automatic and manual segmentations are available. The [RQS 2.0](https://www.nature.com/articles/s41571-025-01067-1) score at Radiomics Readiness Level (RRL) 9 is at least 26.7% if automatic segmentations are not available and 32.1% if both automatic and manual segmentations are available.

### METRICS

Using all modules of RMS will result in a [METRICS](https://link.springer.com/article/10.1186/s13244-023-01572-w) score of at least 51.1% if automatic segmentations are not available and 52.2% if both automatic and manual segmentations are available.
