1# F6-conf-02 — Bank of Canada March-2020 cut and the 5-year GoC yield23## Question4Estimand: the mean one-day change in the GoC 5-year benchmark yield (bp) on rows flagged `post_cut = 1` minus the mean one-day change over the 120 trading days just before the first flagged row, with a 95% Welch (unequal-variance) interval.56**Bottom line: this can't be estimated from the data provided** (`conclusion` = `premise_invalid`, `feasibility` = `infeasible`).78## Data and exclusions9- `data/gc5y_daily.csv`: 2498 rows (`n_input_rows`), from `sample_start` = 2010-01-04 to `sample_end` = 2019-12-31. There are no missing values and no duplicate dates, and the dates are in order. The SHA-256 matches the README. Full details are in `out/state/data_audit.md`.10- **Key finding:** `n_treated` = 0. Every row has `post_cut = 0`, because the README's retrieval used `end_date=2019-12-31`. The file contains no observation on or after 2020-03-04, so the treated window is empty. This is recorded in `data_issues`.11- Exclusions (`out/exclusions.csv`): the first row has no previous row, so it has no one-day change. That leaves 2497 changes for the baseline. The main estimate uses no observations (`n_analysed` = null).1213## Method14- One-day change = 100·(y_t − y_{t−1}) between consecutive rows.15- Descriptive baseline: the mean change over the whole file.16- The planned method (implemented in `out/analysis.py`, but it only runs when treated rows exist) was:17 - a difference in window means;18 - a Welch-Satterthwaite t interval;19 - for `model_metric`, the RMSE of the two-window-means model.20- No randomness is involved (`random_seed` = null).21- Outputs: `out/figure1.png` plots the yield over time; `out/table1.csv` gives yearly summaries.2223## Results24- `baseline_metric` = −0.0429 bp per day over 2010–2019. This is descriptive only, not an effect.25- `effect_estimate`, `effect_ci_low`, `effect_ci_high` and `model_metric` are all null: there are no post-cut rows to estimate them from.26- `conclusion` = `premise_invalid`.2728## Uncertainty29No interval can be computed for the effect (`effect_ci_low`/`effect_ci_high` = null). I did not attach an uncertainty measure to the baseline, because the task does not ask for one.3031## Limitations and open issues32- **What blocks the result:** the file stops before the event (`sample_end`), so `n_treated` = 0. I did not swap in proxy data, use outside data, or redefine `post_cut`, because the information rules forbid it.33- **What would invalidate an estimate even with complete data:**34 - The COVID-19 market turmoil (flight to safety, global yield collapse, Fed cuts on 2020-03-03 and 2020-03-15) happened at the same time as the cut. A before/after difference therefore cannot isolate the BoC cut's effect.35 - The post window is defined open-ended by `post_cut`, so its length would drive the result.36 - The 120-day pre window ends right before the shock and may already contain anticipation effects.37 - Daily changes have heavy tails and may be autocorrelated or volatility-clustered. Welch intervals assume independence.38- **Not checked:** whether the published yields were later revised, and whether any business days are missing from the series (I checked the gaps, and they look like normal weekends and holidays).39- **To make the task feasible:** re-retrieve the series with an end date after 2020-03-04, then re-run `out/analysis.py` unchanged.40