1# F6-conf-02 — BoC March-2020 emergency cut and the GoC 5-year yield23## Question4Estimand: mean one-day change (bp) of the GoC 5-year benchmark yield on days with `post_cut = 1` minus the mean one-day change on the 120 trading days immediately before the first flagged day, with a 95% Welch (unequal-variance) interval.56**Bottom line: the estimand cannot be computed from the data provided (conclusion `premise_invalid`, feasibility `infeasible`).**78## Data and exclusions9- `data/gc5y_daily.csv`: 2498 rows, 2010-01-04 to 2019-12-31 (SHA-256 matches README). No missing values, no duplicate dates, dates strictly increasing. Gaps between rows are at most 5 calendar days, which fits weekends and holidays.10- **Critical finding:** the file ends on 2019-12-31. The README confirms the Valet request used `end_date=2019-12-31`. Every row has `post_cut = 0` (`n_treated = 0`), so no row has the flag set incorrectly (no date on or after 2020-03-04 has `post_cut = 0`). However, there is no post-cut window, and there is no "first flagged day" from which to count back the 120-day pre-window.11- The first row has no one-day change, which leaves 2497 changes.12- No proxy was substituted. For example, the last 120 days of 2019 were not used as the pre-window, and no external 2020 data were used. The task forbids both, and a proxy would not answer the question.1314## Method15The planned method was implemented in `out/analysis.py` but only runs if treated rows exist. One-day changes are 100·(y_t − y_{t−1}) between consecutive rows. The effect is mean(post) − mean(pre-120). The 95% CI is a Welch t interval with Welch–Satterthwaite df. The model metric is the RMSE of residuals around the two window means. Because `n_treated = 0`, none of these were computed. The script produces only the descriptive baseline, Table 1 and Figure 1. No randomness is used (`random_seed = null`).1617## Results18- Descriptive baseline: mean one-day change over the whole file = **−0.0429 bp** (2497 changes).19- `effect_estimate`, `effect_ci_low`, `effect_ci_high`, `model_metric`, `n_analysed`: **null**, because they are not estimable.20- Table 1 (`out/table1.csv`) gives yearly counts, mean yields and mean changes for 2010–2019. The yearly mean yield ranges from 0.73% (2016) to 2.48% (2010).21- Figure 1 (`out/figure1.png`) plots the yield over the sample. A dashed line marks 2020-03-04, which falls after the last observation.2223## Uncertainty24There is no effect estimate, so there is no interval. The baseline mean is descriptive only and has no causal meaning; no inference was done on it.2526## Limitations and open issues27- **What invalidates the analysis as specified:** the input does not cover the event. Any number reported as "the effect" would be invented. To answer the question, the series must be re-extracted to cover at least about Aug 2019 to the end of the post-cut window (e.g. `end_date` in 2020 or later). The `post_cut` flag would then need to be checked again.28- **Not checked:** whether the published series has been revised; whether the post-cut window was meant to be closed (the flag stays 1 indefinitely, so a long post-window would mix the March 2020 cuts with later events).29- **Threats even with correct data:** (i) the 2020-03-04 cut came in the middle of the COVID market shock, and other events (the 2020-03-13 and 2020-03-27 cuts, the start of GoC bond purchases, global yield moves) confound a simple pre/post difference in mean changes; (ii) daily yield changes in March 2020 had heavy tails and volatility clustering, so a Welch interval that assumes independent observations is likely too narrow; (iii) the result depends on how long the post window is; (iv) a difference in means of *changes* measures drift, not the jump on the announcement day. An event-study design with a narrow window would be the better tool.30