Name | phosx JSON |

Version | 0.9.2 JSON |

download | |

home_page | None |

Summary | Differential kinase activity inference from phosphosproteomics data |

upload_time | 2024-11-01 12:59:40 |

maintainer | None |

docs_url | None |

author | Alessandro Lussana |

requires_python | <4.0,>=3.10 |

license | None |

keywords | |

VCS | |

bugtrack_url | |

requirements | No requirements were recorded. |

Travis-CI | No Travis. |

coveralls test coverage | No coveralls. |

<p align="center"> <img width="190" src="https://i.imgur.com/OzGTvkt.png"> <br> Kinase activity inference from phosphosproteomics data based on substrate sequence specificity <br><br> </p> ![Build and publish to PyPI badge](https://github.com/alussana/phosx/actions/workflows/build-and-publish-to-pypi.yml/badge.svg) > Current version: `0.9.2` > Research paper: [https://doi.org/10.1101/2024.03.22.586304](https://doi.org/10.1101/2024.03.22.586304) > Benchmark: [https://github.com/alussana/phosx-benchmark](https://github.com/alussana/phosx-benchmark) > Data: [https://github.com/alussana/kinase_pssms](https://github.com/alussana/kinase_pssms) # Overview <p align="center"> <br> <img width="900" src="https://i.imgur.com/6DdMDom.png"> <br> </p> PhosX infers differential kinase activities from phosphoproteomics data without requiring any prior knowledge database of kinase-phosphosite associations. PhosX assigns the detected phosphopeptides to potential upstream kinases based on experimentally determined substrate sequence specificities, and it tests the enrichment of a kinase's potential substrates in the extremes of a ranked list of phosphopeptides using a Kolmogorov-Smirnov-like statistic. A _p_ value for this statistic is extracted empirically by random permutations of the phosphosite ranks. # Installation ## From [PyPI](https://pypi.org/project/phosx/) ```bash pip install phosx ``` ## From source (requires [Poetry](https://python-poetry.org)) ``` poetry build pip install dist/*.whl ``` # Usage PhosX can be used as a command line tool (`phosx`) with minimal effort. Its output is redirected by default in `STDOUT`, making it easy to use in bioinformatics pipelines. Alternatively, the user can specify an output filename (option `-o`). Example: run PhosX with default parameters on an example dataset, using up to 8 cores, and redirecting the output table to `kinase_activities.tsv`: ```bash phosx -c 8 tests/seqrnk/koksal2018_log2.fold.change.8min.seqrnk > kinase_activities.tmp ``` A full description of the command line options can be viewed with `phosx -h`: ```bash usage: phosx [-h] [-yp Y_PSSM] [-stp S_T_PSSM] [-yq Y_PSSM_QUANTILES] [-stq S_T_PSSM_QUANTILES] [-n N_PERMUTATIONS] [-stk S_T_N_TOP_KINASES] [-yk Y_N_TOP_KINASES] [-mh MIN_N_HITS] [-mp MIN_QUANTILE] [-c N_PROC] [--plot-figures] [-d OUTPUT_DIR] [-o OUTPUT_PATH] [-v] seqrnk Kinase activity inference from phosphosproteomics data based on substrate sequence specificity positional arguments: seqrnk Path to the seqrnk file. options: -h, --help show this help message and exit -yp Y_PSSM, --y-pssm Y_PSSM Path to the h5 file storing custom Tyr PSSMs; defaults to built-in PSSMs -stp S_T_PSSM, --s-t-pssm S_T_PSSM Path to the h5 file storing custom Ser/Thr PSSMs; defaults to built-in PSSMs -yq Y_PSSM_QUANTILES, --y-pssm-quantiles Y_PSSM_QUANTILES Path to the h5 file storing custom Tyr kinases PSSM score quantile distributions under the key 'pssm_scores'; defaults to built-in PSSM scores quantiles -stq S_T_PSSM_QUANTILES, --s-t-pssm-quantiles S_T_PSSM_QUANTILES Path to the h5 file storing custom Ser/Thr kinases PSSM score quantile distributions under the key 'pssm_scores'; defaults to built-in PSSM scores quantiles -n N_PERMUTATIONS, --n-permutations N_PERMUTATIONS Number of random permutations; default: 1000 -stk S_T_N_TOP_KINASES, --s-t-n-top-kinases S_T_N_TOP_KINASES Number of top-scoring Ser/Thr kinases potentially associatiated to a given phosphosite; default: 5 -yk Y_N_TOP_KINASES, --y-n-top-kinases Y_N_TOP_KINASES Number of top-scoring Tyr kinases potentially associatiated to a given phosphosite; default: 5 -mh MIN_N_HITS, --min-n-hits MIN_N_HITS Minimum number of phosphosites associated with a kinase for the kinase to be considered in the analysis; default: 4 -mp MIN_QUANTILE, --min-quantile MIN_QUANTILE Minimum PSSM score quantile that a phosphosite has to satisfy to be potentially assigned to a kinase; default: 0.95 -c N_PROC, --n-proc N_PROC Number of cores used for multithreading; default: 1 --plot-figures Save figures in pdf format; see also --output_dir -d OUTPUT_DIR, --output-dir OUTPUT_DIR Output files directory; only relevant if used with --plot_figures; defaults to 'phosx_output/' -o OUTPUT_PATH, --output-path OUTPUT_PATH Main output table; if not specified it will be printed in STDOUT -v, --version Print package version and exit ``` For a full description of the method please see the [Method](#method) section and the [manuscript](https://doi.org/10.1101/2024.03.22.586304). ## Input ### _seqrnk_ PhosX's input format is a simple text file that we name _seqrnk_. It consists of 2 tab-separated columns containing phosphopeptide sequences and values, respectively. The values should be biologically relevant measures of differential phosphorylation, typically intensity log fold changes as obtained when comparing two conditions in mass spectrometry experiments. Amino acid sequences should be of length $10$, with the phosphorylated residue in position $6$ (1-based), in order to match the Position Specific Scoring Matrix (PSSM) models (see [Ser/Thr PSSMs](https://doi.org/10.1038/s41586-022-05575-3) & [Tyr PSSMs](https://doi.org/10.1038/s41586-024-07407-y)). Undefined amino acids are represented by the character `_`. Every other residue is represented by the corresponding 1-letter symbol according to the IUPAC nomenclature for amino acids and additional phosphorylated Serine, Threonine or Tyrosine residues are represented with the symbols `s`, `t`, and `y`, respectively. Phosphorylated residues that act as potential priming sites and are therefore not in the $6^{th}$ position of the peptide are represented with lowercase letters. An example is included in this repository: ```bash $ head tests/seqrnk/koksal2018_log2.fold.change.8min.seqrnk QEEAEYVRAL 5.646644 ANFSAYPSEE 4.33437 YLNRNYWEKK 4.174151 AENAEYLRVA 3.685413 STYTSYPKAE 3.491975 SFLQRYSSDP 3.295341 AAEPGSPTAA 3.202242 EPAHAYAQPQ 3.160899 RQKSTYTSYP 3.114077 ETKSLYPSSE 3.04653 ``` Alongside the main program, this package also installs `make-seqrnk`. This utily can be used to help generating a _seqrnk_ file given a list of phosphosites, each one identified by a UniProt Acession Number and residue coordinate. `make-seqrnk` will query the [UniProt](https://www.uniprot.org) database to fetch the appropriate subsequences to build the _seqrnk_ file. See `make-seqrnk -h` for more details: ```bash usage: make-seqrnk [-h] [-i INPUT] [-o OUTPUT] Make a seqrnk file to be used to compute differential kinase activity with PhosX options: -h, --help show this help message and exit -i INPUT, --input INPUT Path of the input phosphosites to be converted in seqrnk format. It should be a TSV file where the 1st column is the UniProtAC (str), the 2nd is the sequence coordinate (int), and the 3rd is the logFC (float); defaults to STDIN -o OUTPUT, --output OUTPUT Path of the seqrnk file; if not specified it will be printed in STDOUT ``` Run an example: ```bash cat tests/p_list/15_3.tsv | make-seqrnk > 15_3.seqrnk ``` ### PSSMs PhosX estimates the affinity between human kinases and phosphopeptides based on the substrate sequence specificity encoded in Position Specific Scoring Matrices (PSSMs). A kinase PSSM is a $10 \times 23$ matrix containing amino acid affinity scores at each one of the $10$ positions of the substrate. The 6\textsuperscript{th} position corresponds to the modified residue and should have non-$0$ values only for Serine, Threonine (for Ser/Thr kinases), or Tyrosine (for Tyr kinases) residues. PhosX comes with built-in, default PSSMs for human kinases, that can be found at `phosx/data/*_PSSMs.h5`. The user can also run PhosX using custom PSSMs, whose path can be specified with the options `-yp` and `-stp`. For convenience, here is a function that can be used to open and inspect the structure of the Hierarchical Data Format version 5 (HDF5) files where the PSSMs are stored: ```python import h5py AA_LIST = [ "G","P","A","V","L","I", "M","C","F","Y","W","H", "K","R","Q","N","E","D", "S","T","s","t","y", ] POSITIONS_LIST = list(range(-5, 5)) def read_pssms(pssms_h5_file: str): pssms_h5 = h5py.File(pssms_h5_file, "r") pssm_df_dict = {} for kinase in pssms_h5.keys(): pssm_df_dict[kinase] = pd.DataFrame(pssms_h5[kinase]) pssm_df_dict[kinase].columns = AA_LIST pssm_df_dict[kinase].index = POSITIONS_LIST return pssm_df_dict ``` Similarly, PhosX also has built-in kinase PSSM scores quantile distributions computed on a reference human phosphoproteome from the [PhosphositePlus](https://www.phosphosite.org/) database. These can be found at `phosx/data/*_PSSM_score_quantiles.h5`. When supplying custom PSSMs, it is necessary to also specify the appropriate background distributions with the options `-yq` and `-stq`. Inspect the HDF5 files containing the background PSSM scores with: ```python import h5py def read_pssm_score_quantiles(pssm_score_quantiles_h5_file: str): pssm_bg_scores_df = pd.read_hdf(pssm_score_quantiles_h5_file, key="pssm_scores") return pssm_bg_scores_df ``` ## Output PhosX's main output is a text file reporting the computed kinase activities with associated statistics as described in the [Method](#method) section. For each kinase, the KS statistics, the _p_ value, the FDR _q_ value, and the Activity Score are reported. Note that kinases for which an Activity Score could not be computed (for example for lack of matching phosphopeptides in the input data) are omitted in the current version. See an output example from the command executed [above](#usage): ```bash $ head kinase_activities.tmp KS p value FDR q value Activity Score AAK1 -0.2476131530554456 0.533 1.0 -0.2732727909734277 ACVR1B -0.36580307230946174 0.078 1.0 -1.1079053973095196 ACVR2A 0.2259224236806207 0.439 1.0 0.35753547975787864 ACVR2B 0.47014516632215597 0.019 1.0 1.7212463990471711 ALK2 -0.25190558854944195 0.276 1.0 -0.5590909179347823 ALPHAK3 -0.2875279855211264 0.358 1.0 -0.44611697335612566 ALPK3 0.5759513630398431 0.041 1.0 1.3872161432802645 AMPKA2 0.4401107718873606 0.299 1.0 0.5243288116755703 ATM -0.49337471491068263 0.096 1.0 -1.0177287669604316 ``` Additionally, PhosX can also save plots of the of the weighted running sum and of the KS statistic compared to its empirical null distribution, similarly to the ones show [above](#overview), for each kinase. To enable this behavior the option `--plot-figures` must be specified. A custom directory to save the plots can be passed with `-d`. # Method ## Phosphopeptide scoring For each kinase PSSM, a score is assigned to each phosphopeptide sequence $S$ that quantifies its similarity to the PSSM. First, a "raw PSSM score" is computed as: ```math \texttt{score}(S,k) := \prod_{i=-5}^{4} \begin{cases} M^{k}_{i,S_i}, & \text{if } S_i \neq \texttt{'\_'} \\ 1, & \text{if } S_i = \texttt{'\_'} \end{cases} ``` where $S_i$ is the amino acid residue at position $i$ of the phosphopeptide sequence $S$; $M^k_{i,j}$ is the value of the PSSM for kinase $k$ at position $i$ for residue $j$. Raw PSSM scores for each kinase are then transformed between $0$ and $1$ based on the quantile they fall in, considering a background distribution of proteome-wide raw PSSM scores. For each kinase, phosphopeptides with raw PSSM score equal to $0$ are discarded, and the remaining are used to determine the values of the $10,000$-quantiles of the raw PSSM score distribution. The background $10,000$-quantiles raw PSSM scores for each kinase PSSM are used to derive the final PSSM scores for each phosphopeptide. ￼ ## Weighted running sum statistic PhosX uses the PSSM scores to link kinases to their potential substrates. Each phosphopeptide is assigned as potential target to its $n$ top-scoring kinases, with default value of $10$. With the method has little sensitivity to this parameter in the range $[5,15]$. The activity change of a given kinase is estimated by calculating a running sum statistic over the ranked list of phosphosites, and by estimating its significance based on an empirical distribution generated by random permutations of the ranks. Let $C$ be the set of indexes corresponding to the ranked phosphosites associated with kinase $k$; $N$ the total number of phosphosites; $N_h$ the size of $C$; $r_i$ the value of the ranking metric of the phosphosite at rank $i$, where $r_0$ is the highest value. Then, the running sum ($RS$) up to the phosphosite rank $n$ is given by ```math RS(k,n) := \sum_{i=0}^{n} \begin{cases} \frac{|r_i|}{N_R}, & \text{if } i \in C \\ -\frac{1}{N - N_h}, & \text{if } i \not\in C \end{cases} ``` where ```math N_R = \sum_{i \in C} |r_i| ``` The kinase enrichment score ($ES$) corresponds to the maximum deviation from $0$ of $RS$. ## Permutation tests For each kinase, PhosX computes an empirical _p_ value of the $ES$ by generating a null distribution of the $ES$ through random permutations of the phosphosite ranks. A False Discovery Rate (FDR) _q_ value is also calculated by applying the Bonferroni method considering the number of kinases independently tested. The number of permutations is a tunable parameter but we recommend performing at least $10^4$ random permutations to be able to compute FDR values $< 0.05$. ## Kinase activity score The activity score for a given kinase is defined as: ```math Activity = -\log_{10}{(p)} * \texttt{sign}(ES) ``` where \texttt{sign} is the sign function, and $-log_{10}{(p)}$ is capped at the smallest computable \textit{p} value different from $0$, _i.e._ the inverse of the number of random permutations. Activity scores greater than $0$ denote kinase activation, while the opposite corresponds to kinase inhibition. # Cite BibTeX: ```bibtex @article{Lussana2024, title = {PhosX: data-driven kinase activity inference from phosphoproteomics experiments}, url = {http://dx.doi.org/10.1101/2024.03.22.586304}, DOI = {10.1101/2024.03.22.586304}, publisher = {Cold Spring Harbor Laboratory}, author = {Lussana, Alessandro and Petsalaki, Evangelia}, year = {2024}, month = mar } ```

{ "_id": null, "home_page": null, "name": "phosx", "maintainer": null, "docs_url": null, "requires_python": "<4.0,>=3.10", "maintainer_email": null, "keywords": null, "author": "Alessandro Lussana", "author_email": "alussana@ebi.ac.uk", "download_url": "https://files.pythonhosted.org/packages/56/57/4ec8087d577a125322bb41bcb2facce522a2058f7b2a8ed4dcc8e8e0538e/phosx-0.9.2.tar.gz", "platform": null, "description": "<p align=\"center\">\n <img width=\"190\" src=\"https://i.imgur.com/OzGTvkt.png\">\n <br>\n Kinase activity inference from phosphosproteomics data based on substrate sequence specificity\n <br><br>\n</p>\n\n![Build and publish to PyPI badge](https://github.com/alussana/phosx/actions/workflows/build-and-publish-to-pypi.yml/badge.svg)\n\n> Current version: `0.9.2`\n\n> Research paper: [https://doi.org/10.1101/2024.03.22.586304](https://doi.org/10.1101/2024.03.22.586304)\n\n> Benchmark: [https://github.com/alussana/phosx-benchmark](https://github.com/alussana/phosx-benchmark)\n\n> Data: [https://github.com/alussana/kinase_pssms](https://github.com/alussana/kinase_pssms)\n\n# Overview\n\n<p align=\"center\">\n<br>\n <img width=\"900\" src=\"https://i.imgur.com/6DdMDom.png\">\n <br>\n</p>\n\nPhosX infers differential kinase activities from phosphoproteomics data without requiring any prior knowledge database of kinase-phosphosite associations. PhosX assigns the detected phosphopeptides to potential upstream kinases based on experimentally determined substrate sequence specificities, and it tests the enrichment of a kinase's potential substrates in the extremes of a ranked list of phosphopeptides using a Kolmogorov-Smirnov-like statistic. A _p_ value for this statistic is extracted empirically by random permutations of the phosphosite ranks.\n\n# Installation\n\n## From [PyPI](https://pypi.org/project/phosx/)\n\n```bash\npip install phosx\n```\n\n## From source (requires [Poetry](https://python-poetry.org))\n\n```\npoetry build\npip install dist/*.whl\n```\n\n# Usage\n\nPhosX can be used as a command line tool (`phosx`) with minimal effort. Its output is redirected by default in `STDOUT`, making it easy to use in bioinformatics pipelines. Alternatively, the user can specify an output filename (option `-o`). \n\nExample: run PhosX with default parameters on an example dataset, using up to 8 cores, and redirecting the output table to `kinase_activities.tsv`:\n\n```bash\nphosx -c 8 tests/seqrnk/koksal2018_log2.fold.change.8min.seqrnk > kinase_activities.tmp\n```\n\nA full description of the command line options can be viewed with `phosx -h`:\n\n```bash \nusage: phosx [-h] [-yp Y_PSSM] [-stp S_T_PSSM] [-yq Y_PSSM_QUANTILES] [-stq S_T_PSSM_QUANTILES] [-n N_PERMUTATIONS] [-stk S_T_N_TOP_KINASES] [-yk Y_N_TOP_KINASES] [-mh MIN_N_HITS] [-mp MIN_QUANTILE] [-c N_PROC] [--plot-figures] [-d OUTPUT_DIR]\n [-o OUTPUT_PATH] [-v]\n seqrnk\n\nKinase activity inference from phosphosproteomics data based on substrate sequence specificity\n\npositional arguments:\n seqrnk Path to the seqrnk file.\n\noptions:\n -h, --help show this help message and exit\n -yp Y_PSSM, --y-pssm Y_PSSM\n Path to the h5 file storing custom Tyr PSSMs; defaults to built-in PSSMs\n -stp S_T_PSSM, --s-t-pssm S_T_PSSM\n Path to the h5 file storing custom Ser/Thr PSSMs; defaults to built-in PSSMs\n -yq Y_PSSM_QUANTILES, --y-pssm-quantiles Y_PSSM_QUANTILES\n Path to the h5 file storing custom Tyr kinases PSSM score quantile distributions under the key 'pssm_scores'; defaults to built-in PSSM scores quantiles\n -stq S_T_PSSM_QUANTILES, --s-t-pssm-quantiles S_T_PSSM_QUANTILES\n Path to the h5 file storing custom Ser/Thr kinases PSSM score quantile distributions under the key 'pssm_scores'; defaults to built-in PSSM scores quantiles\n -n N_PERMUTATIONS, --n-permutations N_PERMUTATIONS\n Number of random permutations; default: 1000\n -stk S_T_N_TOP_KINASES, --s-t-n-top-kinases S_T_N_TOP_KINASES\n Number of top-scoring Ser/Thr kinases potentially associatiated to a given phosphosite; default: 5\n -yk Y_N_TOP_KINASES, --y-n-top-kinases Y_N_TOP_KINASES\n Number of top-scoring Tyr kinases potentially associatiated to a given phosphosite; default: 5\n -mh MIN_N_HITS, --min-n-hits MIN_N_HITS\n Minimum number of phosphosites associated with a kinase for the kinase to be considered in the analysis; default: 4\n -mp MIN_QUANTILE, --min-quantile MIN_QUANTILE\n Minimum PSSM score quantile that a phosphosite has to satisfy to be potentially assigned to a kinase; default: 0.95\n -c N_PROC, --n-proc N_PROC\n Number of cores used for multithreading; default: 1\n --plot-figures Save figures in pdf format; see also --output_dir\n -d OUTPUT_DIR, --output-dir OUTPUT_DIR\n Output files directory; only relevant if used with --plot_figures; defaults to 'phosx_output/'\n -o OUTPUT_PATH, --output-path OUTPUT_PATH\n Main output table; if not specified it will be printed in STDOUT\n -v, --version Print package version and exit\n```\n\nFor a full description of the method please see the [Method](#method) section and the [manuscript](https://doi.org/10.1101/2024.03.22.586304).\n\n## Input\n\n### _seqrnk_\n\nPhosX's input format is a simple text file that we name _seqrnk_. It consists of 2 tab-separated columns containing phosphopeptide sequences and values, respectively. The values should be biologically relevant measures of differential phosphorylation, typically intensity log fold changes as obtained when comparing two conditions in mass spectrometry experiments. Amino acid sequences should be of length $10$, with the phosphorylated residue in position $6$ (1-based), in order to match the Position Specific Scoring Matrix (PSSM) models (see [Ser/Thr PSSMs](https://doi.org/10.1038/s41586-022-05575-3) & [Tyr PSSMs](https://doi.org/10.1038/s41586-024-07407-y)). Undefined amino acids are represented by the character `_`. Every other residue is represented by the corresponding 1-letter symbol according to the IUPAC nomenclature for amino acids and additional phosphorylated Serine, Threonine or Tyrosine residues are represented with the symbols `s`, `t`, and `y`, respectively. Phosphorylated residues that act as potential priming sites and are therefore not in the $6^{th}$ position of the peptide are represented with lowercase letters. An example is included in this repository:\n\n```bash\n$ head tests/seqrnk/koksal2018_log2.fold.change.8min.seqrnk\n\nQEEAEYVRAL 5.646644\nANFSAYPSEE 4.33437\nYLNRNYWEKK 4.174151\nAENAEYLRVA 3.685413\nSTYTSYPKAE 3.491975\nSFLQRYSSDP 3.295341\nAAEPGSPTAA 3.202242\nEPAHAYAQPQ 3.160899\nRQKSTYTSYP 3.114077\nETKSLYPSSE 3.04653\n```\n\nAlongside the main program, this package also installs `make-seqrnk`. This utily can be used to help generating a _seqrnk_ file given a list of phosphosites, each one identified by a UniProt Acession Number and residue coordinate. `make-seqrnk` will query the [UniProt](https://www.uniprot.org) database to fetch the appropriate subsequences to build the _seqrnk_ file. See `make-seqrnk -h` for more details: \n\n```bash\nusage: make-seqrnk [-h] [-i INPUT] [-o OUTPUT]\n\nMake a seqrnk file to be used to compute differential kinase activity with PhosX\n\noptions:\n -h, --help show this help message and exit\n -i INPUT, --input INPUT\n Path of the input phosphosites to be converted in seqrnk format. It should be a TSV file where the 1st column is the UniProtAC (str), the 2nd is the sequence coordinate (int), and the 3rd is the logFC (float); defaults to STDIN\n -o OUTPUT, --output OUTPUT\n Path of the seqrnk file; if not specified it will be printed in STDOUT\n```\n\nRun an example:\n\n```bash\ncat tests/p_list/15_3.tsv | make-seqrnk > 15_3.seqrnk\n```\n\n### PSSMs\n\nPhosX estimates the affinity between human kinases and phosphopeptides based on the substrate sequence specificity encoded in Position Specific Scoring Matrices (PSSMs). A kinase PSSM is a $10 \\times 23$ matrix containing amino acid affinity scores at each one of the $10$ positions of the substrate. The 6\\textsuperscript{th} position corresponds to the modified residue and should have non-$0$ values only for Serine, Threonine (for Ser/Thr kinases), or Tyrosine (for Tyr kinases) residues.\n\nPhosX comes with built-in, default PSSMs for human kinases, that can be found at `phosx/data/*_PSSMs.h5`. The user can also run PhosX using custom PSSMs, whose path can be specified with the options `-yp` and `-stp`. \n\nFor convenience, here is a function that can be used to open and inspect the structure of the Hierarchical Data Format version 5 (HDF5) files where the PSSMs are stored:\n\n```python\nimport h5py\n\n\nAA_LIST = [\n \"G\",\"P\",\"A\",\"V\",\"L\",\"I\",\n \"M\",\"C\",\"F\",\"Y\",\"W\",\"H\",\n \"K\",\"R\",\"Q\",\"N\",\"E\",\"D\",\n \"S\",\"T\",\"s\",\"t\",\"y\",\n]\n\n\nPOSITIONS_LIST = list(range(-5, 5))\n\n\ndef read_pssms(pssms_h5_file: str):\n\n pssms_h5 = h5py.File(pssms_h5_file, \"r\")\n pssm_df_dict = {}\n\n for kinase in pssms_h5.keys():\n pssm_df_dict[kinase] = pd.DataFrame(pssms_h5[kinase])\n pssm_df_dict[kinase].columns = AA_LIST\n pssm_df_dict[kinase].index = POSITIONS_LIST\n\n return pssm_df_dict\n```\n\nSimilarly, PhosX also has built-in kinase PSSM scores quantile distributions computed on a reference human phosphoproteome from the [PhosphositePlus](https://www.phosphosite.org/) database. These can be found at `phosx/data/*_PSSM_score_quantiles.h5`. When supplying custom PSSMs, it is necessary to also specify the appropriate background distributions with the options `-yq` and `-stq`. Inspect the HDF5 files containing the background PSSM scores with:\n\n```python\nimport h5py\n\n\ndef read_pssm_score_quantiles(pssm_score_quantiles_h5_file: str):\n\n pssm_bg_scores_df = pd.read_hdf(pssm_score_quantiles_h5_file, key=\"pssm_scores\")\n\n return pssm_bg_scores_df\n```\n\n## Output\n\nPhosX's main output is a text file reporting the computed kinase activities with associated statistics as described in the [Method](#method) section. For each kinase, the KS\tstatistics, the _p_ value, the FDR _q_ value, and the\tActivity Score are reported. Note that kinases for which an Activity Score could not be computed (for example for lack of matching phosphopeptides in the input data) are omitted in the current version. See an output example from the command executed [above](#usage):\n\n```bash\n$ head kinase_activities.tmp\n\n KS p value FDR q value Activity Score\nAAK1 -0.2476131530554456 0.533 1.0 -0.2732727909734277\nACVR1B -0.36580307230946174 0.078 1.0 -1.1079053973095196\nACVR2A 0.2259224236806207 0.439 1.0 0.35753547975787864\nACVR2B 0.47014516632215597 0.019 1.0 1.7212463990471711\nALK2 -0.25190558854944195 0.276 1.0 -0.5590909179347823\nALPHAK3 -0.2875279855211264 0.358 1.0 -0.44611697335612566\nALPK3 0.5759513630398431 0.041 1.0 1.3872161432802645\nAMPKA2 0.4401107718873606 0.299 1.0 0.5243288116755703\nATM -0.49337471491068263 0.096 1.0 -1.0177287669604316\n```\n\nAdditionally, PhosX can also save plots of the of the weighted running sum and of the KS statistic compared to its empirical null distribution, similarly to the ones show [above](#overview), for each kinase. To enable this behavior the option `--plot-figures` must be specified. A custom directory to save the plots can be passed with `-d`.\n\n# Method\n\n## Phosphopeptide scoring\n\nFor each kinase PSSM, a score is assigned to each phosphopeptide sequence $S$ that quantifies its similarity to the PSSM. First, a \"raw PSSM score\" is computed as:\n\n```math\n\\texttt{score}(S,k) := \\prod_{i=-5}^{4} \n\\begin{cases}\n M^{k}_{i,S_i}, & \\text{if } S_i \\neq \\texttt{'\\_'} \\\\\n 1, & \\text{if } S_i = \\texttt{'\\_'} \n\\end{cases}\n```\n\nwhere $S_i$ is the amino acid residue at position $i$ of the phosphopeptide sequence $S$; $M^k_{i,j}$ is the value of the PSSM for kinase $k$ at position $i$ for residue $j$. Raw PSSM scores for each kinase are then transformed between $0$ and $1$ based on the quantile they fall in, considering a background distribution of proteome-wide raw PSSM scores. For each kinase, phosphopeptides with raw PSSM score equal to $0$ are discarded, and the remaining are used to determine the values of the $10,000$-quantiles of the raw PSSM score distribution. The background $10,000$-quantiles raw PSSM scores for each kinase PSSM are used to derive the final PSSM scores for each phosphopeptide.\n\ufffc\n## Weighted running sum statistic\n\nPhosX uses the PSSM scores to link kinases to their potential substrates. Each phosphopeptide is assigned as potential target to its $n$ top-scoring kinases, with default value of $10$. With the method has little sensitivity to this parameter in the range $[5,15]$. The activity change of a given kinase is estimated by calculating a running sum statistic over the ranked list of phosphosites, and by estimating its significance based on an empirical distribution generated by random permutations of the ranks. Let $C$ be the set of indexes corresponding to the ranked phosphosites associated with kinase $k$; $N$ the total number of phosphosites; $N_h$ the size of $C$; $r_i$ the value of the ranking metric of the phosphosite at rank $i$, where $r_0$ is the highest value. Then, the running sum ($RS$) up to the phosphosite rank $n$ is given by\n\n```math\nRS(k,n) := \\sum_{i=0}^{n} \n\\begin{cases}\n \\frac{|r_i|}{N_R}, & \\text{if } i \\in C \\\\\n -\\frac{1}{N - N_h}, & \\text{if } i \\not\\in C \n\\end{cases}\n```\n\nwhere\n\n```math\nN_R = \\sum_{i \\in C} |r_i|\n```\n\nThe kinase enrichment score ($ES$) corresponds to the maximum deviation from $0$ of $RS$.\n\n## Permutation tests\n\nFor each kinase, PhosX computes an empirical _p_ value of the $ES$ by generating a null distribution of the $ES$ through random permutations of the phosphosite ranks. A False Discovery Rate (FDR) _q_ value is also calculated by applying the Bonferroni method considering the number of kinases independently tested. The number of permutations is a tunable parameter but we recommend performing at least $10^4$ random permutations to be able to compute FDR values $< 0.05$.\n\n## Kinase activity score\n\nThe activity score for a given kinase is defined as:\n\n```math\nActivity = -\\log_{10}{(p)} * \\texttt{sign}(ES)\n```\n\nwhere \\texttt{sign} is the sign function, and $-log_{10}{(p)}$ is capped at the smallest computable \\textit{p} value different from $0$, _i.e._ the inverse of the number of random permutations.\nActivity scores greater than $0$ denote kinase activation, while the opposite corresponds to kinase inhibition.\n\n# Cite\n\nBibTeX:\n\n```bibtex\n@article{Lussana2024,\n title = {PhosX: data-driven kinase activity inference from phosphoproteomics experiments},\n url = {http://dx.doi.org/10.1101/2024.03.22.586304},\n DOI = {10.1101/2024.03.22.586304},\n publisher = {Cold Spring Harbor Laboratory},\n author = {Lussana, Alessandro and Petsalaki, Evangelia},\n year = {2024},\n month = mar \n}\n```\n", "bugtrack_url": null, "license": null, "summary": "Differential kinase activity inference from phosphosproteomics data", "version": "0.9.2", "project_urls": null, "split_keywords": [], "urls": [ { "comment_text": "", "digests": { "blake2b_256": "5218553b54228212e80028de9130a02bf2c959743f57dee4e00616e4d8deec5e", "md5": "1c85f63d4bf381ca9f512a7fc544608e", "sha256": "9a832943862b85653a839439f9e893804653d092f622564a89142b504d98895f" }, "downloads": -1, "filename": "phosx-0.9.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1c85f63d4bf381ca9f512a7fc544608e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "<4.0,>=3.10", "size": 30925854, "upload_time": "2024-11-01T12:59:36", "upload_time_iso_8601": "2024-11-01T12:59:36.358659Z", "url": "https://files.pythonhosted.org/packages/52/18/553b54228212e80028de9130a02bf2c959743f57dee4e00616e4d8deec5e/phosx-0.9.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "56574ec8087d577a125322bb41bcb2facce522a2058f7b2a8ed4dcc8e8e0538e", "md5": "b7182d53ce6d084208bb4be00f70e454", "sha256": "e8664b8cd3f2374a317a7a56afe1235d08c66bebc313d0b6370a6b426d0c8bb6" }, "downloads": -1, "filename": "phosx-0.9.2.tar.gz", "has_sig": false, "md5_digest": "b7182d53ce6d084208bb4be00f70e454", "packagetype": "sdist", "python_version": "source", "requires_python": "<4.0,>=3.10", "size": 30931870, "upload_time": "2024-11-01T12:59:40", "upload_time_iso_8601": "2024-11-01T12:59:40.683550Z", "url": "https://files.pythonhosted.org/packages/56/57/4ec8087d577a125322bb41bcb2facce522a2058f7b2a8ed4dcc8e8e0538e/phosx-0.9.2.tar.gz", "yanked": false, "yanked_reason": null } ], "upload_time": "2024-11-01 12:59:40", "github": false, "gitlab": false, "bitbucket": false, "codeberg": false, "lcname": "phosx" }

Elapsed time: 0.50301s