MHC Binding vs. Immunogenicity: Why IC50 Alone Doesn't Predict a T Cell Response
neoantigen immunogenicity · NetMHCpan · MHCflurry · PRIME · pMTnet · T cell response · binding prediction
The Core Problem: Binding Does Not Equal Immunogenicity
MHC binding affinity (IC50) predicts whether a peptide can physically occupy the MHC groove. It does not predict whether a T cell specific for that peptide exists in the patient's repertoire or will mount a functional response. Among peptides predicted to bind HLA-A*02:01 with IC50 < 50 nM, roughly 10–30% are actually immunogenic — measurably recognized by T cells in immunogenicity assays.
This gap is the central unsolved problem in neoantigen biology. Better immunogenicity prediction would reduce the number of candidates needed per vaccine dose, improve patient selection for neoantigen-targeted therapies, and help explain why some patients with high TMB still do not respond to checkpoint inhibitors.
Figure 1. Left: the tradeoff between MHC binding accuracy and immunogenicity prediction AUC across tools — better binding prediction does not necessarily improve immunogenicity prediction. Right: feature importance for immunogenicity prediction in a Random Forest model.
Beyond IC50: Features That Predict Immunogenicity
1. TCR contact residue foreignness
The central residues of the peptide (positions 4-6 in a 9-mer) contact the TCR directly. If these residues are similar to self-peptides in the HLA-A*02:01 peptidome, the corresponding T cell was likely deleted during thymic selection. BLOSUM62 scoring against the self-peptidome (PRIME algorithm) captures this:
from scipy.spatial.distance import cdist
import numpy as np
# Pseudocode: foreignness score
# Higher score = more foreign (different from self)
def foreignness_score(neoantigen_peptide, self_peptidome, blosum62_matrix):
# Extract TCR contact positions (4-6 for 9-mer)
neo_tcr_residues = neoantigen_peptide[3:6]
# Compare against all self-peptides at same positions
scores = []
for self_pep in self_peptidome:
self_tcr = self_pep[3:6]
score = sum(blosum62_matrix[a][b] for a, b in zip(neo_tcr_residues, self_tcr))
scores.append(score)
# Lower similarity = higher foreignness
return -np.max(scores)
2. HLA-peptide stability (t½)
Binding affinity (IC50) measures how well a peptide competes for MHC binding at equilibrium. Stability (half-life of the pMHC complex) measures how long it survives on the cell surface for T cell scanning. High-affinity but unstable complexes can still fail to prime T cells. NetMHCstabpan predicts pMHC half-life and is worth adding to any pipeline.
# NetMHCstabpan (standalone or via pVACseq --netmhc-stab flag)
# Returns t1/2 (hours) — longer = more stable = better T cell priming probability
# Rule of thumb: prioritize peptides with both IC50 < 50 nM AND t1/2 > 1 hour
3. Expression and clonality
As shown in Figure 1, expression (TPM) and clonality (cancer cell fraction / variant allele frequency) are the second and fourth most important features for immunogenicity after IC50. A neoantigen from a subclonal mutation in a lowly expressed gene will not generate enough pMHC complexes for T cell detection regardless of binding affinity.
Advanced Tools: Beyond NetMHCpan
HLAthena — Trained on mass spectrometry eluted ligand data (actual HLA-presented peptides, not just binding affinity). Better at predicting which peptides actually get processed and presented. Available via the Bhatt Lab web server.
PRIME (Pan-allele immunogenicity estimator) — Explicitly models TCR contact residue foreignness. Outperforms IC50-only tools in immunogenicity prediction AUC (0.76 vs. 0.68 for NetMHCpan alone in published benchmarks).
pMTnet — Deep learning model trained on paired pMHC-TCR data. Predicts TCR-pMHC binding directly rather than inferring immunogenicity from peptide features. Highest AUC in published benchmarks but requires a GPU and is computationally expensive at scale.
Practical Recommendation: An Ensemble Scoring Approach
No single tool dominates across all datasets. The most reliable approach is to combine scores:
# Ensemble scoring (pseudocode)
# Normalize each score to [0, 1] then combine
def ensemble_score(ic50, stability_t12, foreignness, expression_tpm, vaf, prime_score):
# IC50: lower = better, normalize to 0-1
ic50_norm = max(0, 1 - ic50 / 500)
# Stability: higher = better
stability_norm = min(1, stability_t12 / 4)
# Expression: log-scale, cap at 100 TPM
expr_norm = min(1, np.log10(expression_tpm + 1) / 2)
# Clonality proxy
clonality_norm = min(1, vaf * 2)
# Weighted ensemble (weights from feature importance analysis)
score = (0.31 * ic50_norm +
0.18 * foreignness + # PRIME foreignness
0.16 * stability_norm + # NetMHCstabpan
0.22 * expr_norm +
0.13 * clonality_norm)
return score
Where the Field Is Heading
The next generation of immunogenicity prediction will incorporate:
- Antigen processing prediction: TAP transport efficiency and proteasomal cleavage (currently in pVACseq via NetChop)
- Patient TCR repertoire: Does the patient have naïve T cells with the right specificity? scTCR-seq of PBMCs pre-vaccination could help select which neoantigens are most likely to find a responding T cell
- Structural modeling: AlphaFold2 + protein-protein docking for TCR-pMHC interactions is becoming computationally feasible and may add a structural layer to binding predictions
The fundamental constraint — that immunogenicity data is generated slowly through clinical trials while the number of candidate neoantigens per patient is large — means that in silico prediction will remain important even as experimental validation becomes easier.
Working with spatial transcriptomics and want to map immune infiltration patterns? See the companion blog SpatiaBio — Squidpy tutorials and spatial omics workflows.
댓글
댓글 쓰기