File size: 8,542 Bytes
3afebda
 
 
 
 
 
 
7718235
bfbdd3d
7718235
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3afebda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
---
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.