|
# 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.581321v2 |
|
|
|
# Data |
|
Please use the git lfs to download all files in `data.files/` folder |
|
|
|
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. |
|
|