| name | bio-workflows-proteomics-pipeline |
| description | End-to-end proteomics workflow from MaxQuant output to differential protein abundance. Orchestrates data import, normalization, imputation, and statistical testing with limma (default) or MSstats for complex feature-level designs. Use when processing mass spectrometry proteomics. |
| tool_type | mixed |
| primary_tool | limma |
| workflow | true |
| depends_on | ["proteomics/data-import","proteomics/proteomics-qc","proteomics/quantification","proteomics/protein-inference","proteomics/differential-abundance"] |
Version Compatibility
Reference examples tested with: MSnbase 2.28+, ggplot2 3.5+, limma 3.58+, DEqMS 1.20+, ashr 2.2+
Before using code patterns, verify installed versions match. If versions differ:
- R:
packageVersion('<pkg>') then ?function_name to verify parameters
If code throws ImportError, AttributeError, or TypeError, introspect the installed
package and adapt the example to match the actual API rather than retrying.
Proteomics Pipeline
"Process my proteomics data from raw MS files to differential abundance" → Orchestrate data import (pyopenms/MaxQuant), QC assessment, protein quantification, normalization, differential abundance testing (limma/DEqMS, or MSstats for feature-level designs), and PTM analysis.
Pipeline Overview
Raw MS Data (mzML) ──> MaxQuant/DIA-NN ──> proteinGroups.txt
│
▼
┌────────────────────────────────────────────┐
│ proteomics-pipeline │
├────────────────────────────────────────────┤
│ 1. Data Import & Filtering │
│ 2. Log2 Transform & Normalization │
│ 3. Missing Value Imputation │
│ 4. QC: PCA, Correlation │
│ 5. Differential Abundance (limma/MSstats) │
│ 6. Visualization & Export │
└────────────────────────────────────────────┘
│
▼
Differential Proteins + Volcano Plots
Complete R Workflow
library(limma)
library(ggplot2)
library(pheatmap)
proteins <- read.delim('proteinGroups.txt', stringsAsFactors = FALSE)
cat('Loaded', nrow(proteins), 'protein groups\n')
proteins <- proteins[proteins$Potential.contaminant != '+' &
proteins$Reverse != '+' &
proteins$Only.identified.by.site != '+', ]
cat('After filtering:', nrow(proteins), 'proteins\n')
lfq_cols <- grep('^LFQ\\.intensity\\.', colnames(proteins) value
intensities proteins lfq_cols
rownamesintensities proteinsMajority.protein.IDs
colnamesintensities gsub colnamesintensities
intensitiesintensities
log2_int log2intensities
sample_medians applylog2_int median na.rm
global_median mediansample_medians
normalized sweeplog2_int sample_medians global_median
valid_rows rowSumsnormalized ncolnormalized
filtered normalizedvalid_rows
cat nrowfiltered
impute_minprob x
nas x
nas x
xnas rnormnas mean meanx na.rm sdx na.rm
sd sdx na.rm
x
imputed as.data.frametapplyfiltered impute_minprob
pca prcomptimputed scale.
pca_df data.framePC1 pcax PC2 pcax Sample rownamespcax
sample_info read.csv
sample_infocondition factorsample_infocondition
design model.matrix condition data sample_info
colnamesdesign levelssample_infocondition
fit lmFitas.matriximputed design
contrast makeContrastsTreatment Control levels design
fit2 contrasts.fitfit contrast
fit2 eBayesfit2 trend robust
results topTablefit2 coef number adjust.method
resultsprotein rownamesresults
resultssignificant resultslogFC resultsadj.P.Val
cat
cat resultssignificant
cat resultssignificant resultslogFC
cat resultssignificant resultslogFC
write.csvresults row.names
MSstats Workflow
library(MSstats)
evidence <- read.table('evidence.txt', sep = '\t', header = TRUE)
proteinGroups <- read.table('proteinGroups.txt', sep = '\t', header = TRUE)
annotation <- read.csv('annotation.csv')
msstats_input <- MaxQtoMSstatsFormat(evidence = evidence,
proteinGroups = proteinGroups,
annotation = annotation)
processed <- dataProcess(msstats_input, normalization = 'equalizeMedians',
summaryMethod = 'TMP', censoredInt = 'NA')
comparison <- matrix( nrow
rownamescomparison
colnamescomparison
results groupComparisoncontrast.matrix comparison data processed
QC Checkpoints
| Stage | Check | Action if Failed |
|---|
| Import | >1000 proteins | Re-run MaxQuant |
| Filter | <30% removed | Check sample prep |
| Missing | <40% per sample | Check MS performance |
| PCA | Replicates cluster | Check for batch effects |
| Stats | >1% differential | Adjust thresholds |
Workflow Variants
TMT/iTRAQ Isobaric Labeling
library(MSnbase)
tmt_data <- readMSnSet('tmt_psms.txt')
tmt_norm <- normalize(tmt_data, method = 'center.median')
protein_data <- combineFeatures(tmt_norm, groupBy = fData(tmt_norm)$protein, fun = 'median')
SILAC Workflow
silac <- read.delim('proteinGroups.txt')
ratio_cols <- grep('Ratio.H.L.normalized', colnames(silac), value = TRUE)
silac_log2 <- log2(silac[, ratio_cols])
results <- apply(silac_log2, 1, function(x) t.test(x, mu = 0)$p.value)
DIA-NN Workflow
diann <- read.delim('report.tsv')
library(tidyr)
protein_matrix <- diann %>%
select(Protein.Group, Run, PG.MaxLFQ) %>%
pivot_wider(names_from = Run, values_from = PG.MaxLFQ)
Related Skills
- proteomics/data-import - Load MS data formats
- proteomics/proteomics-qc - Quality control before analysis
- proteomics/quantification - Normalization methods
- proteomics/differential-abundance - Statistical testing details
- proteomics/ptm-analysis - Phosphoproteomics and other PTMs
- data-visualization/volcano-and-ma-plots - Volcano plots with LFC shrinkage