Good data to test tensor based soft sparsity and other sparsity models

I think this belongs under a Data category, but am having trouble finding a relevant one, so I posted it here. Someone might advise me of the best place to discuss datasets and even upload new data.

I just downloaded “micromass.zip” mass spectroscopy data. Is this a familiar dataset for testing a soft sparsity seeking engines? Are there any other datasets anyone can recommend? I am looking for data with thousands of variables, and thousands of cases, and between 10 and 100 latent dimensions. If there is data on Hugging Face, that would be nice.

I plan to post the mass spect data, and will mention and link to any other suggested data, along with the code for the engine, and an example applying it to the data that anyone can easily try for themselves, as a Model Card. The engine is one I posted about elsewhere (Show and Tell) when I first signed up. It is written in Fortran and gnu Octave, and is trivial to build on any Linux system by using a single gfortran command, and placing an octave wrapper (.m file) and the compiled executable in Octave’s path.

Hmm… For now, maybe something like this?:


I think MicroMass is useful, but I would not make it the first or only benchmark for this engine.

The UCI MicroMass dataset is reasonably high-dimensional at 1,300 variables, and it has more structure than an ordinary classification dataset: the associated study used 571 reference spectra from 20 bacterial species, plus 360 spectra from controlled two-species mixtures at nine nominal concentration ratios. That makes it a potentially good real-data sanity check.

However, it does not provide a known true latent loading matrix, it is smaller than the thousands-by-thousands scale you are looking for, and the number of species is not automatically the true latent dimension. I would therefore use it after a small synthetic benchmark rather than as the primary test.

My default route would be:

Stage Main purpose
1. Rotation-only synthetic benchmark Test recovery of known sparse structure and avoidance of basis collapse
2. Sampled synthetic benchmark Add sampling noise and factor-extraction error
3. MicroMass Test behavior on structured real spectra and controlled mixtures
4. Large real dataset Test runtime, memory use, stability, and scaling

The useful distinction, at least as I understand the earlier description of the engine, is:

Does it recover sparse/simple structure?

and separately:

Does it avoid singular, duplicated, or badly conditioned bases while doing so?

Those are not the same success criterion. A method can produce very sparse-looking loadings by driving the transformation toward a nearly singular solution, while another method can remain numerically stable without recovering the planted sparse structure.

For literature searches, nearby established terms appear to be oblique simple-structure rotation, sparse-loading rotation, hyperplane rotation, and factor-rotation local solutions. I would keep your term “soft sparsity,” but adding those terms in the documentation would help future readers find relevant comparisons. Your original Functionplane paper is itself a useful anchor: it describes a smooth oblique simple-structure criterion that can be optimized by gradient methods.

A practical first release would not need a huge dataset. A small benchmark with known answers would probably demonstrate the distinctive behavior more clearly.

1. A small benchmark separating sparsity recovery from collapse avoidance

Start with a rotation-only problem

Before generating observations, begin with a known factor-pattern matrix.

For example:

  • 12–60 observed variables
  • 3–6 factors
  • four or more primary variables per factor
  • primary loadings around 0.7–0.9
  • optional genuine cross-loadings around 0.1–0.2
  • optional factor correlations of 0, 0.3, and 0.6

Let the known sparse pattern be Lambda_true.

Create the starting loading matrix by applying a known invertible transformation:

\Lambda_{\mathrm{start}} = \Lambda_{\mathrm{true}} H

The engine then receives Lambda_start and attempts to recover a simple structure.

This first test deliberately excludes:

  • sampling error;
  • covariance estimation;
  • uncertainty in the number of factors;
  • differences between factor-extraction methods.

It tests only the rotation or transformation engine.

That makes failure easier to interpret. If the planted pattern cannot be recovered here, there is no need to blame the dataset, sample size, factor extraction, or measurement noise.

A compact benchmark battery

I would give the cases stable identifiers so that results from different implementations can be compared.

ID True structure and starting condition Main question
B0 Already-simple pattern, identity or nearly identity start Does the engine leave a good solution alone?
B1 Exactly sparse truth, well-conditioned transform Can it recover basic sparse structure?
B2 Approximately sparse truth with genuine small cross-loadings Does it preserve small but real structure?
B3 Dense truth Does it manufacture sparsity where none exists?
B4 Sparse truth with increasingly ill-conditioned starts Does it avoid basis collapse?
B5 Symmetric or ambiguous truth with several equivalent solutions Does it report non-uniqueness rather than invent certainty?
B6 Observations sampled from B1–B4 What changes after sampling and factor extraction?

