DIABLO: Supervised sPLS-DA
The other three methods here are unsupervised. They read the data and report the structure they find. DIABLO does the opposite. You hand it a label, IGHV status, and it selects a small panel of features from every layer that both separates the two classes and stays correlated across layers. It is the method for biomarker discovery, where the deliverable is a short signature you can act on rather than a map of variation.
DIABLO extends sparse PLS-DA to several data blocks. Sparse, because it forces most feature weights to zero and keeps only a handful per block. Multi-block, because it ties the blocks together through a design matrix so the selected features agree across layers instead of each block discriminating in isolation.
How it works
Section titled “How it works”Each component is a set of sparse loadings, one vector per block, chosen to maximize the
covariance with the outcome and, controlled by a design matrix, with the other blocks.
Two knobs matter. keepX sets how many features to keep per block per component, which
is the sparsity. The design matrix, between 0 and 1 off the diagonal, trades pure
discrimination against between-block correlation. Because it is supervised, DIABLO
overfits if you let it, so the number of components is chosen by repeated
cross-validation and performance is always reported cross-validated.
This page is R only: mixOmics has no mainstream Python implementation. It runs in the
pinned multi-omics container, with the CLL data from the MOFAdata package inside it.
The data
Section titled “The data”IGHV is the outcome, so it is removed from the Mutations block to avoid leakage. DIABLO needs complete cases, so the analysis keeps the 188 patients with data in every layer and a known IGHV status, scales the continuous blocks, and leaves the binary mutations as is.
library(mixOmics)
# Off-diagonal 0.1 tilts DIABLO toward discrimination over block correlation.design <- matrix(0.1, 4, 4); diag(design) <- 0
# Choose the number of components by repeated cross-validation, then fit.perf_ncomp <- perf(init_model, validation = "Mfold", folds = 3, nrepeat = 5)ncomp <- perf_ncomp$choice.ncomp$WeightedVote["Overall.BER", "centroids.dist"] # 2model <- block.splsda(X, Y, ncomp = ncomp, keepX = keepX, design = design)Cross-validation settles on two components. Projected onto them, each block separates the two IGHV subtypes, cleanly for methylation, loosely for mutations.

The panel DIABLO selects on the first component is 20 features each from drugs, methylation, and expression, and 9 mutations.

The panel is real biology
Section titled “The panel is real biology”The nine selected mutations are del11q22.3, BRAF, TP53, NOTCH1, del17p13,
ATM, SF3B1, and del13q14, the recognized driver lesions of CLL. DIABLO did not know
these were important. It selected them because they help separate IGHV subtypes, and they
turn out to be the genes CLL biology already points to. The circos plot draws the
correlations among the selected features across all four blocks at a 0.7 cutoff.

How well it discriminates
Section titled “How well it discriminates”Cross-validated over repeated folds, the model misclassifies about 8% of patients (balanced error 0.085 at two components). The unmutated class is easy, near 1% error; the mutated class is harder, around 16%. Per-block ROC tells you which layer carries the signal.

Methylation is the strongest single discriminator at AUC 0.996, then drug response 0.936, expression 0.913, and mutations 0.808. Methylation leading the pack echoes what SNF found: the IGHV split is written most clearly in the epigenome.
Where DIABLO stops
Section titled “Where DIABLO stops”DIABLO needs a label, so it cannot discover structure you have not named. Point it at IGHV and it finds an IGHV panel; it will not surface an unexpected axis the way MOFA can. The panel is specific to the chosen outcome, and the sparsity and component count are choices you must validate rather than trust. For discovery without a label, start with MOFA or MCIA and bring DIABLO in once you have a phenotype worth predicting.
The runnable scripts and the container are in the companion code repo under
guides/multi-omics/diablo/.