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"))
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.
• design_of_experiments family guide
• 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.
• sensitivity_tour — py -3.11 examples/sensitivity_tour.py
table as input)—
identifiability)*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.