spc_hotelling_t2 — SPC multivariate op

• Data kinds: matrix → table

• Call: import fullseye as fs; fs.ledger.spc_hotelling_t2(data, alpha=0.0027, mean=None, cov=None) (implementation को सीधे call करना हो तो import spc; spc.spc_hotelling_t2(data, alpha=0.0027, mean=None, cov=None), registry से लेना हो तो opsspc.get("spc_hotelling_t2"))

• GPU: नहीं (केवल CPU reference implementation)

उपयोग

Hotelling के T² द्वारा multivariate SPC, जिसकी control limit चरण के अनुसार चुनी जाती है (phase I में Beta distribution, ज्ञात parameters में χ² distribution)।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

data is a 2-D array of shape (m, p) — m observations of p correlated features. Each row's statistic is::

T^2_i = (x_i - mu)' S^-1 (x_i - mu)

The control limit depends on where mu and S come from, and the op picks it from what you pass:

• Phase I (default, neither mean nor cov) — mu and S are the sample mean and ddof=1 covariance of the *same* rows. Then m T^2_i / (m-1)^2 follows Beta(p/2, (m-p-1)/2) exactly (Gnanadesikan & Kettenring 1972; Tracy, Young & Mason 1992), so::

UCL = (m-1)^2 / m * Beta_{1-alpha}(p/2, (m-p-1)/2)

In phase I T^2_i <= (m-1)^2/m holds for every row whatever the data, so

the phase-II F limit (which exceeds that bound for small m) can never

alarm there. Needs m >= p + 2.

• Known parameters (both mean and cov) — the in-control mean and covariance are taken as known (a specification, or estimates from a very large reference). Then T^2 ~ chi^2_p and UCL = chi^2_{p, 1-alpha}, independent of how many rows are charted (one row is enough).

• Phase II with estimated parameters — if mean / cov were estimated from a separate in-control reference of n rows and new rows are charted against them, the exact limit is p (n+1)(n-1) / (n (n-p)) * F_{1-alpha}(p, n-p) with n the size of the *reference*, not of the charted data. This op treats passed parameters as known (chi-square limit, the n -> inf limit of that F form); for a small reference compute the F limit with your n and compare t2 against it.

Passing only one of mean / cov is refused: no standard control limit exists for a half-known parameter set.

At false-alarm rate alpha (default 0.0027, the 3-sigma-equivalent). Returns a dict with the per-row t2 array, the ucl, the phase used ("phase_I" / "known"), the integer indices out_of_control, and boolean in_control. The mean row (x == mu) has T^2 == 0 (pinned in the tests).

Raises ValueError: a non-2-D / empty *data*, fewer than p+2 observations in phase I, only one of mean / cov, alpha outside (0, 1), a singular covariance, or non-finite / mislabelled input.

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_spc — py -3.11 examples/poc_spc.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

msa_anova_table · msa_gauge_rr · msa_bias_linearity · msa_attribute_agreement · gum_standard_uncertainty · gum_propagate · gum_expanded · gum_monte_carlo

इसी category के (multivariate)

—


*Provenance: spc.py — SPC operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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