B0: no-op control

Give the program a loading matrix that already has a clean simple structure.

A successful method should not substantially damage:

  • loading recovery;
  • factor correlations;
  • transformation conditioning;
  • factor separation.

This is a useful check because an optimizer may slightly improve its own objective while making an already satisfactory representation less interpretable or less stable.

B1: exact sparse truth

Each variable loads primarily on one factor, with all other entries exactly zero.

This tests the easiest form of planted recovery.

B2: approximate sparsity

Add a few genuine cross-loadings, for example 0.10–0.20.

This is particularly relevant to a “soft” sparsity method. It tests whether the method can distinguish:

  • an exact structural zero;
  • a small but genuine loading;
  • a noisy or unstable small coefficient.

A method that simply suppresses every small value may look sparse while recovering the wrong population structure.

B3: dense negative control

Create a loading matrix in which most entries are genuinely nonzero.

Here, a very sparse answer is not automatically a good answer. This control separates:

  • “the criterion prefers sparse solutions” from
  • “the method recovered the true sparse structure.”

It would be quite informative to show simplicity scores improving while truth-recovery error becomes worse. That is not necessarily a bug; it demonstrates what the objective is encouraging.

B4: conditioning ladder

Keep Lambda_true fixed and control the singular values of the starting transform.

One reproducible construction is:

H = U D V^{\mathsf T}

where U and V are orthogonal matrices and D contains chosen singular values.

For example:

Level Approximate singular-value range Intended difficulty
Easy 1.0 to 0.5 Well conditioned
Moderate 1.0 to 0.1 Mild stress
Difficult 1.0 to 0.01 Strong stress
Near-singular 1.0 to 0.001 Collapse stress

The exact values are not important; recording them is.

This distinguishes three materially different outcomes:

  1. the algorithm starts in a badly conditioned representation and repairs it;
  2. it starts well conditioned and becomes badly conditioned;
  3. it remains badly conditioned but completes without a numerical exception.

Those should not all be reported merely as “converged.”

B5: ambiguous solutions

Create a symmetric pattern for which several permutations or rotations have essentially equivalent simple structure.

Different runs may then return different valid solutions.

The useful questions become:

  • Are the solutions equivalent after sign and permutation alignment?
  • Do they occupy the same subspace?
  • Do they have similar conditioning?
  • Are several stable solution families repeatedly found?
  • Are equal or nearly equal objective values associated with materially different patterns?

This is important because non-uniqueness is not the same as optimizer failure.

B6: sampled observations

Only after the rotation-only tests are understood, generate observations from the planted model and repeat the comparison.

That introduces:

  • sample-size effects;
  • noise;
  • model approximation error;
  • uncertainty in the unrotated loading estimate;
  • dependence on the extraction method.

Keeping B1–B4 as population-level tests makes it possible to tell whether a later failure came from the rotation or from the earlier statistical estimation step.

2. What I would record: four separate result families

I would avoid a single aggregate score. At minimum I would keep four columns:

Result family What it answers
Objective optimization Did the optimizer reduce its own criterion and meet its stopping rule?
Ground-truth recovery Did it recover the planted factor pattern?
Simple-structure quality Is the returned pattern sparse or concentrated?
Stability and collapse Is the solution reproducible and numerically non-degenerate?

A. Objective optimization

Record:

  • initial and final criterion value;
  • criterion trajectory;
  • gradient norm;
  • step size;
  • iteration count;
  • stopping reason;
  • maximum-iteration failures;
  • runtime.

Criterion values are most useful for comparing starts or variants using the same criterion.

Values from different rotation criteria are generally not directly comparable because they optimize different functions and may use different scales.

B. Ground-truth recovery

Before comparing columns, align the estimated factors with the true factors.

A reasonable procedure is:

  1. compute a similarity matrix between true and estimated factor columns;
  2. solve the one-to-one assignment problem;
  3. reorder the estimated columns;
  4. flip signs where necessary;
  5. apply an explicitly stated scale convention;
  6. then compute the recovery metrics.

Useful metrics include:

  • loading RMSE after alignment;
  • Tucker congruence or column cosine similarity;
  • support precision and recall;
  • precision–recall curves over several thresholds;
  • recovery of genuine cross-loadings;
  • error in the factor-correlation matrix;
  • subspace distance.

The fungible package contains factor-alignment and local-solution utilities, including alignment before comparing rotated patterns. The psych::factor.congruence documentation is also a useful reference for congruence coefficients.

