# WAVE 2B — A2 bounded decomposition (research only)

**Status:** RESEARCH ONLY — **no M1 production scoring**; **no formula/weight freeze**  
**Date:** 2026-09-09 ~8:20 AM PT  
**Responds to:** Astra REVIEW Hub `4cc1111f` (`2f14659d`) of discrimination `4dd473f3` on job `b73c292a`  
**Refinement noted:** `3fe69703` / `417cacc4` — descriptive anatomy, **not** construct validation  
**Governance:** standing delegated agent governance; **delegation ≠ M1 acceptance**  
**L1:** `L1-US-v0.1` unchanged  
**score_authorized(M1):** **false / 0**  
**Phase / political-event tuning:** **none**

Hard gates: do **not** freeze M1; do **not** authorize scoring; do **not** rename A2~income residuals as M1.

---

## Recommendation (Astra menu)

### **`REJECT`**

Reject **A2 (`E−P`)** as a **distinct expectation-disappointment primary** for M1.

| Evidence axis | Finding |
|---------------|---------|
| Hardship / income | A2↔income **r=−0.454** / **ρ=−0.564** (n=47); stable in both eras; **all 33** 15y rolling windows have r&lt;−0.25 (mean ≈ −0.52) |
| Realization channel | A2↔PAGO **r=−0.830**; PAGO↔income **r=+0.495** — A2 largely tracks **inverse current assessment**, which tracks income |
| Expectation channel | A2↔E **r=−0.297** (**wrong sign** for high-E→high-A2 disappointment at annual frequency) |
| Variance anatomy | Var(P)=**285.4** ≫ Var(E)=**97.1**; Corr(E,P)=**+0.778**; −2Cov dominates the identity |
| Discordant cells | **weak-income ∧ low-A2 = 0** under 20/80, 25/75, and z±0.75 SD |
| Algebraic caveat | Matched-PAGO A2↔E association is **algebraic**, not validation |

Prior discrimination (`4dd473f3`) said hardship-proxy **reject-or-modify**. This decomposition resolves the fork toward **REJECT** for the expectation-disappointment construct. A later **descriptive / PAGO-linked sentiment** demotion would be a separate design choice — not KEEP, and not scoring authorization.

---

## Independent-review caution (required)

1. **A2 = E − P** mechanically rises with **E** holding **P** fixed.  
2. **Matched-PAGO** association between A2 and E is therefore **algebraic**, not independent validation or causal evidence.  
3. Component correlations have **part-whole coupling** (A2 shares terms with E and with P).  
4. **Residual variance** after A2~income is **not** construct validity and must **never** be renamed or scored as M1.  
5. Variance-share allocation of Cov(E,P) is **arbitrary accounting**, not causal decomposition.  
6. Per Astra refinement `417cacc4`: this study is **descriptive anatomy**, **not** construct validation.

---

## 0. Sample (locked)

| Item | Value |
|------|-------|
| Years | **1979–2025** contiguous |
| n | **47** |
| Filter | Full-12 monthly obs for A2 components **and** A229RX YoY |
| E | Annual mean of `PEXP_R(t−12)` (lagged expectations matching A2) |
| P | Annual mean of `PAGO_R(t)` |
| A2 | Annual mean of `PEXP_R(t−12)−PAGO_R(t)` ≡ **E − P** (identity abs error &lt; 1e−13) |
| Income | Annual mean of BEA **A229RX** YoY (`A229RX(t)/A229RX(t−12)−1`) |

Same primary sample as WAVE2B A2×B discrimination.

Artifacts: `data/m1/a2_decomposition.json`, `a2_decomposition_annual.csv`, correlations / threshold / rolling CSVs.  
Rebuild: `scripts/wave2b_a2_decomposition.py`.

---

## 1. Variance decomposition

Identity (population / N moments so the equality is exact):

