FAILURE MAP
← Case archive

FA-13681 / Numerical aggregation / Open access

Contingency pearson reduction: Residuals are normalized by observed counts. · case 01

The reduction disagrees with its explicit aggregation oracle.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Residuals are normalized by observed counts.

VERIFIED REPAIR

Preserve the contingency pearson reduction contract at the identified reduction decision.

Unsuccessful approach: Adding observed count to expectation changes the Pearson normalization.

Case contract

For a rectangular nonnegative integer count table, return the Pearson sum of (observed-expected)^2/expected under independence, with expected=row marginal*column marginal/grand total. Zero expected cells contribute zero; empty or zero-total tables return "0". Exact Fraction string; no inferential p-value claim.

Why this case matters

Exact bounded examples isolate a reduction defect without floating-point or external-service effects.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
from collections import Counter, defaultdict
import math
import itertools
N = 1
observations = []
def solve(table):
    n=len(table)
    m=len(table[0]) if n else 0
    rows=[sum(r) for r in table]
    cols=[sum(table[i][j] for i in range(n)) for j in range(m)]
    total=sum(rows)
    if not total: return "0"
    stat=Fraction(0)
    for i in range(n):
        for j in range(m):
            expected=Fraction(rows[i]*cols[j],total)
            if expected==0: continue
            stat+=(table[i][j]-expected)**2/max(1,table[i][j])
    return str(stat)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('regression 1', solve(*([[4, 0], [0, 4]],)), '8')
check('regression 2', solve(*([[2, 3], [4, 6]],)), '0')
check('regression 3', solve(*([],)), '0')
check('regression 4', solve(*([[0, 0], [0, 0]],)), '0')
check('regression 5', solve(*([[2, 0, 1], [3, 4, 0]],)), '30/7')
check('regression 6', solve(*([[0, 0, 0], [1, 2, 3]],)), '0')
check('regression 7', solve(*([[1, 2], [3, 0], [2, 4]],)), '4')
check("variable diagonal mass",solve([[N,0],[0,N]]),str(2*N))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 1108Failed
regression 200Passed
regression 300Passed
regression 400Passed
regression 51793/60030/7Failed
regression 600Passed
regression 733/84Failed
variable diagonal mass12Failed

SHA-256 / 7dd3d454b92e5acf5fa798c1e77461fae7513fe4b2c3c24d1ede622136b56521

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
from collections import Counter, defaultdict
import math
import itertools
N = 1
observations = []
def solve(table):
    n=len(table)
    m=len(table[0]) if n else 0
    rows=[sum(r) for r in table]
    cols=[sum(table[i][j] for i in range(n)) for j in range(m)]
    total=sum(rows)
    if not total: return "0"
    stat=Fraction(0)
    for i in range(n):
        for j in range(m):
            expected=Fraction(rows[i]*cols[j],total)
            if expected==0: continue
            stat+=(table[i][j]-expected)**2/(expected+table[i][j])
    return str(stat)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('regression 1', solve(*([[4, 0], [0, 4]],)), '8')
check('regression 2', solve(*([[2, 3], [4, 6]],)), '0')
check('regression 3', solve(*([],)), '0')
check('regression 4', solve(*([[0, 0], [0, 0]],)), '0')
check('regression 5', solve(*([[2, 0, 1], [3, 4, 0]],)), '30/7')
check('regression 6', solve(*([[0, 0, 0], [1, 2, 3]],)), '0')
check('regression 7', solve(*([[1, 2], [3, 0], [2, 4]],)), '4')
check("variable diagonal mass",solve([[N,0],[0,N]]),str(2*N))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 116/38Failed
regression 200Passed
regression 300Passed
regression 400Passed
regression 54020/154730/7Failed
regression 600Passed
regression 788/354Failed
variable diagonal mass4/32Failed

SHA-256 / 42097e3f5b20efd0f77f672988da0f3eb19b8c714f1236ff5e07ffdc0f253530

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
from collections import Counter, defaultdict
import math
import itertools
N = 1
observations = []
def solve(table):
    n=len(table)
    m=len(table[0]) if n else 0
    rows=[sum(r) for r in table]
    cols=[sum(table[i][j] for i in range(n)) for j in range(m)]
    total=sum(rows)
    if not total: return "0"
    stat=Fraction(0)
    for i in range(n):
        for j in range(m):
            expected=Fraction(rows[i]*cols[j],total)
            if expected==0: continue
            stat+=(table[i][j]-expected)**2/expected
    return str(stat)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('regression 1', solve(*([[4, 0], [0, 4]],)), '8')
check('regression 2', solve(*([[2, 3], [4, 6]],)), '0')
check('regression 3', solve(*([],)), '0')
check('regression 4', solve(*([[0, 0], [0, 0]],)), '0')
check('regression 5', solve(*([[2, 0, 1], [3, 4, 0]],)), '30/7')
check('regression 6', solve(*([[0, 0, 0], [1, 2, 3]],)), '0')
check('regression 7', solve(*([[1, 2], [3, 0], [2, 4]],)), '4')
check("variable diagonal mass",solve([[N,0],[0,N]]),str(2*N))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 188Passed
regression 200Passed
regression 300Passed
regression 400Passed
regression 530/730/7Passed
regression 600Passed
regression 744Passed
variable diagonal mass22Passed

SHA-256 / a542bad753b06822356152fad5fc9b485291a2b7e3697bb4d919b633d8619773

Verification & scope

Small offline integer/rational inputs only; no performance, statistical inference, or production-library conformance claim. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:39:09.587992+00:00.

Case digest / 05511eb1faaef74a970f50cf576b792236f611308998cddec99710f8b1e69eae