PreMode / README.md
gzhong's picture
Update README.md
bfbdd3d verified
metadata
language:
  - en
pipeline_tag: graph-ml
tags:
  - biology

PreMode

This is the repository for our manuscript "PreMode predicts mode-of-action of missense variants by deep graph representation learning of protein sequence and structural context" posted on bioRxiv: https://www.biorxiv.org/content/10.1101/2024.02.20.581321v3

Data

Unzip the files with this script:

bash unzip.files.sh

Unfortunately we are not allowed to share the HGMD data, so in the data.files/pretrain/training.* files we removed all the pathogenic variants from HGMD (49218 in total). This might affect the plots of analysis/figs/fig.sup.12.pdf and analysis/figs/fig.sup.13.pdf if you re-run the R codes in analysis/ folder.

We shared the trained weights of our models trained using HGMD instead.

Install Packages

Please install the necessary packages using

mamba env create -f PreMode.yaml
mamba env create -f r4-base.yaml

You can check the installation by running

conda activate PreMode
python train.py --conf scripts/TEST.yaml --mode train

If no error occurs, it means successful installation.

New Experiment

Start from scratch and use our G/LoF datasets

  1. Please prepare a folder under scripts/ and create a file named pretrain.seed.0.yaml inside the folder, check scripts/PreMode/pretrain.seed.0.yaml for example.
  2. Run pretrain in pathogenicity task:
    python train.py --conf scripts/NEW_FOLDER/pretrain.seed.0.yaml
    
  3. Prepare transfer learning config files:
    bash scripts/DMS.prepare.yaml.sh scripts/NEW_FOLDER/
    
  4. Run transfer learning:
    bash scripts/DMS.5fold.run.sh scripts/NEW_FOLDER TASK_NAME GPU_ID
    
    If you have multiple tasks, just separate each task by comma in the TASK_NAME, like "task_1,task_2,task_3".
  5. (Optional) To reuse the transfer learning tasks in our paper using 8 GPU cards, just do
    bash transfer.all.sh scripts/NEW_FOLDER
    
    If you only have one GPU card, then do
    bash transfer.all.in.one.card.sh scripts/NEW_FOLDER
    
  6. Save inference results:
    bash scripts/DMS.5fold.inference.sh scripts/NEW_FOLDER analysis/NEW_FOLDER TASK_NAME GPU_ID
    
  7. You'll get a folder analysis/NEW_FOLDER/TASK_NAME with 5 .csv files, each file has 4 columns logits.FOLD.[0-3]. Each column represent the G/LoF prediction at one cross-validation (closer to 0 means more likely GoF, closer to 1 means more likely LoF). We suggest averaging the predictions at 4 columns.

