mv_residual_pca — MULTIVAR identifiability op

• Data kinds: matrix → table

• Call: import fullseye as fs; fs.ledger.mv_residual_pca(R=None, noise_sigma=None, n_perm=100, seed=0) -> 'dict' (to call the implementation directly, import sensitivity; sensitivity.mv_residual_pca(R=None, noise_sigma=None, n_perm=100, seed=0) -> 'dict'; from the registry, opsmultivar.get("mv_residual_pca"))

Usage

Do the residuals of a fitted model still carry structure? PCA of a residual matrix vs. noise.

R is (observations x variables) — e.g. one row per image, one column per pixel or feature, holding measured minus simulated. It is not centred: a bias common to every observation is itself a structure the model lacks.

A component counts as structural when its singular value exceeds the noise edge:

• with noise_sigma (e.g. the temporal noise from an EMVA 1288 characterisation): the largest singular value of an n x p matrix of i.i.d. noise is about sigma (sqrt(n) + sqrt(p)) (Marchenko-Pastur edge), used as the threshold;

• without it: permutation parallel analysis (Buja & Eyuboglu 1992) — each column is shuffled independently n_perm times, which keeps every column's distribution but destroys structure shared across columns, and component i must beat the 95th percentile of the shuffled i-th singular values. (It cannot see a structure that lives inside single columns, e.g. a constant bias column — use noise_sigma for that.)

Returns the singular values, the threshold(s), n_structural, the share of the residual energy in the structural components, and their loadings (reshape a loading to the image shape to see *where* the model is wrong) and scores.

Detailed usage guide

• design_of_experiments family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• sensitivity_tour — py -3.11 examples/sensitivity_tour.py

Ops the type connects to (they accept table as input)

—

Same category (identifiability)

mv_confounding


*Provenance: sensitivity.py — MULTIVAR operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.