Conditions:A: |B:
Posteriors are copula-only (metalearner stripped for differential comparison)
Metalearner extension not loaded.
UMAP embeddings require using UMAP, Clustering — currently showing PCA only.
Selected:
Differential Volcano Plot
X: Δlog₂FC · Y: −log₁₀(differential_pep) · Colour: classification · Opacity: 1 − pep · Click to highlight
This plot shows which protein interactions changed between your two experimental conditions. Proteins far from center horizontally show large changes in interaction strength; proteins high on the y-axis have strong statistical evidence for a real difference. Marker opacity also encodes confidence — stronger evidence (lower PEP) shows as more opaque markers.
The x-axis shows the difference in log2 fold change between conditions. The y-axis shows −log₁₀(PEP) — large values = strong evidence (higher = more confident). Marker hue encodes classification class; opacity = clamp(1 − pep, 0.25, 1.0).
α-PEP vs γ-PEP (the toggle). Both are “how likely is this call wrong?” numbers (PEP = posterior error probability = 1 − confidence); they differ in which call they judge.
α-PEP — “is there any change?” The chance the protein is not actually different between the two conditions. Low α-PEP ⇒ strong evidence it genuinely behaves differently (direction ignored).
γ-PEP — “is the specific label right?” Given the class assigned (e.g. Gained), the chance that that label is wrong. Low γ-PEP for a Gained protein ⇒ strong evidence it is specifically gained, not reduced or unchanged.
Think of a medical test: α-PEP = how sure we are the patient is sick (vs healthy); γ-PEP = given they're sick, how sure we are of the specific diagnosis (flu vs cold). A protein can be clearly changed (low α) yet have a borderline direction (higher γ). On the plot, switching to γ raises a point only if its specific class is well supported — points that are high in α but drop in γ are “definitely changed, but the gained/reduced direction is shaky.”
α-PEP vs γ-PEP
X: −log₁₀(α-PEP) · Y: −log₁₀(γ-PEP) · Colour: class · dashed = PEP threshold
Compares, for every protein, how confident we are that it changed at all (α) against how confident we are in its specific gained/reduced/unchanged call (γ). Medical-test analogy: the x-axis is “how sure the patient is sick”, the y-axis is “how sure of the exact diagnosis”. The dashed red lines mark the PEP significance cutoff, splitting the plot into quadrants: top-right = confident in both the change and its direction (the strongest hits); bottom-right = confident it changed but the gained-vs-reduced direction is unclear (validate cautiously); the left half = the change itself is not yet significant.
Both axes are −log₁₀(PEP), higher = more confident. X = −log₁₀(α-PEP) (differential_pep); Y = −log₁₀(γ-PEP) (the class-conditional pep_<class> for each point's assigned class). The dashed lines sit at −log₁₀(threshold) on each axis (threshold = bfdr_threshold, default 0.05). Coloured by classification; pair-aware for k≥3. Condition-specific proteins (no class-conditional PEP) are omitted.
Results Table
This table lists all proteins with their interaction scores under both conditions, highlighting which interactions changed. Use the classification badges and filters to focus on gained or reduced interactions.
Key columns: posterior probability for each condition, differential Bayes factor, differential BFDR, and interaction class. Posteriors are copula-only (BF/(1+BF)) since the metalearner prior is identical across conditions.
Classification labels. Every label is relative to the two conditions of the pair: the first is the reference (A), the second is the comparison (B) — the column headers show which actual condition is A and which is B. The change direction follows Δlog₂FC = log₂FC(A) − log₂FC(B): positive ⇒ stronger in the reference (A), negative ⇒ stronger in the comparison (B). Only proteins with significant differential evidence (diff. BFDR < threshold) receive a directional label:
Gained — interaction stronger in the reference (A): a credible interactor in A (BFDR < threshold) with positive Δlog₂FC.
Reduced — interaction stronger in the comparison (B): a credible interactor in B (BFDR < threshold) with negative Δlog₂FC.
Unchanged — interactor in at least one condition, but no significant difference in interaction strength between the two (or contradictory evidence).
Both negative — neither condition is a credible interactor (posterior below threshold in both), so the protein is not a validation target even if the differential test is significant.
Reference-specific (A) / Comparison-specific (B) — detected (and an interactor, BFDR < threshold) in only one condition's data.
Note: posterior probabilities here are copula-only (BF/(1+BF)); the metalearner prior is stripped because it is identical across conditions and carries no differential information.
Reclassify:
BFDR (A) ≤
BFDR (B) ≤
diff. BFDR ≤
Filters:
dBF ≥
diff. BFDR ≤
Diag.
Sens. ≤
Result-table numerical columns reflect the selected pair.
Protein
dBF
Δlog₂FC
PP (A)
PP (B)
PEP (A)
PEP (B)
BFDR (A)
BFDR (B)
diff. PEP
diff. BFDR
Classification
Sens (A)
Sens (B)
Diag (A)
Diag (B)
BB×MNAR
optimal_call
decision_risk
risk_gained
risk_reduced
risk_unchanged
risk_both_negative
This differential analysis uses MS evidence only. For docking analysis
(AlphaFold Server structural predictions) and Bayes factors updated by the two-stage
structural Bayesian update, see the individual single-bait reports
and .
Validation Candidates
A ranked list of the proteins that are cheapest to validate experimentally — high posterior support and low cost-of-misclassification. Use this list to prioritise the first round of follow-up experiments.
Ranked ascending by decision_risk (k=2) or decision_risk_min (k≥3) — the posterior expected loss of the optimal call under DEFAULT_DIFFERENTIAL_LOSS. Pre-filtered to omnibus BFDR ≤ threshold and BOTH_NEGATIVE rows excluded. Top-N defaults to 20 — see DifferentialConfig.validation_candidates_top_n.
Top 20 proteins ranked by ascending
decision_risk (cheapest to validate experimentally).
Pre-filtered to omnibus BFDR ≤ 0.05.
Decision Risk: how to read this tab
Each protein is ranked by decision risk — the posterior expected
loss of the Bayes-optimal call under the active loss matrix. Lower
decision_risk means a cheaper validation candidate. BMA evidence
upstream is the locked "Copula" + "3c-EM" pair; FDR pre-filter
uses BFDR / PEP / local_fdr.
Default loss matrix (DEFAULT_DIFFERENTIAL_LOSS):
direction-flip = 10, over-claim = 3,
missed-hit = 5, conservative-default = 1.
Override with DifferentialConfig.loss_matrix or the
loss_matrix= kwarg to differential_analysis.
The top-20 grid below excludes BOTH_NEGATIVE rows. Expand
Show all proteins (including BOTH_NEGATIVE) at the bottom of this
pane for the full ranked list (broader QC inspection view, no omnibus
pre-filter). See the Methods tab § Decision Risk for the per-cell
justification table and worked examples.
Decision-Risk Distribution per Pair
Spreads of decision risk across the proteins surviving the omnibus BFDR pre-filter, one violin per condition pair. Use it to spot pairs where most proteins are cheap to validate (violin mass pulled toward the bottom, near zero) versus pairs where the call is ambiguous (violin mass shifted upward to higher decision-risk values).
Y-axis = decision_risk (posterior expected loss of the optimal call under DEFAULT_DIFFERENTIAL_LOSS). One violin trace per pair in D.meta.contrasts, with an overlaid box (median + IQR) for distributional summary. BOTH_NEGATIVE rows are excluded upstream.
Top-N Validation Candidates by Decision Risk
Same top-N proteins shown in the grid below, ranked from cheapest to most expensive to validate. Bar colour shows the Bayes-optimal call under the active loss matrix — orient your follow-up plan by both rank and call type.
X-axis = decision_risk_min (k≥3) or decision_risk (k=2), sorted ascending. Bars are coloured by optimal_call_min using the canonical CLS_COLOR palette.
Decision Risk vs Posterior (per Pair)
Pairs each protein's validation cost against its posterior support, so you can see whether cheap candidates are also probability-rich (lower right = high posterior + low risk = first-round wins).
X = per-pair decision_risk; Y = max per-pair posterior probability (posterior_A or posterior_B, whichever is larger for the active pair); colour = optimal_call from the canonical CLS_COLOR palette; marker size scales with 1 − diff_PEP.
Risk-Class Composition (Top-N per Pair)
For each pair, the top-N candidates are split into the four optimal-call buckets (gained / reduced / unchanged / both-negative). Tall stacks of one colour signal pair-level patterns — e.g. a pair where almost every top candidate is "gained".
Stacked bar: X = pair label, Y = count of top-N candidates (post-omnibus filter), segments coloured by optimal_call via the canonical CLS_COLOR palette. The both_negative segment is always zero because BOTH_NEGATIVE rows are excluded upstream.
optimal_call
decision_risk
Protein
Pair
MAP class
Show all proteins (including BOTH_NEGATIVE)
Full ranked list including BOTH_NEGATIVE rows and rows that did
not pass the omnibus-BFDR pre-filter. For QC inspection only — not used
for validation prioritisation.
Side-by-side view of every pairwise contrast in the k-condition design. For k=3 a small-multiples grid; for k≥4 a matrix-view heatmap of pairwise posterior medians with a dropdown to drill into individual pairs.
Per-pair volcano sub-plots use the classification colour palette (hue = classification, saturation = 1 − diff_PEP). The off-diagonal heatmap shows the median posterior_prob across all proteins for each pair. Tab visibility requires length(diff.contrasts) ≥ 2 AND length(condition_labels) ≥ 3.
Decision Risk Heatmap
Highlights the proteins that are cheapest to validate experimentally across every pairwise contrast. Bright cells mark high-priority candidates with low expected loss; dark cells indicate proteins where the optimal call is ambiguous.
Decision risk = posterior expected loss of the optimal call under DEFAULT_DIFFERENTIAL_LOSS or a user-supplied loss matrix. Columns iterate diff.contrasts in declaration order; rows are the top-N proteins ranked by decision_risk_min. Reversed viridis colorscale — see Methods tab §Decision Risk.
Rows: top-20 proteins by
decision_risk_min. Columns: pairs in
diff.contrasts order. Reversed viridis colorscale —
bright values = cheapest validation candidates.
Calibration Overview
Shows whether the posterior probability for each condition is well calibrated — i.e. whether "P = 0.9" really means roughly 9 of every 10 such proteins are true interactors. Use these panels to spot over- or under-confident calls per condition.
Calibration is assessed via Platt scaling (logistic regression) against simulation ground-truth labels generated by the parametric simulation engine. ECE (Expected Calibration Error) and the calibration curve are reported per condition. For k≥3 reports the dropdown switches between per-condition SimulationResult payloads.
Sensitivity Overview
Shows how robust each protein's classification is to small changes in prior assumptions. Proteins flagged as fragile may flip class under reasonable alternative priors and warrant manual review.
Joint Copula + 3c-EM prior-sensitivity sweep (~27 grid points) over the Dirichlet concentration and the H1 family. Per-protein classification stability is reported as a traffic light (robust / sensitive / fragile) plus a sensitivity_range column. For k≥3, the dropdown switches between per-condition sweeps.
Per-protein stability change (top N)
Mixture Model Overview
Shows the 3-component evidence-combination model fit for each condition: null background (H0), uninformative middle ground (Agnostic), and genuine interactors (H1). Helps diagnose whether the mixture cleanly separates real hits from noise.
3c-EM on log-BF scale: Student-t H0, anchored Agnostic (μ=0), sigmoid-gated H1. BIC-selected H1 enrichment family (Gamma/LogNormal/Weibull). Class transitions between conditions are shown as a 3×3 contingency table. BMA combines this fit with the Copula sub-model via LOO stacking weights and linear BF pooling.
Class transitions (3×3)
Data Quality Overview
Diagnostics for the input data quality — replicate correlation, missingness asymmetry, intensity-distribution shape, PCA separation between samples and controls. Use to spot batch effects or replicates that should be excluded.
Five-check input QC system (v1.1.5) emitting :ok / :warning / :fail flags per condition. For k≥3 reports the dropdown switches between per-condition QC payloads. Shared-protein log-intensity scatter cross-validates the conditions.
Shared-protein mean log-intensity
Sample Similarity (PCA)
A 2D PCA projection of pooled samples across every condition. Samples that group together share similar overall protein abundance profiles; outlier samples may indicate batch effects or technical issues.
Principal Component Analysis applied to per-sample log-intensity vectors (mean-centred, complete-case). PC1 and PC2 explain the listed fractions of total variance; colour-by selector switches the categorical grouping (condition / replicate / experiment / protocol).
Sample Similarity (UMAP)
A non-linear UMAP projection of pooled samples — better at preserving local neighbourhood structure than PCA. Use to confirm that replicate samples cluster together and that conditions separate.
Uniform Manifold Approximation and Projection (n_neighbors=15, min_dist=0.1) over the per-sample log-intensity matrix. When UMAP dependencies are unavailable the report falls back to PCA (a banner above announces the fallback).
Protein Embedding (UMAP)
Each point is one protein; nearby points behave similarly across conditions. Colour encodes the differential-classification class (k=2) or the kgroup_class enum (k≥3) — clusters of one colour indicate co-regulated interactors.
UMAP applied to a per-protein feature matrix (log10 BF + log2FC + posterior_prob across all conditions). For k≥3 reports the colour vector is sourced from wide_df.kgroup_class; for k=2 it uses the 6-class classification column.
Condition Similarity Matrix
Heatmap of pairwise condition similarity with a dendrogram clustering related conditions. High values (bright) mean two conditions produced similar protein-interaction profiles; low values flag conditions with divergent interactomes.
Per-pair Spearman correlation of log10(BF), Pearson correlation of Δlog2FC, or Pearson correlation of posterior probability — selectable via the metric radio buttons. Dendrogram is built via UPGMA average-linkage on 1 − similarity and shares an x-axis with the heatmap.
Jaccard@Top-50
How much overlap exists between each condition's top-ranked interactors. High Jaccard means two conditions share most of their strongest hits; low Jaccard means the two conditions identify largely disjoint sets of interactors.
Jaccard index on the top-K proteins (default K=50) ranked by posterior_prob within each condition. Computed pairwise; the value is |A ∩ B| / |A ∪ B| of the two top-K sets. Independent of effect-size direction.
MC-Dropout prior data unavailable (metalearner extension not loaded; load via
using Flux, MLJ, MLJScikitLearnInterface, HDF5).
Prior vs Posterior — colour = MC-Dropout uncertainty
dBF Diagnostics
Diagnostic panels for the differential Bayes factor (dBF) itself — sanity checks on the dBF distribution, agreement between sub-models, and per-protein flag breakdown. Use to confirm the differential evidence is well-behaved before trusting downstream classifications.
Top row: dBF distribution histogram + QQ-plot vs the differential null; dBF vs Δlog2FC scatter. Middle row: component-stack of BF contributions; saturation panel. Bottom row: Copula vs 3c-EM sub-model disagreement; per-protein traffic-light over BFDR / PEP / local_fdr.
Diagnostic panels for the differential Bayes factor (dBF). Top row: distributional checks.
Middle row: correlations. Bottom row: per-protein flags.