Skip to content

Repository files navigation

PPD Driver Variants Pipeline

Computational pipeline for the paper:


Overview

This repository contains the full analysis pipeline used to identify and characterize POLE/POLD1 deficiency (PPD) driver variants across 235,161 sequenced tumors from three large cancer genomic databases: AACR GENIE v16.1, TCGA, and China Pan-Cancer (CPC).

The pipeline:

  1. Preprocesses and merges mutation data across cohorts
  2. Classifies tumors as MMR-deficient (MMRd) or MMR-proficient (MMRp)
  3. Identifies PPD tumors using an iterative Support Vector Machine (SVM) algorithm
  4. Classifies POLE/POLD1 variants as driver or passenger
  5. Performs structural clustering, amino acid substitution analysis, and survival analysis

Repository Structure

PPD-driver-variants-pipeline/
│
├── preprocessing/
│   ├── clean_data.py                  # Merge and preprocess GENIE, TCGA, CPC MAF files
│   └── prepare_poled1_samples.py      # Filter POLE/POLD1 samples, compute signatures & ratios
│
├── mmr_classification/
│   ├── mmr_classification.py          # Classify all samples as MMRd/MMRp using MS-indels + signatures
│   └── mmr_sanity_check.py            # Validate MMR classification against MSKCC CHORD 2024 cohort
│
├── svm_classification/
│   ├── svm_ppd_classifier.py          # Iterative linear SVM to classify PPD tumors (MMRp & MMRd)
│   └── classify_no_poled1_samples.py  # Apply trained SVM to tumors without POLE/POLD1 variants
│
├── driver_classification/
│   ├── classify_driver_variants.py    # Classify variants as driver/passenger (binomial + z-test)
│   └── compare_sequencing_centers.py  # Test for center-specific bias in PPD classification
│
├── visualization/
│   ├── plot_ppd_classification.py     # Scatter plots of SVM-classified PPD tumors
│   ├── plot_cancer_types.py           # PPD frequency by cancer type
│   └── saturation_analysis.R          # Saturation curve: driver discovery vs. sample size
│
├── structural_analysis/
│   └── hierarchical_clustering_pole.py  # 3D clustering of POLE ExoD variants using AlphaFold structure
│
├── aa_analysis/
│   └── AA_substitution_analysis.R     # Amino acid substitution profiles & cosine similarity analysis
│
├── survival_analysis/
│   └── genie_tcga_survival.py         # Vital status and Kaplan-Meier analysis (GENIE + TCGA)
│
├── environment.yml                    # Conda environment for Python dependencies
├── requirements.txt                   # pip requirements for Python dependencies
├── r_requirements.R                   # R package installation script
└── README.md

Pipeline Execution Order

Run scripts in the following order:

Step 1 — Preprocessing

python preprocessing/clean_data.py
python preprocessing/prepare_poled1_samples.py

Input: Raw MAF files from GENIE, TCGA, CPC + clinical sample tables
Output: combined_maf_mod.csv, poled1_samples.csv, main.csv

Step 2 — MMR Classification

python mmr_classification/mmr_classification.py
python mmr_classification/mmr_sanity_check.py   # optional validation

Input: main.csv, MS-indel counts (from Phobos), MSKCC CHORD 2024 cohort
Output: main_selected_ttypes.csv with MMRd column; validation metrics

Step 3 — SVM PPD Classification

python svm_classification/svm_ppd_classifier.py
python svm_classification/classify_no_poled1_samples.py

Input: main_selected_ttypes.csv
Output: main_classified_svm.csv, Table 3.xlsx (PPD tumors without POLE/POLD1 variants)

Step 4 — Driver Variant Classification

python driver_classification/classify_driver_variants.py
python driver_classification/compare_sequencing_centers.py  # optional center bias check

Input: main_classified_svm.csv, known_driver_list.csv
Output: drivers_list.csv, drivers_list.xlsx, main_classified_all.csv

Step 5 — Visualization & Downstream Analysis

# Python
python visualization/plot_ppd_classification.py
python visualization/plot_cancer_types.py
python survival_analysis/genie_tcga_survival.py
python structural_analysis/hierarchical_clustering_pole.py

# R
Rscript visualization/saturation_analysis.R
Rscript aa_analysis/AA_substitution_analysis.R

Data Availability

All datasets used are publicly available:

Dataset Version Access
AACR GENIE v16.1 Synapse syn51355584
TCGA PanCancer cBioPortal
China Pan-Cancer (CPC) cBioPortal
MSKCC CHORD 2024 cBioPortal
AlphaFold POLE structure AF-Q07864-F1-model_v6 AlphaFold DB

Note: The MS-indel counting step referenced in several scripts was performed in R using the data.table package for performance, overlapping indels against a microsatellite locus file generated by Phobos.


Installation

Python (conda — recommended)

conda env create -f environment.yml
conda activate ppd-pipeline

Python (pip)

pip install -r requirements.txt

R

source("r_requirements.R")

Key Intermediate Files

File Description
combined_maf_mod.csv Merged & cleaned MAF across all three cohorts
poled1_samples.csv Samples with POLE/POLD1 missense SNVs
main.csv Signature ratios and metadata for POLE/POLD1 samples
main_selected_ttypes.csv Filtered to relevant tumor types with MMRd classification
main_classified_svm.csv After iterative SVM PPD classification
main_classified_all.csv Final file with driver/passenger/unsolved labels
drivers_list.csv / .xlsx Final curated list of 65 PPD driver variants
known_driver_list.csv Previously reported driver variants used as training labels

Contact

For questions, please contact Yosef E. Maruvka (Technion, Israel) or open a GitHub issue.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages