SPB Git

spb/wp29_uqo

Public

# F6-conf-02 — BoC March-2020 emergency cuts and the GoC 5-year yield

# Question

The question is whether the average one-day change in the Government of Canada 5-year benchmark yield (in bp) was different on days flagged post_cut = 1 (on or after 2020-03-04) than over the 120 trading days just before the first flagged day. The comparison needs a Welch-type (unequal-variance) 95% interval.

# Data and exclusions

  • Input: data/gc5y_daily.csv, 2,498 rows, Bank of Canada Valet series BD.CDN.5YR.DQ.YLD.
  • Coverage audit: the file runs from 2010-01-04 to 2019-12-31. The README says the data were retrieved with end_date=2019-12-31. So the file stops more than two months before the 2020-03-04 cut.
  • Treatment status: post_cut is 0 in all 2,498 rows, so n_treated = 0. As required, the indicator was used exactly as provided and not redefined. It is internally consistent: no date is on or after 2020-03-04.
  • The file has no missing values and no duplicate dates, and the dates are in increasing order. The longest calendar gap is 5 days (6 cases), which fits weekends combined with holidays. Nothing was excluded.

# 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 estimate: a two-window mean model. The effect is the post-window mean minus the pre-window mean (the 120 rows before the first post_cut = 1 row), with a Welch t interval (Welch–Satterthwaite df). The model metric is the RMSE of the residuals around each window's mean.
  • out/analysis.py implements all of these steps. The main estimate is only computed when treated rows exist.

# Results

  • Baseline mean one-day change, 2010–2019: −0.043 bp/day (baseline_metric). out/table1.csv gives per-year means: the mean yield ranges from 0.73% to 2.48%, and the mean daily change from −0.46 to +0.30 bp. out/figure1.png plots the yield series; a dashed line marks 2020-03-04, which falls outside the data.
  • Effect estimate: not estimable. The file has no post-cut observations, so the post-window mean does not exist. The effect, its CI, the model RMSE and n_analysed are therefore null. Conclusion code: premise_invalid; feasibility: infeasible.

# Uncertainty

No interval can be computed because the effect is undefined. I did not substitute any proxy, such as late-2019 data, a different event, or extrapolated values. The baseline is purely descriptive, and I attach no inferential claim to it.

# Limitations and open issues

  • Main failure: the data were pulled with an end date (2019-12-31) that comes before the event. The fix is to re-retrieve BD.CDN.5YR.DQ.YLD through at least mid-2020 and rerun out/analysis.py, which would then compute the estimate without changes.
  • Even with the right data, these threats remain:
    • March 2020 had large global confounders: the US Fed cuts on 3 and 15 March, a flight to safety, a dash for cash, and BoC asset purchases starting in late March. A before/after difference in means cannot isolate the effect of the BoC cut.
    • The post window has no end date, so the estimand depends on how far the sample extends.
    • Daily changes are heavy-tailed and volatility clusters strongly in March 2020. Welch's interval assumes independent observations, and serial correlation was not checked.
    • The pre-window could include early pandemic-period moves (Feb 2020).
    • Announcement-day timing matters: the cut came at 10:00 ET, and the yield is recorded at the close.
  • Checked: the SHA-256 of the CSV matches the README (2cdda6cc…).
  • Not checked: whether the values match the Valet source (there was no network access to compare against the raw response), and whether any data revisions were made.
Files · main
Menu

Theme