Protein inference
This page explains how msmu infers proteins from peptide-level features through msmu.pp.infer_protein.
How proteins are inferred
Protein inference in msmu is performed through a series of incremental refinement steps. By modifying the initial peptide-protein relationship, proteins are grouped based on shared peptide evidence, following principles outlined in Nesvizhskii and Aebersold (2005). The main steps are as follows:
- Construct initial peptide-protein graph
A initial graph explaining peptide-protein relationships is constructed. - Merge indistinguishable proteins
Proteins associated with identical sets of peptides are merged into a single protein group. The protein group is named as a comma-separated list of members. - Collapse subsettable proteins
If the peptide set of one protein group is a strict subset of another, protein with smaller peptide set is reassigned to the protein group that has larger peptide set. - Resolve subsumable proteins
Proteins lacking unique peptides are evaluated within connected components of shared peptides. Proteins that cannot be distinguished are merged, while components without unique peptide evidence are dropped. - Finalize protein group assignment
After above steps, all remaining protein groups are distinguishable (i.e., having at least one unique peptide). Mappings explaining peptide-protein relationship and annotations describing how each protein was handled are stored inmdata.uns.
Prepare peptide-level input
A MuData that has:
- A
peptidemodality containing.var["stripped_peptide"]and.var["proteins"](semicolon-separated accessions per peptide). If decoys exist, they are pulled frommdata["peptide"].uns["decoy"].
Run protein inference
Only the MuData is required; the reader's own column names are the defaults.
mdata = mm.pp.infer_protein(mdata)
Optional arguments:
modality(default"peptide") — modality holding the peptide-level data.protein_colname(default"proteins") —.varcolumn with the semicolon-delimited accessions.peptide_colname(default"stripped_peptide") —.varcolumn with the peptide sequence.
PTM workflows infer proteins on the global dataset only
PTM data does not need infer_protein. to_ptm localizes sites from each peptide's own
accessions and the attached FASTA, and adjust_ptm_by_protein resolves a site's denominator by
translating those accessions through the global dataset's protein_map, so the global dataset
is the one to run infer_protein and to_protein on. Protein groups are a judgment derived
from one dataset's peptide evidence, so keeping them on the side that produced them means a PTM
peptide the global run never observed — the normal case under enrichment — is still adjustable
whenever its protein was quantified there. See adjust_ptm_by_protein.
Inspect inferred protein groups
A MuData with:
mdata["peptide"].var["protein_group"]: Newly inferred protein groupmdata["peptide"].var["peptide_type"]: Peptide type (uniqueorshared).- Decoys receive the same annotations under
mdata["peptide"].uns["decoy"].
Output MuData also contains mapping information inside .uns
mdata.uns["peptide_map"]: peptide → protein group mapping.mdata.uns["protein_map"]: per-protein mapping with flags forindistinguishable/subset/subsumablestatus.
References
Nesvizhskii, A. I. and Aebersold, R. Interpretation of shotgun proteomic data. Molecular & Cellular Proteomics 4(10), 1419–1440 (2005). https://doi.org/10.1074/mcp.R500012-MCP200.