spinePlot
Show where a partition came from: the measure, and the profile behind it.
Two panels. The left is where multiplicative scale separation is visible, or visibly absent. The right says whether a single stratum means no structure at all, or structure that is not entropic.
Syntax and options
help spinePlot
SPINE Plot
Show where a SPINE partition came from: the measure, and the profile.
fig = spinePlot(Result)
fig = spinePlot(Info)
fig = spinePlot(..., 'Width', 178, 'Title', 'my data')
Two panels:
the measure The sorted measure against rank, strata shaded, each cut
marked with its value. This is where multiplicative scale
separation is visible, or visibly absent.
the profile The incremental nested entropy, candidates marked. When the
measure panel shows a single stratum, this one says whether
the data had no structure or merely no entropic structure.
To see your data itself, coloured by score, use spineDataPlot. It gets a
figure of its own so it can be drawn properly.
Options
'Width' figure width in millimetres (default 178, manuscript width)
'Height' figure height in millimetres (default 72)
'Title' text placed above the panels
'Scale' "auto" (default), "linear", or "log" for the measure axis
Uses base MATLAB only.
Author
Abd AlRahman AlMomani
Assistant Professor of Data Science and Mathematics, ERAU, AZ
almomaniar@gmail.com
A partition with clear separation
X = [randn(240,8); randn(45,8) + 6; randn(15,8) + 30];
[~, Result] = spine(X, 'robustrownorm', "upper");
spinePlot(Result, 'Title', 'three planted scales');
Reading it
The left panel shades alternate strata and marks each cut with its value. The right panel plots the incremental nested entropy against rank, with candidate boundaries as open circles and retained boundaries filled.
When nothing is found
The profile panel is the one to look at. A profile that simply rises has no transition to cut on, which is a different statement from "the data has no groups".
[~, Flat] = spine(randn(300,4), 'dist2median', "upper");
spinePlot(Flat, 'Title', 'no separation');
It also accepts a bare Info record
Useful when the objects are not rows and there is no data to draw, as with the singular measure.
M = randn(60,25) * diag([40 26 15, 0.6*ones(1,22)]);
[~, Rsv] = spine(M, 'singular', "upper");
spinePlot(Rsv.Info, 'Title', 'singular values, with the cut');
See also
spineDataPlot for the data itself, spineSummary to read the same partition in words.