Column matching is not enough when:

  • one factor splits into two;
  • two factors merge;
  • the estimated and true dimensions differ;
  • factors become nearly collinear.

For those cases, subspace and conditioning diagnostics remain important.

C. Criterion-independent simple-structure diagnostics

The current GPArotation documentation includes several simple-structure measures, including:

  • AUC-style loading concentration;
  • Factor Simplicity Index;
  • Gini-type measures;
  • Bentler-style simplicity;
  • Hoffman measures;
  • hyperplane counts.

These can be useful because they are not simply the method’s own optimization objective.

However, they are not truth-recovery metrics.

For example:

  • a dense true pattern may receive a worse simplicity score even when correctly recovered;
  • a highly correlated but clean oblique solution may behave differently under some indices;
  • hyperplane counts depend on a selected cutoff.

I would therefore report several cutoffs, for example 0.05, 0.10, and 0.15, rather than presenting a single hyperplane count as definitive.

For oblique rotation it is also important to state whether a metric is being calculated from:

  • the pattern matrix;
  • the structure matrix;
  • the factor-correlation matrix.

Those are not interchangeable.

D. Collapse and numerical stability

Because “basis collapse” can refer to several related numerical or geometric events, I would initially report a diagnostic bundle instead of choosing one number in advance.

Transformation geometry

  • smallest singular value of the effective transform;
  • transform condition number;
  • determinant only if the scale convention is fixed;
  • ratio of largest to smallest column norm;
  • maximum absolute cosine between basis directions.

Factor geometry

  • smallest eigenvalue of the factor-correlation matrix;
  • condition number of the factor-correlation matrix;
  • largest absolute off-diagonal factor correlation;
  • duplicated or nearly duplicated factor columns;
  • factors that disappear or absorb most of the primary loadings.

Numerical behavior

  • inverse or factorization failure;
  • NaN or infinity;
  • overflow or underflow;
  • extremely small steps with a large remaining gradient;
  • a falling objective accompanied by rapidly worsening conditioning;
  • sensitivity to floating-point precision.

The most revealing plots may be:

  • criterion value versus iteration;
  • condition number versus iteration;
  • minimum singular value versus iteration;
  • truth-recovery error versus iteration.

A final solution may look acceptable even though the path approached a numerical singularity, and the opposite can also happen.

If your original definition of “basis collapse” is specifically one of these events, that quantity can be designated as the primary endpoint while the others remain secondary diagnostics.

3. Comparison methods, controls, and local solutions

Reference methods

For an initial comparison I would keep the baseline set small:

  • unrotated loading matrix;
  • quartimin;
  • oblimin;
  • geomin;
  • the proposed smooth criterion;
  • a modern sparse-loading rotation.

GPArotation provides commonly used orthogonal and oblique rotation criteria and accepts an initial loading matrix. It is useful as:

  • a reference implementation;
  • a source of standard comparison criteria;
  • a model for convergence diagnostics;
  • a random-start comparison.

I would not treat it as an authority that determines which answer is correct.

A particularly close modern comparison is Rotation to Sparse Loadings Using L^p Losses. It addresses sparse oblique loadings, although its loss and optimizer differ from the smooth criterion described here. The authors provide a reproduction repository containing simulation studies, Big Five data, geomin comparisons, raw results, and grid checks for some solutions.

That makes it useful both as a baseline and as an example of how to package a simulation study.

Keep extraction fixed

If the program receives an already extracted loading matrix, this is straightforward: give every rotation method the same matrix.

If the program receives a covariance or correlation matrix:

  • save the extracted unrotated loadings;
  • use the same extraction method for every rotation;
  • separately report extraction fit and rotation results.

If the program receives raw observations:

  • use the same preprocessing and factor extraction for every method;
  • save the resulting initial loading matrix;
  • also run the rotation-only benchmark on that matrix.

Otherwise, a difference caused by factor extraction can easily be mistaken for a difference caused by rotation.

Random starts

Smoothness does not by itself imply a unique optimum.

A large study of local minima in factor rotation found multiple local solutions under some conditions for varimax, oblimin, entropy, and orthogonal and oblique geomin. The study also found cases where the lowest criterion value was not the population-closest loading pattern.

The current GPArotation interface therefore supports random-start wrappers and explicitly notes that the best returned random-start solution is still not guaranteed to be global.

I would not assume in advance that 10, 20, or 100 starts is sufficient. Instead, one small result could be a saturation curve:

Starts attempted Best objective Best truth recovery Distinct patterns Collapse rate Runtime
1
5
10
20
50
100

