diagFDR report
diagfdr (Python) {{ version }} · {{ date }} · headline threshold α = {{ params.alpha_main }}
Executive summary
Alerts motivate inspection; they are not pass/fail verdicts. Items 1–4 of the reporting standard are internal checks
(specification and consistency with the exported decoys); they cannot show that the decoys behave like incorrect targets — only
external evidence (entrapment, known composition) can.
{% for row in summary %}- {{ row.list }} — {{ row.status }}: {{ row.interpretation }}
{% endfor %}
Lists
| List | Unit | Scope | q-value source | Export ceiling | Two-pass | n rows | n decoys | Provenance |
{% for nm, m in lists.items() %}| {{ nm }} | {{ m.unit }} | {{ m.scope }} | {{ m.q_source }} |
{{ m.q_max_export if m.q_max_export is not none else "unknown" }} | {{ m.two_pass if m.two_pass is not none else "unknown" }} |
{{ "{:,}".format(m.n) }} | {{ "{:,}".format(m.n_decoy) }} | {{ m.provenance }} |
{% endfor %}
Headline summary (Table)
| List | Tα | Dα | Decoy ratio D/T | Dα-1/2 | FDP-CV benchmark |
Dα,win | IPE | πD (low conf.) | Status |
{% for r in headline %}| {{ r.list }} | {{ "{:,}".format(r.T_alpha) }} | {{ "{:,}".format(r.D_alpha) }} |
{{ "%.3f%%"|format(100*r.FDR_hat) if r.FDR_hat==r.FDR_hat else "n/a" }} |
{{ "%.3f"|format(r.support_index) }} | {{ "%.3f"|format(r.CV_benchmark) }} |
{{ r.D_alpha_win if r.D_alpha_win==r.D_alpha_win else "n/a" }} |
{{ "%.4f"|format(r.IPE) if r.IPE==r.IPE else "n/a" }} |
{{ "%.3f"|format(r.pi_D_hat) if r.pi_D_hat==r.pi_D_hat else "n/a" }} ({{ r.flag_equalchance }}) |
{{ r.status }} |
{% endfor %}
Decoy ratio: a consistency check of the exported q-values on the reported list (expected ≤ α by construction), not the realised
error. FDP-CV benchmark √2·Dα-1/2: an independence reference for the dispersion of the realised FDP across
experiments, neither a confidence interval nor a bound for this list. IPE: decoy-reference PEP concordance error (target mean PEP vs Db/Tb
per PEP bin), not a calibration against the truth. πD: decoy fraction among entries with q in [{{ params.low_conf[0] }}, {{ params.low_conf[1] }}];
evaluable only for single-pass paired competition.
{% if sentences %}
Reporting sentences (five-item standard)
{% for s in sentences %}- “{{ s }}”
{% endfor %}
{% endif %}
Alert basis
| Flag | Diagnostic | Threshold | Basis |
{% for r in basis %}| {{ r.flag }} | {{ r.diagnostic }} | {{ r.threshold }} | {{ r.basis }} |
{% endfor %}
Stability across thresholds
| List | α | Tα | Dα | D/T | FDP-CV benchmark | Dwin | Elasticity J(α, {{ 1+params.eps }}α) |
{% for r in stability %}| {{ r.list }} | {{ r.alpha }} | {{ "{:,}".format(r.T_alpha) }} | {{ "{:,}".format(r.D_alpha) }} |
{{ "%.4f"|format(r.FDR_hat) if r.FDR_hat==r.FDR_hat else "n/a" }} | {{ "%.3f"|format(r.CV_benchmark) }} |
{{ r.D_alpha_win if r.D_alpha_win==r.D_alpha_win else "n/a" }} | {{ "%.3f"|format(r.jaccard) if r.jaccard==r.jaccard else "n/a" }} |
{% endfor %}
{% if eq_bands %}
Equal chance by q-value band
| List | q band | n | n decoy | Decoy fraction | mean q |
{% for r in eq_bands %}| {{ r.list }} | {{ r.qbin }} | {{ "{:,}".format(r.n) }} | {{ "{:,}".format(r.n_decoy) }} |
{{ "%.3f"|format(r.decoy_frac) }} | {{ "%.4f"|format(r.q_mean) }} |
{% endfor %}
{% endif %}
{% if pep_bins %}
PEP concordance by bin (IPE)
| List | PEP bin | Tb | Db | mean target PEP | Db/Tb | used |
{% for r in pep_bins %}| {{ r.list }} | {{ r.bin }} | {{ "{:,}".format(r.n_target) }} | {{ "{:,}".format(r.n_decoy) }} |
{{ "%.4f"|format(r.pep_mean_targets) if r.pep_mean_targets==r.pep_mean_targets else "n/a" }} | {{ "%.4f"|format(r.e_b) }} | {{ r.used }} |
{% endfor %}
{% endif %}
{% if entrap %}
External validation (entrapment)
| List | α | Tα | Eα | Raw FDP (lower bound) | Wilson 95% | r | Corrected (upper bound on average) |
{% for r in entrap %}| {{ r.list }} | {{ r.alpha }} | {{ "{:,}".format(r.T_alpha) }} | {{ r.E_alpha }} |
{{ "%.3f%%"|format(100*r.fdp_raw) }} | [{{ "%.3f"|format(100*r.lo) }}, {{ "%.3f"|format(100*r.hi) }}]% |
{{ "%.3f"|format(r.r) if r.r==r.r else "n/a" }} | {{ "%.3f%%"|format(100*r.fdp_corrected) if r.fdp_corrected==r.fdp_corrected else "n/a" }} |
{% endfor %}
Wilson intervals are descriptive and ignore clustering of errors within protein groups; the corrected value assumes the entrapment proteome is a
valid model of incorrect matches and uses the size correction of Wen et al. (2025).
{% endif %}
Parameters
{{ params }}
Reference: Chion M, Godmer A, Douché T, Matondo M, Giai Gianetto Q (2026). diagFDR: Assessing False Discovery Rate Claims in Proteomics with
Scope, Calibration and Stability Diagnostics. bioRxiv 10.64898/2026.04.16.718468. R package: https://cran.r-project.org/package=diagFDR