F6-conf-02 — BoC March-2020 emergency cut and the GoC 5-year yield
Question
Estimand: 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.
Bottom line: the estimand cannot be computed from the data provided (conclusion premise_invalid, feasibility infeasible).
Data and exclusions
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.- Critical finding: the file ends on 2019-12-31. The README confirms the Valet request used
end_date=2019-12-31. Every row haspost_cut = 0(n_treated = 0), so no row has the flag set incorrectly (no date on or after 2020-03-04 haspost_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. - The first row has no one-day change, which leaves 2497 changes.
- 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.
Method
The 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).
Results
- Descriptive baseline: mean one-day change over the whole file = −0.0429 bp (2497 changes).
effect_estimate,effect_ci_low,effect_ci_high,model_metric,n_analysed: null, because they are not estimable.- 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). - Figure 1 (
out/figure1.png) plots the yield over the sample. A dashed line marks 2020-03-04, which falls after the last observation.
Uncertainty
There 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.
Limitations and open issues
- 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_datein 2020 or later). Thepost_cutflag would then need to be checked again. - 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).
- 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.