You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Address PR #365 R8 P1: drop FPC from placebo dispatch + document FPC no-op contract
P1 (Methodology — placebo dispatch flipped on FPC alone, but FPC
plays no role in placebo math):
The dispatcher gated placebo's survey-path routing on
``_full_design_survey = strata is not None OR psu is not None OR fpc
is not None``. Adding an ``fpc=`` column to a SurveyDesign therefore
silently switched dispatch from the non-survey placebo path
(unweighted-FW + post-hoc ω composition) to the weighted-FW survey
placebo path — different numerics — even though permutation tests are
conditional on the observed sample (Pesarin 2001 §1.5) and the
sampling fraction never enters Algorithm 4 or its stratified-
permutation survey extension. The reviewer correctly flagged this
as an undocumented methodology mismatch on a public variance method.
Fix:
* Gate ``_placebo_use_survey_path`` on ``strata is not None OR psu
is not None`` (FPC dropped from the trigger). FPC alone now keeps
placebo on the non-survey path with no numerical drift relative to
the no-FPC fit.
* Emit a ``UserWarning`` whenever ``fpc`` is set with
``variance_method="placebo"``, regardless of whether ``strata`` or
``psu`` are also set, so users get an explicit signal that the
FPC column is preserved in design metadata but does not enter
placebo math. Recommends ``variance_method="bootstrap"`` or
``"jackknife"`` for FPC participation.
* REGISTRY §SyntheticDiD "Note (survey support matrix)" placebo
bullet rewritten to spell out the contract: "for designs with
explicit ``strata`` and/or ``psu`` … FPC is a documented no-op for
placebo — permutation tests are conditional on the observed sample
(Pesarin 2001 §1.5)."
* survey-theory.md placebo bullet picks up the same FPC no-op
language plus the Case B/C/D guard enumeration from R5.
New regression
``test_placebo_fpc_alone_no_op_warns_and_matches_pweight_only``
asserts both contracts: (a) ``UserWarning`` fires when fpc is set
on placebo, (b) SE under ``SurveyDesign(weights, fpc)`` matches SE
under ``SurveyDesign(weights)`` at ``rel=1e-12`` (true no-op, not a
silent dispatch flip introducing weighted-FW drift).
Bootstrap and jackknife paths unchanged — they use FPC legitimately
(Rao-Wu rescaling for bootstrap, ``(1 - f_h)`` factor in the Rust &
Rao 1996 jackknife formula). Only placebo's contract narrows.
Verification: 95 passed (1 new FPC no-op regression).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/methodology/REGISTRY.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1561,7 +1561,7 @@ Convergence criterion: stop when objective decrease < min_decrease² (default mi
1561
1561
1562
1562
**Bootstrap survey path** (PR #355): for pweight-only the per-draw FW uses constant `rw = w_control`; for full design (strata/PSU/FPC) the per-draw `rw = generate_rao_wu_weights(resolved_survey, rng)` rescaling is composed with the same weighted-FW kernel. See "Note (survey + bootstrap composition)" below for the full objective and the argmin-set caveat.
1563
1563
1564
-
**Placebo survey path**: for pweight-only the existing Algorithm 4 flow applies with survey-weighted pseudo-treated means + post-hoc ω_eff composition. For full design (strata/PSU/FPC) the allocator switches to **stratified permutation** (Pesarin 2001): pseudo-treated indices are drawn within each stratum containing actual treated units; weighted-FW re-estimates ω and λ per draw with per-control survey weights threaded into both loss and regularization. See "Note (survey + placebo composition)" below.
1564
+
**Placebo survey path**: for pweight-only the existing Algorithm 4 flow applies with survey-weighted pseudo-treated means + post-hoc ω_eff composition. For designs with explicit `strata` and/or `psu`the allocator switches to **stratified permutation** (Pesarin 2001): pseudo-treated indices are drawn within each stratum containing actual treated units; weighted-FW re-estimates ω and λ per draw with per-control survey weights threaded into both loss and regularization. See "Note (survey + placebo composition)" below. **FPC is a documented no-op for placebo** — permutation tests are conditional on the observed sample (Pesarin 2001 §1.5), so the sampling fraction does not enter Algorithm 4 or its survey extension; an `fpc=` column on a placebo fit emits a `UserWarning` and is preserved in the design metadata but never enters the variance computation. Routing is gated on `strata` / `psu` only — FPC alone does not flip dispatch from the non-survey to the survey placebo path.
1565
1565
1566
1566
**Jackknife survey path**: for pweight-only the existing Algorithm 3 flow applies (unit-level LOO with subset + rw-composed-renormalized ω; λ fixed). For full design the allocator switches to **PSU-level LOO with stratum aggregation** (Rust & Rao 1996): leave out one PSU at a time within each stratum, aggregate as `SE² = Σ_h (1-f_h)·(n_h-1)/n_h·Σ_{j∈h}(τ̂_{(h,j)} - τ̄_h)²`. See "Note (survey + jackknife composition)" below.
0 commit comments