Only transfer learning, user defined mode-of-action datasets

  1. Prepare a .csv file for training and inference, there are two accepted formats:

    • Format 1 (only for missense variants):

      uniprotID aaChg score ENST
      P15056 p.V600E 1 ENST00000646891
      P15056 p.G446V -1 ENST00000646891
      • uniprotID: the uniprot ID of the protein.
      • aaChg: the amino acid change induced by missense variant.
      • score: 1 for GoF, -1 for LoF. For inference it is not required. For DMS, this could be experimental readouts. If you have multiplexed assays, you can change it to score.1, score.2, score.3, ..., score.N.
      • ENST (optional): the ensemble transcript ID that matched the uniprotID.
    • Format 2 (can be missense variant or multiple variants):

      uniprotID ref alt pos.orig score ENST wt.orig sequence.len.orig
      P15056 V E 600 1 ENST00000646891 ... 766
      P15056 G V 446 -1 ENST00000646891 ... 766
      P15056 G;V V;F 446;471 -1 ENST00000646891 ... 766
      • uniprotID: the uniprot ID of the protein.
      • ref: the reference amino acid, if multiple variants, separated by ";".
      • alt: the alternative, if multiple variants, separated by ";" in the same order of "ref".
      • pos.orig: the amino acid change position, if multiple variants, separated by ";" in the same order of "ref".
      • score: same as above.
      • ENST (optional): same as above.
      • wt.orig: the wild type protein sequence, in the uniprot format.
      • sequence.len.orig: the wild type protein sequence length.
    • If you prepared your input in Format 1, please run

      bash parse.input.table/parse.input.table.sh YOUR_FILE TRANSFORMED_FILE
      

      to transform it to Format 2, note it will drop some lines if your aaChg doesn't match the corresponding alphafold sequence.

  2. Prepare a config file for training the model and inference.

    bash scripts/prepare.new.task.yaml.sh PRETRAIN_MODEL_NAME YOUR_TASK_NAME YOUR_TRAINING_FILE YOUR_INFERENCE_FILE TASK_TYPE MODE_OF_ACTION_N
    
    • PRETRAIN_MODEL_NAME could be one of the following:
      • scripts/PreMode: Default PreMode
      • scripts/PreMode.ptm: PreMode + ptm as input
      • scripts/PreMode.noStructure: PreMode without structure input
      • scripts/PreMode.noESM: PreMode, replaced ESM2 input with one-hot encodings of 20 AAs.
      • scripts/PreMode.noMSA: PreMode without MSA input
      • scripts/ESM.SLP: ESM embedding + Single Layer Perceptron
    • YOUR_TASK_NAME can be anything on your preference
    • YOUR_TRAINING_FILE is the training file you prepared in step 1.
    • YOUR_INFERENCE_FILE is the inference file you prepared in step 1.
    • TASK_TYPE could be DMS or GLOF.
    • MODE_OF_ACTION_N The number of dimensions of mode-of-action. For GLOF this is usually 1. For multiplexed DMS dataset, this could be the number of biochemical properties measured. Note that if it is larger than 1, then you have to make sure the score column in step 1 is replaced to score.1, score.2, ..., score.N correspondingly.
  3. Run your config file

    conda activate PreMode
    bash scripts/run.new.task.sh PRETRAIN_MODEL_NAME YOUR_TASK_NAME OUTPUT_FOLDER GPU_ID 
    

    This should take ~30min on a NVIDIA A40 GPU depending on your data set size.

  4. You'll get a file in the OUTPUT_FOLDER named as YOUR_TASK_NAME.inference.result.csv.

    • If your TASK_TYPE is GLOF, then the column logits will be the inference results. Closer to 0 means GoF, closer to 1 means LoF.
    • If your TASK_TYPE is DMS and MODE_OF_ACTION_N is 1, then the column logits will be the inference results. If your MODE_OF_ACTION_N is larger than 1, then you will get multiple columns of logits.*, each represent a predicted DMS measurement.

Models & Figures in our manuscript

Pretrained Models

Here is the list of models in our manuscript:

scripts/PreMode/ PreMode, it takes 250 GB RAM and 4 A40 Nvidia GPUs to run, will finish in ~50h.

scripts/ESM.SLR/ Baseline Model, ESM2 (650M) + Single Layer Perceptron

scripts/PreMode.large.window/ PreMode, window size set to 1251 AA.

scripts/PreMode.noESM/ PreMode, replace the ESM2 embeddings to one hot encodings of 20 AA.

scripts/PreMode.noMSA/ PreMode, remove the MSA input.

scripts/PreMode.noPretrain/ PreMode, but didn't pretrain on ClinVar/HGMD.

scripts/PreMode.noStructure/ PreMode, remove the AF2 predicted structure input.

scripts/PreMode.ptm/ PreMode, add the onehot encoding of post transcriptional modification sites as input.

scripts/PreMode.mean.var/ PreMode, it will output both predicted value (mean) and confidence (var), used in adaptive learning tasks.

Predicted mode-of-action

gene file
BRAF analysis/5genes.all.mut/PreMode/P15056.logits.csv
RET analysis/5genes.all.mut/PreMode/P07949.logits.csv
TP53 analysis/5genes.all.mut/PreMode/P04637.logits.csv
KCNJ11 analysis/5genes.all.mut/PreMode/Q14654.logits.csv
CACNA1A analysis/5genes.all.mut/PreMode/O00555.logits.csv
SCN5A analysis/5genes.all.mut/PreMode/Q14524.logits.csv
SCN2A analysis/5genes.all.mut/PreMode/Q99250.logits.csv
ABCC8 analysis/5genes.all.mut/PreMode/Q09428.logits.csv
PTEN analysis/5genes.all.mut/PreMode/P60484.logits.csv

For each file, column logits.0 is predicted pathogenicity. column logits.1 is predicted LoF probability, logits.2 is predicted GoF probability. For PTEN, column logits.1 is predicted stability, 0 is loss, 1 is neutral, logits.2 is predicted enzyme activity, 0 is loss, 1 is neutral

Figures

Please go to analysis/ folder and run the corresponding R scripts.