Skip to main content

orangemetabo — MetaboAnalyst-Style Statistics for Orange3

Author: Philipp Weller (AK Weller) · philipp.weller@googlemail.com

Add-on for Orange3 that reproduces the MetaboAnalyst univariate workflow for GC-MS / GC-IMS feature tables (Compound Discoverer exports), as used in the coffee-fermentation study (AK Weller).

Pipeline

Feature Table CSV ──> Preprocess ──> [Filter] ──> Univariate Stats ──> Heatmap
 (2-header, ;)       (Sum-Norm,       (QC)         (ANOVA / Welch /     (Top-N,
                       log2, Imputation,             Kruskal + BH-FDR     Ward cluster,
                       Autoscale/Pareto)             + log2FC + means)     PNG/SVG export)
                                                                           └─> Volcano
                                                                              (log2FC vs -log10 FDR)

Widgets (category Metabo Weller)

Widget Function
Metabo Feature Table Load Compound Discoverer 2-header semicolon CSV; sample×feature Table with group/sample metas; pseudo-replicate (<3 replicates) hint
Metabo Preprocess Optional imputation (min / k-NN) → sum-normalisation → log2 → autoscale (z) / Pareto
Metabo Feature Filter Drop features by missing fraction, zero variance, constant, or below-detection threshold
Metabo Univariate Stats One-way ANOVA, Welch two-sample t-test, or Kruskal-Wallis per feature + Benjamini-Hochberg FDR + log2FC + group means
Metabo Volcano Volcano plot (log2FC vs. −log10 FDR) for a two-group contrast — taken from the Univariate Stats results, or computed from Data alone (Welch t-test + BH-FDR) so Preprocess → Volcano already plots; FDR/|log2FC| thresholds, direction colours, top-N labels, PNG/SVG export; click a point to select a feature (shift-click to add) to see its per-group distribution as a box plot; emits the significant features and the selected features' sample values
Metabo Heatmap Top-N features by p, Ward/Euclidean row clustering, group bar, PNG/SVG export

Correctness

orangemetabo/metabo_core.py is the headless, Qt-free analytics core. The default pipeline (sum-normalise → log2 → autoscale → one-way ANOVA → BH-FDR) reproduces the validated ground truth analysis_CV/cv_anova_alle_97_features.csv exactly: 97/97 features on F, p, and FDR (max abs diff < 5e-5). Reproduce with _test_core.py (core) and _test_e2e.py (all six widgets, offscreen) — both run against the Dropbox ground truth and print 97/97. The volcano contrast is checked to equal the Welch log2FC and the ground-truth log2FC_ANF_vs_WILD column.

Note on the volcano's fold change: it is the difference of the per-group means in the space of the data you feed in. For a real log2 fold change, preprocess with Sum normalisation + log2 and no scaling (Metabo Preprocess → Method "Sum (total area)", log2 on, Scaling "None"). With autoscaled/Pareto data the x-axis is a scaled mean difference (the p-values are unaffected, since the t-test is scale-invariant per feature).

Plot interaction

The plot widgets (Metabo Volcano, Metabo Heatmap) behave like any Orange plot widget:

  • Wheel over the plot zooms around the cursor; drag with the left button pans — no mode to switch on first.
  • ”Reset view” button restores the automatic view; the toolbar above each canvas is deliberately slim — Home (= reset view) and Save only. The modal pan/zoom/back/forward tools are removed because they swallow the left button, which made point selection impossible until you found your way out of the mode again; panning/zooming are direct gestures instead.
  • Your zoom/pan survives redraws (changing a threshold, selecting a point, …). A plain matplotlib canvas would autoscale on every draw and silently drop the view — PlotCanvas.after_draw() prevents that.
  • Points are clickable at the edges and selection works in every state: it picks the nearest feature within a 12 px radius (an edge point like a max-log2FC hit is no longer glued to the axis spine / unclickable), and is not gated on the toolbar mode.
  • The volcano legend is draggable; the volcano/box-plot split has a draggable divider.
  • Orange's Save graph / copy-to-clipboard / report entries work (graph_name is set), and the widget window is resizable.

Implementation: orangemetabo/widgets/_plot.py (PlotCanvas: wheel zoom, drag-pan, click selection, view preservation, reset; attach_toolbar (slim Home+Save, Home wired to reset), draggable). Orange's own plots are pyqtgraph based and get this for free; the Metabo plots are matplotlib, hence the helper.

Installation

cd orange-metabo-addon
/Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 -m pip install -e .

Or from the monorepo: python ../orange-install.py metabo.

Metadata

Release files for orangemetabo 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for orangemetabo 0.4.3
File Size Uploaded
orangemetabo-0.4.3.tar.gz 28.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for orangemetabo 0.4.3
File Interpreter ABI Platform
orangemetabo-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 62.0 kB

Release files / orangemetabo-0.4.3.tar.gz

Download URL orangemetabo-0.4.3.tar.gz
Size 28.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e70cbeb64575a4dd66194036126439e0af61af508f6026ec64d192183dc3d134
BLAKE2b-256 checksum
How to use checksums
c40e030160f1f8471ce162c2480eb338677d1b3bc123063d0a64b6c83c1591e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.8

Release files / orangemetabo-0.4.3-py3-none-any.whl

Download URL orangemetabo-0.4.3-py3-none-any.whl
Size 33.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
507c12dd97c108a5cd62b59778bf01dbd67c8e46829bfb600719350872c26cc8
BLAKE2b-256 checksum
How to use checksums
3da199b14a4678153769cf4a79e81f0163b77222876657903d32d7c744f7228b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.8

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page