# F6-conf-02 — BoC March-2020 emergency cut and the GoC 5-year yield ## Question The question is how the Government of Canada 5-year benchmark yield moved after the Bank of Canada's first emergency 50 bp cut on 2020-03-04. The estimand is the mean one-day change (bp) on rows with `post_cut = 1`, minus the mean one-day change over the 120 trading days just before the first flagged row, with a Welch (unequal-variance) 95% interval. **Answer: this cannot be computed from the data provided** (`conclusion` = `premise_invalid`, `feasibility` = `infeasible`). ## Data and exclusions - Input: `data/gc5y_daily.csv`, 2498 rows (`n_input_rows`), SHA-256 matches the README. There are no missing values and no duplicate dates, and there are 249–250 business days per year. - The sample runs from `sample_start` = 2010-01-04 to `sample_end` = 2019-12-31. The README shows the data were retrieved with `end_date=2019-12-31`. - **`n_treated` = 0**: every row has `post_cut = 0`. That is consistent with how the flag is defined (no date on or after 2020-03-04 exists), but it means the post-cut period is not in the file. This is recorded in `data_issues`. - Exclusion ledger (`out/exclusions.csv`): - The first row has no one-day change, leaving 2497 changes (`baseline_n_changes`). - Restricting to the estimand windows leaves 0 rows, so `n_analysed` = null. - Table 1 (`out/table1.csv`) gives yearly row counts, mean yield and mean change. Figure 1 (`out/figure1.png`) plots the yield series, with the cut date marked outside the sample. ## Method - One-day changes are 100·(y_t − y_{t−1}) between consecutive rows. - Descriptive baseline: the mean change over the whole file. - Planned main method: a two-window mean comparison. The windows were the post_cut=1 rows and the 120 rows before the first flagged row. The interval would be a Welch t-interval with Satterthwaite degrees of freedom, and the model metric the RMSE of the two-window mean model. This is implemented in `out/analysis.py` but only runs when flagged rows exist. - `post_cut` was not redefined, and no proxy window was substituted. No randomness was used (`random_seed` = null). ## Results - `baseline_metric` = −0.0429 bp per day: the mean one-day change over 2010–2019. As a check, it equals 100·(1.68 − 2.75)/2497. - `effect_estimate`, `effect_ci_low`, `effect_ci_high` and `model_metric` are all null, because neither estimand window exists in the file (`n_treated` = 0). - `conclusion` = `premise_invalid`, with the reason given in `feasibility_reason`. ## Uncertainty No interval can be reported for the effect because the effect is not estimable (`effect_ci_low` / `effect_ci_high` = null). The baseline (`baseline_metric`) is a descriptive average only, and I attach no inferential claim to it. ## Limitations and open issues - **What invalidates the analysis:** the supplied file stops about two months before the event, so there is nothing to compare before and after. Getting a result would need data from 2020 onward (e.g., Valet with a later `end_date`). Using another source is not allowed under the task rules. - **Proxies I deliberately avoided:** - Treating late-2019 days as a "pre" window with nothing to compare them against. - Redefining `post_cut`. - Fabricating post-cut values. Any of these would answer a different question or invent data. - **If data were available, the main threats would still be:** - Confounding: the March 2020 COVID market dislocation, further cuts on 2020-03-13 and 2020-03-27, and BoC asset purchases all overlap the post window. A before/after difference is not a causal effect of the 2020-03-04 cut. - Heavy-tailed and autocorrelated daily changes, which would weaken the Welch interval. - Sensitivity to the length of the post window. - **Not checked:** whether the published yields contain revisions, and whether the business-day calendar matches every Canadian holiday (gaps of 1–5 calendar days look normal).