uncertainty op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.gum_propagate(table, u='u', sensitivity='sensitivity', correlation=None) (to call the implementation directly, import spc; spc.gum_propagate(table, u='u', sensitivity='sensitivity', correlation=None); from the registry, opsspc.get("gum_propagate"))
Law of propagation of uncertainty (GUM 5.2, with correlations) (table).
u_c^2 = sum_i (c_i u_i)^2 + 2 sum_{i<j} c_i c_j u_i u_j r_ij
*table* is a table with columns *u* (standard uncertainty) and *sensitivity* (sensitivity coefficient c_i = df/dx_i). Passing an (n, n) correlation matrix as *correlation* includes the correlation terms.
★ A closed form usable as a gate: for f = x y, c_x = y / c_y = x, so u_c/|f| = sqrt((u_x/x)^2 + (u_y/y)^2) -- the root sum of squares of the relative uncertainties. For 2 components with correlation r = +1 it matches u_c = |c1 u1 + c2 u2|| exactly, and for r = -1 it is |c1 u1 - c2 u2| (cancellation). Without correlation the sum of contributions closes exactly to u_c^2.
★★ The direction of the error from ignoring correlation is not fixed. "Treating them as independent underestimates" is often said, but it is false. Measuring on the standard's worked example (voltage, current and phase difference -> resistance and reactance simultaneously, all 3 quantities correlated) with the correlation dropped:
u_c(R) 0.0702 -> 0.1945 2.8x overestimate
u_c(X) 0.2961 -> 0.2009 underestimate
u_c(Z) 0.2367 -> 0.2041 underestimate
On the same 1 data set the direction flips depending on the quantity -- it is decided by the product of the sign of the sensitivity coefficient and the sign of the correlation, so it is obvious in a sense, but if you omit the correlation thinking "it errs on the safe side", you end up reporting an uncertainty nearly 3x too large for R.
• 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_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_expanded · gum_monte_carlo · gum_validate
uncertainty)gum_standard_uncertainty · gum_expanded · 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.