\[
\mathrm{Var}(A2)=\mathrm{Var}(E-P)=\mathrm{Var}(E)+\mathrm{Var}(P)-2\mathrm{Cov}(E,P)
\]

| Term | Value | Share of Var(A2) (accounting only) |
|------|------:|-----------------------------------:|
| Var(E) | **97.121** | 0.788 |
| Var(P) | **285.393** | 2.315 |
| Cov(E,P) | **129.605** | — |
| −2Cov(E,P) | **−259.209** | −2.102 |
| Var(A2) observed | **123.304** | 1.000 |
| Identity check error | **0** | — |
| Corr(E,P) | **+0.778** | — |

**Allocation caveat:** shares of Var(E), Var(P), and −2Cov over Var(A2) are descriptive accounting only. Covariance allocation is arbitrary and does **not** identify causal expectation vs hardship contributions. Part-whole coupling applies.

**Reading:** P dominates raw variance; E and P co-move strongly; the large −2Cov term shrinks Var(A2) relative to Var(P). A large Var(E)/Var(A2) accounting share does **not** imply expectation-driven A2 — especially given **negative** A2↔E (below).

---

## 2. Pearson + Spearman (n=47, full-12 annual)

| Pair | Pearson r | Spearman ρ |
|------|----------:|-----------:|
| **A2 / PAGO** | **−0.830468** | **−0.819648** |
| **A2 / E** | **−0.296836** | **−0.301590** |
| **PAGO / income** | **+0.495388** | **+0.586759** |
| **E / income** | **+0.337646** | **+0.368640** |
| **A2 / income** | **−0.454003** | **−0.564383** |

A2↔income matches discrimination headline (r=−0.454003, ρ=−0.564383).  
A2↔E wrong-sign is the key expectation-contribution negative result.

CSV: `data/m1/a2_decomposition_correlations.csv`.

---

## 3. Predeclared matched groups / pairs

Rules locked in `a2_decomposition_matched_rules_v1` **before** characterization (see JSON).

### 3a. Matched-income (income terciles)

Cuts (linear percentile): p33≈**0.01317**, p67≈**0.02382**.

| Income tercile | n | E mean (sd) | A2 mean (sd) | Within r(E,A2) |
|----------------|--:|-------------|--------------|----------------|
| low | 16 | 115.71 (9.20) | **21.98** (11.29) | −0.114 |
| mid | 15 | 124.41 (9.48) | 15.29 (8.08) | −0.137 |
| high | 16 | 123.53 (8.44) | **6.76** (7.55) | −0.267 |

A2 falls monotonically across income terciles; within-tercile E↔A2 stays weak/negative. No narrative year picking.

### 3b. Matched-PAGO (P terciles) — algebraic caution

Cuts: p33≈**101.19**, p67≈**115.19**.

| PAGO tercile | n | E mean (sd) | A2 mean (sd) | Within r(E,A2) |
|--------------|--:|-------------|--------------|----------------|
| low | 16 | 110.57 (6.62) | **24.52** (9.89) | **+0.535** |
| mid | 15 | 125.37 (6.86) | 14.87 (6.62) | **+0.840** |
| high | 16 | 127.77 (5.00) | **4.61** (5.01) | +0.145 |

Positive within-P A2↔E is **expected algebraically** when P is held in a band (A2≈E−const). **Not** independent validation.

### 3c. Closest pairs (|Δmatch| ≤ 0.25×IQR)

| Match | n pairs | mean \|ΔE\| | mean \|ΔA2\| |
|-------|--------:|------------:|-------------:|
| income | 21 | 10.25 | 12.50 |
| PAGO | 22 | 6.27 | 6.39 |

Matched-PAGO: mean\|ΔA2\| ≈ mean\|ΔE\| — algebraic fingerprint of A2=E−P.

---

## 4. Threshold sensitivity (all predeclared)

Symmetric tails on the primary sample. Discordant = weak∧low-A2 or strong∧high-A2; concordant = weak∧high or strong∧low.

