uncertainty op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.gum_expanded(table, u='u', sensitivity='sensitivity', dof='dof', level=0.95, correlation=None, estimate=None, lower_bound=None, upper_bound=None) (to call the implementation directly, import spc; spc.gum_expanded(table, u='u', sensitivity='sensitivity', dof='dof', level=0.95, correlation=None, estimate=None, lower_bound=None, upper_bound=None); from the registry, opsspc.get("gum_expanded"))
• GPU: none (CPU reference implementation only)
Welch-Satterthwaite effective degrees of freedom, coverage factor k and expanded uncertainty U (table).
nu_eff = u_c^4 / sum_i (c_i u_i)^4 / nu_i U = k u_c, k = t_{p}(floor(nu_eff))
★ There are 3 exact properties usable as a gate:
• With only 1 component, nu_eff == nu (exact).
• nu_eff >= min_i nu_i always holds. Proof: sum u_i^4/nu_i <= (1/nu_min) sum u_i^4 <= (1/nu_min)(sum u_i^2)^2. If the effective degrees of freedom fall below those of the smallest component, the computation is broken.
• If all degrees of freedom are infinite, k converges to the quantile of the normal distribution (1.959964 at 95 %).
For infinite degrees of freedom (known constants and the like) put numpy.inf.
★★ Degrees of freedom with correlation. Welch-Satterthwaite (GUM G.4.1) assumes independent inputs; applied as is to a u_c that contains correlation terms it inflates the degrees of freedom (two equal components, nu=4 each, r=+1 give nu_eff=32 -- more than the budget's total of 8). With negative correlation it collapses below 1 instead. So when *correlation* has a non-zero off-diagonal entry, the components linked by non-zero correlation are merged into one group, and Welch-Satterthwaite is built from the group variance w_g' R_g w_g (w = c u) and the group's degrees of freedom min_{i in g} nu_i::
nu_eff = u_c^4 / sum_g (w_g' R_g w_g)^2 / min_{i in g} nu_i
Rationale: for correlated components estimated from the same measurements (a Wishart covariance with a common nu), the estimator of the combined variance is exactly sigma^2 chi^2_nu / nu, so the effective degrees of freedom are nu itself whatever r is (consistent with Willink, *Metrologia* 44:340, 2007, whose generalised Welch-Satterthwaite gives nu for two equal components with r=+1). When components with different degrees of freedom are correlated the minimum is taken -- a rule of this implementation that leans to the safe side (a larger k), not a formula of the standard. If every correlation is 0 (or the matrix is the identity) every group has one component and the value equals the classical formula.
• 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.
• poc_light_section_step_weld_floor — py -3.11 examples/poc_light_section_step_weld_floor.py
• poc_measurement_system_analysis — py -3.11 examples/poc_measurement_system_analysis.py
table as input)msa_anova_table · msa_gauge_rr · msa_bias_linearity · msa_attribute_agreement · gum_standard_uncertainty · gum_propagate · gum_monte_carlo · gum_validate
uncertainty)gum_standard_uncertainty · gum_propagate · gum_monte_carlo · gum_validate
*Provenance: spc.py — SPC 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.