The useful number of starts is then an empirical property of the method and benchmark rather than an arbitrary requirement.

Do not identify solutions only by objective value

Two runs can have:

  • clearly different objective values;
  • nearly equal objective values but different loading patterns;
  • different column orders or signs but equivalent patterns.

After factor alignment, cluster the returned patterns by loading RMSD or another stated distance. Save:

  • objective value;
  • aligned pattern;
  • factor correlations;
  • conditioning;
  • frequency with which each solution family appeared.

The faMain and faLocalMin facilities in fungible are useful examples of this style of local-solution analysis.

Ablation, if the code permits it

If the implementation makes the components separable, a particularly informative comparison would be:

  • the full method with the metric and inverse-metric adaptation;
  • the same smooth sparsity criterion with that adaptation disabled or held fixed.

That could help distinguish:

  • the effect of the sparsity criterion;
  • the effect of the adaptive metric;
  • the effect of the inverse metric on singularity avoidance.

If the implementation does not allow a clean ablation, there is no need to redesign it merely for this purpose. Comparisons against standard rotations under the same starts and stopping budget would still be useful.

4. Adding sampled data without losing the known answer

For the second stage, an existing generator may save some work.

The R package fungible contains simFA, which can generate factor-analysis population models and Monte Carlo samples with:

  • user-defined pattern matrices;
  • orthogonal or oblique factors;
  • controlled factor correlations;
  • fixed or sampled primary loadings;
  • controlled cross-loadings;
  • model approximation error;
  • raw observations;
  • population correlation matrices;
  • unrotated loadings;
  • fixed random seeds.

This does not make simFA the only acceptable generator. Its value is that it already exposes many of the controls needed for a reproducible study.

A compact public suite might have three scale levels:

Configuration Cases Variables Factors Purpose
Toy 500 60 6 Easy inspection and debugging
Medium 2,000 500 20 Statistical comparison
Stress 5,000 or more 2,000 or more 50 or 100 Scaling and conditioning

Those are only example values. Synthetic generation is the easiest way to obtain exactly the requested combination of:

  • thousands of cases;
  • thousands of variables;
  • 10–100 known latent dimensions.

For each configuration I would preserve:

  • the population pattern;
  • population factor correlations;
  • generated observations;
  • unrotated estimated loadings;
  • seeds;
  • preprocessing;
  • extraction method;
  • all rotated solutions.

This separates three errors:

  1. model generation and sampling error;
  2. factor-extraction error;
  3. rotation error.

A real dataset cannot normally provide that separation.

5. Where MicroMass fits

MicroMass looks useful as the third stage: a real-data test with unusually helpful external structure.

The associated Bioinformatics paper describes:

  • 571 reference spectra;
  • 20 species from nine genera;
  • 213 strains;
  • 10 two-species mixture families;
  • two strain pairs per mixture family;
  • nine nominal concentration ratios;
  • two replicate spectra per ratio and strain pair;
  • 360 mixture-set spectra in total.

The mixture families also vary in taxonomic difficulty:

  • four same-genus pairs;
  • two different-genus but same-Gram-type pairs;
  • four different-Gram-type pairs.

That supports several checks more informative than ordinary classification accuracy.

M1. Pure endpoints

At the 1:0 and 0:1 endpoints, does the representation favor the corresponding component or direction?

M2. Mixture-path ordering

Across:

1:0 → 10:1 → 5:1 → 2:1 → 1:1 → 1:2 → 1:5 → 1:10 → 0:1

does the relevant score or projection change in a broadly ordered or monotonic way?

I would not require exact proportionality.

The original paper reports real biological and preparation effects, including a case where nominal optical-density matching did not correspond to equal cell counts. Thus, “nominal 1:1 concentration” is not necessarily an exact linear latent-score target.

Endpoints, ordering, rank correlation, and replicate consistency are safer controls than requiring the recovered score ratio to equal the nominal mixing ratio.

M3. Replicate stability

Do the two replicate spectra for the same strain pair and nominal ratio produce similar results?

M4. Strain-pair generalization

Each species mixture was represented by two pairs of strains.

One option is to derive or tune the representation using one strain pair and examine the corresponding path on the other pair. This is stronger than a random row split because it tests some biological generalization.

M5. Difficulty strata

Report results separately for:

  • same genus;
  • different genus, same Gram type;
  • different Gram type.

The original study found that spectral separability and biological similarity affected mixture identification. Pooling everything into one average could hide that structure.

M6. Minority-component behavior

