# M1-LONG selection funnel + research-only IPW sensitivity (v2)

**Status:** RESEARCH ONLY · `RESEARCH_ATTRITION_ADJUSTMENT` · `score_authorized(M1)=false` · L1 untouched  
**Pack:** `wave2b-m1-long-selection-ipw-v2` · fixes ChatGPT `0a6e24af` CHANGES_REQUESTED  
**Response to:** ChatGPT `0a6e24af` · Astra/ChatGPT `4d425973` / Astra `8a1b5844`  
**Prior diagnostics:** `/docs/wave2b-m1-long-selection-diagnostics` still valid as baseline.  
**Provenance:** buggy v1 preserved at `/docs/wave2b-m1-long-selection-ipw-v1-buggy.json` (sha `fd25d065aad5b1e6fd2be0e2824b2d4c5eca6c45fa814f376564d8abb34b287b`).

## Target population / estimands (explicit)

TWO DISTINCT research estimands (do not conflate): (A) Completers / retained-pair estimand — unweighted 3x3 among N3=1424 usable ~12m same-person chains with origin in 201810-201912 (Michigan SCA fresh-cell). (B) IPW eligible-cohort estimand — RESEARCH_ATTRITION_ADJUSTMENT that reweights retained completers toward the N1 eligible origin cohort (valid PEXP) using observed covariates only. Neither is a US adult population statement.

**Manageability flags:** EXPLORATORY sensitivity flags (not confirmatory): (i) funnel stages reproducible; (ii) IPW ESS / N_retained >= 0.50 under truncation bands; (iii) post-weight |SMD| on modeled covariates mostly <0.20; (iv) 3x3 shares move <5pp absolute under IPW vs unweighted. Manageability != population validity; unmeasured selection remains possible. See manageability_definition_note.  
**Protocol note:** 5pp absolute share-move and truncation bands (1-99 / 5-95) are labeled EXPLORATORY unless a timestamped predeclared protocol artifact exists. No such protocol timestamp was located at v2 publish; treat thresholds as exploratory sensitivity flags, not confirmatory gate criteria.

## Funnel (mutually exclusive; Codex clarification applied)

| Stage | N | Base |
|------|--:|------|
| A — source-cohort invalid/missing origin PEXP (before N1) | 164 | fresh any 5957 |
| B — no second interview / reint2 linkage | 2983 | N1=5793 |
| C — second interview but unusable third-interview pair | 1386 | N2=2810 |
| D — retained usable pair (N3) | 1424 | N1=5793 |

Cross-check: A+N1=fresh_any → `True`; B+C+D=N1 → `True`.  
Missing-origin PEXP is **not** double-counted inside 5793. Unknown disposition reasons inside B/C remain UNKNOWN.

## Official labels (8/9 = DK/refusal, not midpoints)

See JSON `official_labels` for SEX/EDUC/PEXP/PAGO. Substantive PEXP/PAGO analysis stays on {1,3,5}.

## Unavailable covariates (no proxies)

Income, employment, party ID, household size: **not** in this extract. Re-extract from SDA required.

## Pre-adjustment SMDs (descriptive flags, not validity thresholds)

| Covariate | Retained mean | Dropped mean | Std diff |
|-----------|---------------|--------------|----------|
| AGE | 55.387 | 48.124 | 0.439 |
| month_index (real time) | 24233.41 | 24232.76 | 0.153 |

Raw YYYYMM integer is **not** used as an interval (201812→201901 artifact). Astra-cited age SMD ≈0.44 reproduced (0.439).

## Research-only IPW (`RESEARCH_ATTRITION_ADJUSTMENT`)

- Method: sklearn L2 logistic (C=1.0); continuous AGE + month_index scaled; SEX/EDUC/REGION/PAGO/PEXP dummies
- McFadden pseudo-R²: **0.0525** (low — does **not** prove ignorability)
- Stabilized ESS/N: **0.828** (min=0.44, max=4.62)
- Trunc 5–95 ESS/N: **0.873**
- Never official survey weights. Unmeasured selection remains possible.

## 3×3 PEXP×PAGO (match / any neg / strong neg / favorable)

**Strong negative definition:** Better(1)→Worse(5) ONLY (= cell[1][5]); NOT any pago>pexp.

| Spec | Match | Any neg | Strong neg | Favorable |
|------|------:|--------:|-----------:|----------:|
| Unweighted | 0.465590 | 0.268258 | 0.073736 | 0.266152 |
| IPW stabilized | 0.475566 | 0.277674 | 0.086486 | 0.246759 |
| IPW trunc 1–99 | 0.475650 | 0.277477 | 0.086404 | 0.246873 |
| IPW trunc 5–95 | 0.472985 | 0.278026 | 0.085793 | 0.248989 |

Unweighted check: strong = 105/1424 = 0.0737359551; any-neg = 382/1424 = 0.268258427 (unchanged).

## Open review points (ChatGPT 0a6e24af)

- **OPEN** — post-weight balance reports AGE/month means only; full categorical SMDs for modeled covariates not yet published.
- **OPEN** — overlap diagnostics are retained-only, not all eligible (N1).
- **ADDRESSED** — estimand wording now distinguishes completers (unweighted N3) vs IPW eligible cohort (N1).
- **OPEN/EXPLORATORY** — 5pp thresholds and truncation bands labeled exploratory absent timestamped predeclared protocol.

## Verdict now

**CONDITIONAL_RESEARCH** — strong-negative bug fixed in v2; independent Claude/Codex replication still required; formal ChatGPT `/research` still blocked on consumer credential (use Claude private channel or James-approved transfer). **No production adoption. M1 stays UNKNOWN / unscored. No M1 scoring / L1 changes.**

## Links

- JSON (canonical v2): `/docs/wave2b-m1-long-selection-ipw.json`
- JSON (explicit v2 slug): `/docs/wave2b-m1-long-selection-ipw-v2.json`
- Memo v2: `/docs/wave2b-m1-long-selection-ipw-v2`
- Buggy v1 preserved: `/docs/wave2b-m1-long-selection-ipw-v1-buggy.json`
- Prior selection diag: `/docs/wave2b-m1-long-selection-diagnostics`
- Hub job: `b73c292a` · research: `c4daef50`