| Rule | weak∧low n | strong∧high n | discordant n | concordant n |
|------|-----------:|--------------:|-------------:|-------------:|
| **20/80** | **0** | **0** | **0** | **8** |
| **25/75** | **0** | **0** | **0** | **13** |
| **z ±0.75 SD** | **0** | **0** | **0** | **6** |

25/75 concordant years (mechanical): weak∧high = 1991,2008,2009,2010,2022; strong∧low = 1984,1986,1988,1998,2000,2014,2015,2018.

Note: discrimination `4dd473f3` used **income strong ≥ p50** (asymmetric), which labeled 1992/2002 as strong∧high. Astra’s **25/75** request uses **≥ p75**, so those years are not in the strong tail here. Both are reported honestly; this memo follows the review’s predeclared sensitivity set.

CSV: `data/m1/a2_decomposition_threshold_sensitivity.csv`.

---

## 5. Time split + 15y rolling

### 5a. Eras

| Era | n | r(A2,income) | ρ | r(A2,E) | r(A2,PAGO) | r(PAGO,income) |
|-----|--:|-------------:|--:|--------:|-----------:|---------------:|
| **1979–1999** | 21 | **−0.565** | −0.599 | −0.374 | −0.747 | +0.605 |
| **2000–2025** | 26 | **−0.430** | −0.586 | −0.290 | −0.860 | +0.450 |

Hardship-linked A2↔income remains materially negative in both eras; A2↔E stays negative; A2↔PAGO stays strongly negative.

### 5b. Rolling 15-year windows

| Item | Value |
|------|------:|
| Windows | **33** (1979–1993 … 2011–2025) |
| n per window | **15** |
| Share with r(A2,income) &lt; −0.25 | **1.00** |
| Mean r | **−0.518** |
| Min / max r | −0.729 / −0.387 |

CSV: `data/m1/a2_decomposition_rolling15y.csv`.

---

## 6. Optional residual diagnostic (not M1)

OLS: `A2 ~ a + b·income` on n=47.

| Fit | Value |
|-----|------:|
| intercept | 19.467 |
| slope | −261.196 |
| R² | 0.206 |
| residual Var (pop) | 97.889 |

Residual correlations (diagnostic only):

| Pair | r | ρ |
|------|--:|--:|
| resid / E | −0.161 | −0.157 |
| resid / PAGO | **−0.680** | −0.636 |

After removing the linear income association, residuals still track **−PAGO**. **Do not** rename, publish, or score residuals as M1.

---

## 7. KEEP / MODIFY / REJECT — decision

| Option | Verdict |
|--------|---------|
| KEEP | **No** — A2 does not behave as a distinct expectation-disappointment primary |
| MODIFY | Not chosen as menu answer; demotion to descriptive PAGO-linked sentiment remains a *future design option*, not a keep |
| **REJECT** | **Yes** — hardship/realization dominance; expectation contribution wrong-signed / algebraic only |

**M1:** research-only continuum continues for other candidates (A1, Track B comparators, etc.). **score_authorized(M1)=false**. **L1 unchanged**. **No freeze**.

---

## Artifacts

| Path | Role |
|------|------|
| `docs/m1/WAVE2B_A2_DECOMPOSITION.md` | This memo |
| `data/m1/a2_decomposition.json` | Full machine-readable result |
| `data/m1/a2_decomposition_annual.csv` | E, P, A2, income, residual by year |
| `data/m1/a2_decomposition_correlations.csv` | Pairwise r/ρ |
| `data/m1/a2_decomposition_threshold_sensitivity.csv` | 20/80, 25/75, z±0.75 cells |
| `data/m1/a2_decomposition_rolling15y.csv` | Rolling windows |
| `scripts/wave2b_a2_decomposition.py` | Rebuild |

Hub mirrors (kebab-case under `/docs/`): `wave2b-a2-decomposition.md` + matching `wave2b-a2-decomposition-*.json/csv`.