Check whether the less abundant component disappears first at 10:1 or 1:10 and whether this behavior is consistent across replicates.

This is relevant to sparsity because an aggressive sparsity mechanism may remove a real but weak component.

M7. Grouped splitting

Avoid treating all 931 rows as independent interchangeable samples.

Depending on the experiment, grouping may need to be by:

  • strain;
  • strain pair;
  • species pair;
  • mixture series;
  • replicate family.

A random row split could place extremely related spectra on both sides of the evaluation.

What MicroMass would and would not establish

It could provide evidence about:

  • behavior on real mass spectra;
  • stability across replicates;
  • response to controlled mixture paths;
  • recovery of weak versus strong components;
  • sensitivity to biological similarity;
  • practical runtime at 1,300 variables.

It would not by itself establish:

  • recovery of a true factor-loading matrix;
  • a true latent dimension of 20;
  • correct behavior at thousands of cases and thousands of variables;
  • general superiority to other sparse factor methods.

That is why it fits well after the planted tests rather than replacing them.

6. A larger Hugging Face stress test

For a dataset already on the Hub, SetFit/20_newsgroups is one fairly easy stress-test option.

It currently has about 18,800 documents and 20 labels. A TF–IDF representation can readily produce:

  • 5,000–20,000 variables;
  • more than 10,000 cases;
  • a chosen reduced dimension between 20 and 100.

For example:

  1. construct a sparse TF–IDF document-term matrix;
  2. obtain an initial 20-, 50-, or 100-dimensional representation;
  3. apply the rotation engine to the resulting loading or component matrix;
  4. compare stability, conditioning, runtime, and top-loading terms.

This would test:

  • sparse high-dimensional input;
  • scalability;
  • memory behavior;
  • random-start stability;
  • interpretability of rotated directions.

It would not provide a true latent factor pattern.

The 20 newsgroup labels are external annotations, not proof that the data have exactly 20 latent dimensions. I would therefore call this a stress test, not a recovery benchmark.

Other possible scale tests include:

  • gene-expression or single-cell matrices with thousands of measured variables;
  • large document-term matrices;
  • larger mass-spectrometry collections;
  • hyperspectral data.

Each has its own preprocessing and dependence structure. I would select only one initially, because the planted benchmark plus MicroMass already cover the more important scientific questions.

A nearby controlled-mixture problem is hyperspectral unmixing. For example, this laboratory-created hyperspectral mixture dataset has known materials and compositions over many pixels. It has fewer spectral variables than requested and solves an adjacent rather than identical problem, but its benchmark design may be useful.

7. A reproducible result package

For publication, I would separate the code, benchmark data, and optional interactive demonstration.

GitHub or another source repository

Best suited for:

  • Fortran source;
  • Octave wrapper;
  • build command;
  • license;
  • version history;
  • benchmark generator;
  • comparison scripts;
  • tests;
  • issues;
  • CITATION.cff.

Hugging Face Dataset repository

Best suited for:

  • fixed benchmark inputs;
  • planted loading matrices;
  • generated observations;
  • baseline outputs;
  • result tables;
  • trajectory logs;
  • MicroMass-derived experiment metadata;
  • reproducibility fixtures.

The official Dataset Card documentation describes the README.md card and its metadata. The Hub also supports multiple manually configured subsets and splits, so the repository could expose configurations such as:

  • toy_exact_sparse;
  • toy_crossloadings;
  • toy_dense_control;
  • conditioning_ladder;
  • medium;
  • stress;
  • micromass.

Optional Space

A small browser demonstration could be useful after the command-line example works.

Because the implementation uses Fortran and GNU Octave, a Docker Space may be simpler than trying to force it into a Python-only environment.

A minimal interface could let a user:

  1. select a benchmark;
  2. choose the criterion or mode;
  3. run the engine;
  4. view before/after loading heatmaps;
  5. inspect the objective and conditioning trajectories;
  6. download the result bundle.

Model repository

A Model repo can still be used if the released object behaves like a reusable model or component, but the official Model Card guidance is mainly organized around documenting a model artifact, its intended uses, limitations, data, and evaluation.

For a historical algorithm plus source code and benchmarks, I would still make the source repository and Dataset repo the primary homes, with a Model repo only if there is a clearly loadable model-like artifact.

Suggested run artifact

Something like this would make third-party comparisons easier:

benchmark_id/
├── config.json
├── true_pattern.csv
├── true_phi.csv
├── initial_pattern.csv
├── initial_transform.csv
├── observed_data.csv
├── rotated_pattern.csv
├── rotated_structure.csv
├── estimated_phi.csv
├── effective_transform.csv
├── alignment.json
├── trajectory.csv
├── metrics.json
├── stdout.txt
├── stderr.txt
└── environment.txt

