pyIsoPEP: Isotonic PEP Estimator
Overview
pyIsoPEP provides both a Docker image (Docker-, Podman-, and Apptainer-compatible) and a Python API with a unified interface for estimating smooth, non‑decreasing Posterior Error Probabilities (PEPs) directly from empirical null models using isotonic regression for target identifications in shotgun proteomics.
Six estimation combinations are available — three input methods × two regressors — mirroring the same design used in Percolator (C++):
| # | method | x-axis | input | regressor | CLI |
|---|---|---|---|---|---|
| 1 | q2pep | rank | target q-values | I-Spline | q2pep |
| 2 | q2pep | rank | target q-values | PAVA | q2pep --pava |
| 3 | qns2pep | score | target q-values + scores | I-Spline | q2pep --score-based |
| 4 | qns2pep | score | target q-values + scores | PAVA | q2pep --score-based --pava |
| 5 | tdc2pep | score | TDC targets + decoys | I-Spline | d2pep |
| 6 | tdc2pep | score | TDC targets + decoys | PAVA | d2pep --pava |
q2pep / qns2pep fit PEPs from target q-values only; only target statistics are reported.
tdc2pep fits p(decoy | score) over all PSMs and converts to PEP via p / (1 − p); only target PEPs are reported.
qns2pep and tdc2pep place I-Spline knots at quantiles of the score distribution, concentrating spline flexibility where observations are densest.
Optional post-processing derives q-values from estimated PEPs for both DDA and DIA data.
Installation
PyPI
pip install pyIsoPEP
Docker image
podman pull ghcr.io/statisticalbiotechnology/pyisotonicpep:main
# or
docker pull ghcr.io/statisticalbiotechnology/pyisotonicpep:main
# or
apptainer build pyisopep.sif docker://ghcr.io/statisticalbiotechnology/pyisotonicpep:main
Input & output
Input: tab‑separated value (TSV) files; column names are configurable.
Output: the original target rows plus up to four extra columns:
| column | present when | description |
|---|---|---|
pyIsoPEP FDR |
--calc-q-from-fdr |
estimated False Discovery Rates (FDRs) |
pyIsoPEP q-value from FDR |
--calc-q-from-fdr |
FDR-derived q-values |
pyIsoPEP PEP |
always | estimated PEPs |
pyIsoPEP q-value from PEP |
--calc-q-from-pep |
PEP-derived q-values |
Command-line reference
Top‑level help:
pyisopep -h
Workflow‑specific help:
pyisopep q2pep -h
pyisopep d2pep -h
Common flags (valid for both subcommands)
| flag | default | description |
|---|---|---|
--cat-file FILE, --target-file FILE |
required | Select concatenated vs. separate input |
--decoy-file FILE |
— | Decoy file (required in separate input mode) |
--score-col COL |
score |
Score column |
--label-col COL |
label |
Column distinguishing targets/decoys in a concatenated file |
--target-label STR |
target |
String marking target rows |
--decoy-label STR |
decoy |
String marking decoy rows |
--pava |
off | Use PAVA regression instead of the default I-Spline |
--calc-q-from-fdr |
off | Derive q‑values from running FDRs (needs decoys) |
--calc-q-from-pep |
off | Derive q‑values after estimating PEPs |
-k, --keep-input-order |
off | Write output in original input order |
--output FILE|DIR |
required | Write a target‑only list; if DIR, a default name is used |
--verbose |
off | Echo all parsed parameters |
Additional flags – q2pep only
| flag | default | description |
|---|---|---|
--qcol COL |
q-value |
Column containing the input q‑values |
--score-based |
off | Use raw scores as independent variable instead of rank (selects qns2pep); requires --score-col and decoy information |
--trim-plateaus |
off | Enable trimming of leading/trailing q‑value plateaus before isotonic regression (plateau trimming is off by default) |
--no-pseudo-count |
off | Disable the Jeffreys-style smoothing (value 0.5, distributed as 0.5 / n_mid per rank) that is added to raw PEPs before isotonic regression by default. Smoothing improves log-ratio calibration at very small q. |
Examples
PyPI
Combination 1 — q2pep, I-Spline (rank-based, default)
pyisopep q2pep --target-file example/peptide.target.txt --qcol q-value --calc-q-from-pep --output example/results
Combination 2 — q2pep, PAVA (rank-based)
pyisopep q2pep --target-file example/peptide.target.txt --qcol q-value --pava --calc-q-from-pep --output results/
Combination 3 — qns2pep, I-Spline (score-based q-values)
pyisopep q2pep --score-based \
--target-file example/peptide.target.txt \
--decoy-file example/peptide.decoy.txt \
--qcol q-value --score-col score \
--calc-q-from-pep --output results/
Combination 4 — qns2pep, PAVA
pyisopep q2pep --score-based --pava \
--target-file example/peptide.target.txt \
--decoy-file example/peptide.decoy.txt \
--qcol q-value --score-col score \
--calc-q-from-pep --output results/
Combination 5 — tdc2pep, I-Spline (score-based TDC)
pyisopep d2pep \
--target-file example/peptide.target.txt \
--decoy-file example/peptide.decoy.txt \
--score-col score --calc-q-from-pep --output results/
Combination 6 — tdc2pep, PAVA
pyisopep d2pep --pava \
--target-file example/peptide.target.txt \
--decoy-file example/peptide.decoy.txt \
--score-col score --calc-q-from-pep --output results/
Docker image
podman pull ghcr.io/statisticalbiotechnology/pyisotonicpep:main
# q2pep (rank-based, default)
podman run --rm -it -v .:/data pyisotonicpep:main \
q2pep --target-file /example/peptide.target.txt \
--decoy-file /example/peptide.decoy.txt \
--score-col score --qcol q-value \
--calc-q-from-fdr --calc-q-from-pep --output /data
# tdc2pep (score-based TDC)
podman run --rm -it -v .:/data pyisotonicpep:main \
d2pep \
--cat-file /example/peptide.cat.txt \
--score-col score --label-col type --target-label 0 --decoy-label 1 \
--calc-q-from-pep --output /data
Python API
import numpy as np
from pyIsoPEP.IsotonicPEP import IsotonicPEP
iso = IsotonicPEP() # I-Spline by default
iso_pava = IsotonicPEP(pava=True) # PAVA
# --- Combinations 1 & 2: q2pep (rank-based) ---
_, _, pep, q2 = iso.pep_regression(
q_values=q_sorted, method="q2pep",
pava=False, # True for PAVA
calc_q_from_pep=True,
)
# --- Combinations 3 & 4: qns2pep (score-based q-values) ---
_, _, pep, q2 = iso.pep_regression(
q_values=q_sorted, obs=obs_all, # obs shape (n, 2): [score, label]
method="qns2pep",
pava=False, # True for PAVA
calc_q_from_pep=True,
)
# --- Combinations 5 & 6: tdc2pep (score-based TDC) ---
_, _, pep, q2 = iso.pep_regression(
obs=obs_all,
method="tdc2pep",
pava=False, # True for PAVA
calc_q_from_pep=True,
)
# Direct access — all PSMs (targets + decoys):
df_obs = iso.process_obs(obs_all)
pep_all = iso.tdc_to_pep(df_obs) # I-Spline
pep_all = iso.tdc_to_pep(df_obs, pava=True) # PAVA
# Unified q_to_pep — rank-based (scores=None) or score-based (scores provided):
pep_rank = iso.q_to_pep(q_sorted)
pep_score = iso.q_to_pep(q_sorted, scores=score_sorted)
Links
- PyPI package: https://pypi.org/project/pyIsoPEP/
- Docker image: https://github.com/statisticalbiotechnology/smooth_q_to_pep/pkgs/container/pyisotonicpep
- Github repository: https://github.com/statisticalbiotechnology/smooth_q_to_pep
Metadata
Release files for pyIsoPEP 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyisopep-0.1.4.tar.gz | 3.3 MB | Without provenance | Details for pyisopep-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pyisopep-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for pyisopep-0.1.4-py3-none-any.whl |
Total release size: 3.3 MB
Release files / pyisopep-0.1.4.tar.gz
| Download URL | pyisopep-0.1.4.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
392ec48bd8286803cb4627c7b1b84ea57576e6644166e70b20fcaab29b0f31cf
|
|
BLAKE2b-256 checksum How to use checksums |
6da32fdcebc99752f8dc5ad29dfda89ee27c19e4188ea52d9a15a38c41033217
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / pyisopep-0.1.4-py3-none-any.whl
| Download URL | pyisopep-0.1.4-py3-none-any.whl |
|---|---|
| Size | 20.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d1328eef668445d53a0404abf88209d8c50b9bf4a9e26f5d8cda857b4a469640
|
|
BLAKE2b-256 checksum How to use checksums |
3684c00cc5484b02042f09dee8b85b36e2d98430ede2cebcae8be5cfc2f019fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for pyIsoPEP 0.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.