Skip to content

Glass

214 fragments of glass from forensic casework — window panes, headlamps, tableware, containers — each analysed for its refractive index and the percentage of eight oxides it contains.

Projected with DruidJS: a CLR transform of the four always-present oxides, with the trace oxides and the refractive index standardised alongside, then new druid.TSNE(Z, { seed: 1, perplexity: 40, epsilon: 5 }). pnpm glass regenerates it, and --sweep re-runs the search that chose those parameters.

214 glyphs · cell 0.0 px → glyph 0.00 · 33 overlapping pairs

Reading a sample

The eight oxides, stacked bottom to top and always filling the same height. They are percentages of one sample, so the total says nothing and only the split does — which is why these are stacked rather than drawn as bars.

  • Na
  • Mg
  • Al
  • Si
  • K
  • Ca
  • Ba
  • Fe

Use

  • build wind float
  • containers
  • build wind non-float
  • headlamps
  • vehic wind float
  • tableware

Turn the frames off and the classes are still visible — headlamps carry barium, containers carry more potassium. The composition is doing the work, not the label.

Every other glyph in this section treats its columns as independent magnitudes. These are not. The eight oxides are percentages of one sample and sum to 100 — measured across the dataset they land between 99.02 and 100.10 — so the total carries no information at all. Only the split does.

A star or a bar chart encodes each part as its own length, which spends most of its ink on a constraint rather than on the data: push one oxide up and the others must come down, so the glyph shows the same fact several times. A stacked column shows only the split. Every glyph is the same height, and the reading is where the boundaries fall.

Silicon takes about 72% of every sample, so it gets the quiet colour; the minor oxides get the distinct ones, because that is where the differences between one fragment and the next actually live.

Compositional data breaks the usual distance as well as the usual glyph. Two samples that differ by one percentage point of sodium are not as similar as the raw numbers suggest, because that point had to come out of something else — the parts are not free to vary independently, and a euclidean distance over percentages treats the closure as though it were signal.

The Aitchison geometry is the standard answer: a centred log-ratio transform maps the simplex into a real space where euclidean distance means something again. Three representations were measured, by how often a point’s ten nearest neighbours share its class:

representationlabel agreement
standardised, euclidean58.6%
CLR over the always-present oxides59.3%
CLR over all eight, zeros replaced60.5%

clr-all edges it, but a log-ratio is undefined at zero and four of these oxides are absent from many samples, so that margin is bought with 176 invented values. The shipped projection uses the middle row: CLR over the oxides that are always present, with the traces and the refractive index standardised alongside them.

What the glyphs show that the position does not

Section titled “What the glyphs show that the position does not”

The projection separates the window glass from everything else, and that is about as far as a position can take you. The glyphs say why: the window fragments are the ones whose columns are nearly all silicon with a thin sodium band, while headlamps carry visibly more barium and the containers more calcium.

That is the argument for a glyph in one sentence. The layout tells you which fragments group together; the stacked columns tell you what the group is made of, which is the question a forensic comparison is actually asking.

B. German Glass Identification UCI Machine Learning Repository 1987. doi:10.24432/C5WW2P

214 fragments, refractive index and eight oxides by weight percent. Loaded through @saehrimnir/mistle.

John Aitchison The Statistical Analysis of Compositional Data Journal of the Royal Statistical Society: Series B 44(2), 139–160, 1982. doi:10.1111/j.2517-6161.1982.tb01195.x

Why percentages of a whole need their own geometry, and the log-ratio transform used here.