trajectory.csv could include:

iteration
objective
gradient_norm
step_size
transform_condition_number
minimum_singular_value
maximum_basis_cosine

metrics.json could keep the result families separate:

truth_recovery
simple_structure
conditioning
optimization
runtime
failure_status

This is more useful than preserving only the final rotated matrix, because a future implementation can inspect not only where the optimizer ended, but how it got there.

A manageable first version

If I were reducing this to the smallest useful public example, I would start with:

  1. one planted 15-by-3 or 60-by-6 loading pattern;
  2. B0, B1, B2, B3, and a four-level B4 conditioning ladder;
  3. an identity start plus a modest random-start saturation experiment;
  4. unrotated, quartimin, oblimin, geomin, one sparse-loading baseline, and the proposed method;
  5. separate tables for truth recovery, simple structure, and conditioning;
  6. one MicroMass mixture-path demonstration;
  7. fixed seeds and machine-readable result files.

That would already answer several important questions:

  • Does the engine recover a known sparse pattern?
  • Does it preserve genuine small cross-loadings?
  • Does it falsely sparsify a dense pattern?
  • Does it remain nonsingular under a controlled conditioning stress?
  • Does the metric/inverse-metric mechanism visibly change that behavior?
  • Are the results stable across starts?
  • Does the method show coherent behavior on real controlled mixtures?

After that, increasing the synthetic dimensions to thousands of variables and cases is mostly a scaling exercise rather than a search for a perfect real dataset.

So my answer to the original dataset question would be:

  • Yes, MicroMass is worth using, especially because of its pure endpoints, mixture series, strain pairs, and replicates.
  • No, I would not use it as the sole or primary proof of sparse-factor recovery.
  • For the exact requested dimensions and a known latent truth, a generated benchmark is probably the cleanest solution.
  • The most informative first benchmark would measure sparse-structure recovery and collapse avoidance as two separate outcomes.

Thanks. I considered synthetic data, “plasmodes” they were called. I will generate some. The Fortran code and Octave wrapper are on Zenodo. A maths document will be there soon, too, with another DOI, and when I have test data, I plan to post it, along with code, maths, and examples in a Model Card here (if this is the appropriate place). I minimized references to factor analysis (not eliminated them), because the maths are very general, and I am trying to awaken a “sleeping beauty” that was siloed because it appeared in https://doi.org/10.1207/s15327906mbr1002_7 , the only place I could find to publish it back then. The coauthor simplified my mathematical formulation for that community. Back to data: I found some large financial data sets and some Raman data on HF that seem worth testing with the model. I am very interested in Raman spectroscopy and have used it on small local datasets for unmixing; I would like to run some tests on well-studied data that would allow a comparison of the results.

A well known statistician said the work (he only saw the paper with the smooth functional) was mostly ignored for 30 years despite being a “break through”. He formalized it, and proved that CLFs like the one I used in 1975 will recover precise simple structure if it exists in the data. Here is the reference: Jennrich R. Rotation to Simple Loadings Using Component Loss Functions: The Orthogonal Case. Psychometrika. 2004;69(2):257-273. Rotation to Simple Loadings Using Component Loss Functions: The Orthogonal Case | Psychometrika | Cambridge Core

Oh. Hmm, I see. In that case, how about something like this?:


That Jennrich reference seems to narrow the empirical question in a useful way.

I also found Jennrich’s later paper, Rotation to Simple Loadings Using Component Loss Functions: The Oblique Case. It explicitly cites Katz and Rohlf’s Functionplane paper and extends the component-loss-function treatment to oblique rotation.

My reading is that this shifts the most interesting benchmark away from merely asking whether an ideal concave CLF can recover an exactly perfect simple structure under ideal population conditions. The more informative empirical questions may be:

  • what happens with approximate rather than perfect simple structure;
  • whether small but genuine components or cross-loadings are preserved;
  • sensitivity to finite-sample noise and spectral artifacts;
  • local solutions and initialization;
  • behavior near ill-conditioned transformations;
  • whether the metric and inverse-metric machinery prevents the particular form of basis collapse you have in mind;
  • computational behavior at thousands of spectra and thousands of variables.

For the Raman application, I found one dataset that seems unusually close to the scale and comparison setting you described: the experimental Sugar Mixtures data used in Hyperspectral unmixing for Raman spectroscopy via physics-constrained autoencoders, with its reproduction code on GitHub.

It is also now included in the larger RamanBench collection.

Subset Spectra Variables Acquisition
High SNR 1,960 2,000 5 s integration
Low SNR 7,840 2,000 0.5 s integration

The experiment used mixtures of:

  • glucose;
  • sucrose;
  • fructose;
  • maltose;
  • water.

The mixture concentrations are known, and additional reference spectra were measured from pure solutions. This seems particularly useful because it provides both a relatively favorable case with reference endmembers and a more difficult blind-unmixing case without adding those references to the observed mixture data.

The RamanBench regression version exposes four sugar-concentration targets; its benchmark excludes water as a supervised target because that target did not pass its learnability criterion. For an unmixing experiment, however, the original paper and repository are probably the more relevant references because they retain the five-component physical formulation and the pure-solution spectra.

So this may be a more direct practical candidate than MicroMass for the Raman side:

  • it is real experimental Raman data;
  • it is approximately the requested thousands-by-thousands size;
  • mixture composition is known;
  • high- and low-SNR conditions are available;
  • pure reference spectra exist;
  • there are published comparison methods and open reproduction code.
A possible evaluation using the Sugar Mixtures data

I would separate two experimental modes.

1. Reference-assisted mode

Include the measured pure-solution spectra, or use them as fixed reference endmembers.

This is the easier condition and can test:

  • abundance or component-score recovery;
  • whether known endmember directions are preserved;
  • weak-component recovery;
  • high-SNR versus low-SNR degradation;
  • numerical conditioning.

2. Blind mode

Do not add the pure reference spectra to the mixture data.

Estimate the component directions from the mixtures and use the pure spectra only afterward for evaluation.

This is more difficult, but it seems closer to the question of whether a sparsity/simple-structure engine can discover useful underlying directions rather than merely fit known references.

Existing comparison points

The original study compares its autoencoder variants with standard unmixing combinations including:

  • N-FINDR followed by FCLS;
  • VCA followed by FCLS;
  • related NNLS-based abundance estimation;
  • PCA as a non-unmixing reference.

These do not optimize the same objective as your method, so their internal criterion values should not be compared directly.

The comparable outputs would instead be:

  • recovered component or endmember spectra;
  • estimated component proportions;
  • reconstruction;
  • stability;
  • computation time;
  • failure or collapse behavior.

Possible measurements

Component recovery

After matching estimated components to the pure references:

  • spectral angle distance;
  • cosine similarity;
  • correlation;
  • peak-location agreement;
  • endmember duplication or merging.

A one-to-one assignment method can be used before scoring so that arbitrary component order does not count as an error.

Mixture recovery

Against the known experimental concentrations:

  • abundance MSE;
  • rank or Pearson correlation;
  • error by component;
  • error by concentration range;
  • retention of the least abundant component.

Exact equality between a latent score and the nominal concentration may be too strict unless the model’s scale and mixing assumptions justify it. Ordering, correlation, and calibrated abundance error may be safer primary checks.

Noise robustness

Compare high-SNR and low-SNR data under otherwise matched settings.

This gives a real experimental version of a controlled noise test rather than only adding Gaussian noise synthetically.

Collapse and conditioning

Record separately:

  • minimum singular value of the effective transformation;
  • transformation condition number;
  • maximum cosine between recovered basis directions;
  • duplicated or nearly duplicated components;
  • factor-correlation conditioning, if applicable;
  • random-start failure rate;
  • objective and conditioning trajectories.

That would help distinguish:

  1. correct mixture recovery with unstable geometry;
  2. stable geometry with poor separation;
  3. both recovery and stability;
  4. sparsity obtained by losing a genuine weak component.
A matching synthetic Raman benchmark

The same research group’s RamanSPy synthetic-data tools may provide a convenient bridge between the abstract synthetic benchmark and the experimental sugar data.

RamanSPy can generate mixtures with known endmembers and known abundance maps while varying:

  • number of endmembers;
  • number of spectral bands;
  • linear or bilinear mixing;
  • chessboard, Gaussian, or Dirichlet abundance patterns;
  • realistic versus idealized endmember spectra;
  • noise;
  • baseline variation;
  • cosmic spikes;
  • fixed random seeds.

That suggests a compact Raman-specific battery such as:

Test Mixture Artifacts Main purpose
R0 Linear, pure regions present None Basic recovery
R1 Linear, strongly mixed None Separation without easy pure pixels
R2 Linear Noise and baseline Robustness
R3 Linear Noise, baseline, cosmic spikes Raman artifact robustness
R4 Bilinear Realistic artifacts Model-mismatch control
R5 Linear or bilinear Conditioning ladder Collapse stress

The synthetic data provide exact endmembers and exact abundances. The experimental Sugar Mixtures data then test whether the conclusions survive real spectra and real acquisition noise.

For your engine, I would still add a transformation-conditioning ladder independently of the Raman artifacts. Otherwise a failure caused by an ill-conditioned basis could be confused with failure caused by baseline variation, noise, or nonlinear mixing.

One useful progression might be:

  1. five endmembers and 1,000–2,000 spectral bands;
  2. exact sparse abundances;
  3. a few genuine low-abundance components;
  4. increasingly mixed abundance patterns;
  5. increasingly ill-conditioned starting transformations;
  6. noise, baseline, and cosmic-spike variants;
  7. linear followed by bilinear mixtures.

The bilinear case is valuable as a negative or model-mismatch control. If the engine assumes a linear latent mixture, it should not necessarily be expected to recover exact components under bilinear generation. The useful result would be knowing how and when it degrades, rather than requiring it to win every condition.

There is also a second Hugging Face candidate, SubstrateMixRaman, with:

  • 6,960 spectra;
  • 1,878 columns;
  • independently varied concentrations of eight fermentation-related metabolites;
  • additional variation from mineral salt medium and antifoam;
  • a CC BY 4.0 license.

That looks useful for a larger concentration-recovery or robustness test, especially because low concentrations were deliberately represented and the nuisance components affect overall signal intensity.

I would place it after the Sugar Mixtures experiment, however. The Sugar data have a clearer published blind-unmixing setup, pure-solution reference spectra, established unmixing baselines, and matched high-/low-SNR conditions. SubstrateMixRaman appears more naturally suited to concentration prediction and practical stress testing unless an appropriate pure-reference library is also available.

So a relatively compact default route could now be:

  1. Fully synthetic simple-structure test
    Known loadings, known transformation, conditioning ladder.

  2. RamanSPy synthetic mixtures
    Known endmembers and abundances, with realistic Raman artifacts.

  3. Sugar Mixtures, high SNR
    Real spectra under the easier acquisition condition.

  4. Sugar Mixtures, low SNR
    Real noise-robustness comparison.

  5. Reference-assisted and blind variants
    Separate discovery of endmembers from fitting known endmembers.

  6. SubstrateMixRaman or another RamanBench dataset
    Larger practical stress test.

This also gives a clean way to separate several claims:

Claim Best test
Exact simple-structure recovery Fully synthetic loading benchmark
Collapse avoidance Controlled transformation-conditioning ladder
Raman artifact robustness RamanSPy synthetic mixtures
Real endmember/abundance recovery Sugar Mixtures
Noise robustness High- versus low-SNR Sugar Mixtures
Large-data behavior SubstrateMixRaman or wider RamanBench

Regarding publication on Hugging Face: if the artifact is primarily source code, mathematics, and a reusable executable component, a Model Card can certainly serve as an overview and entry point. For the generated tests and result fixtures themselves, a separate Dataset repository and Dataset Card may be easier for others to load and compare.

A practical division could be:

  • Zenodo: archival releases, mathematics, DOI;
  • source repository: Fortran, Octave wrapper, build and test scripts;
  • HF Dataset repo: synthetic inputs, known truths, experimental configurations, outputs and metrics;
  • Model Card or project page: explanation, intended uses, limitations, and links to the other artifacts.

The Jennrich result seems to provide a strong theoretical connection. The Sugar Mixtures data may then provide a rather good empirical connection: not merely “does an ideal CLF recover perfect structure?”, but “what happens with weak components, experimental noise, missing pure endmembers, local solutions, and conditioning in a reproducible Raman problem?”

Great. The sugar mixtures data is perfect, given that I am working on non-invasive Raman glucometery, and also tested for organic carbon (DOC) and PFAS/PFOS in arctic ice core samples for the Climate Change Inst. at U. of Maine (2023, not published). I could post the report (PDF), data and decompositions as a dataset if there is interest.

One extra point: when I developed this, a lot of attention went into making the model robust to noise: the full model (metric with loss function) appears to be an approximate MLE estimator for latent sparse structure in data with strong but sparse signals on a background of approximately gaussian noise. Some better AIs confirmed this when they examined the raw maths and were prompted for various analyses. One of the best AIs happened to be the one chosen/employed by Hugging Chat, demonstrating some of the great work people here are doing.