SPB Git

spb/wp29_uqo

Public

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

# Question

The question is how much the average one-day change in the Government of Canada 5-year benchmark yield (in basis points) differed between trading days flagged post_cut = 1 (on or after 2020-03-04) and the 120 trading days just before the first flagged day. The interval is a 95% interval that allows unequal variances. Answer: this cannot be computed from the data provided (conclusion premise_invalid, feasibility infeasible).

# Data and exclusions

  • Input: data/gc5y_daily.csv, 2,498 rows (header excluded), from 2010-01-04 to 2019-12-31. The README confirms the Valet query was run with end_date=2019-12-31.
  • Audit: no missing values, no duplicate dates, and the dates are strictly increasing. post_cut matches the stated rule (date ≥ 2020-03-04) on every row. That is only because every row has post_cut = 0: n_treated = 0. The file has no observations from 2020 at all, so there is no post-cut window.
  • Other notes: 85 gaps between consecutive rows are longer than a weekend (at most 5 calendar days; these are holidays). Following the task rules, changes are taken between consecutive rows anyway. The README contradicts itself: it calls 2020-03-04 both the announcement date and "the first business day after" the announcement. This makes no difference here because no 2020 rows exist.
  • No rows were dropped. All issues are listed in data_issues in results.json.

# Method

  • One-day change: 100·(y_t − y_{t−1}) between consecutive rows. The descriptive baseline is the mean change over the whole file (2,497 changes).
  • Planned main method: the post-cut mean change minus the mean over the 120-day pre-window, with a Welch (unequal-variance) t interval and Welch–Satterthwaite degrees of freedom. The model metric would be the RMSE of the two-window mean model. This is coded in out/analysis.py, but it only runs if treated rows exist. They don't, so no estimate was produced, and no proxy (other dates, other events, or invented data) was used in its place.

# Results

  • Baseline: the mean one-day change over 2010–2019 is −0.043 bp (baseline_metric).
  • Effect estimate, CI and model RMSE: null (not estimable). n_analysed = null.
  • Table 1 (out/table1.csv) gives the number of days, the mean yield and the mean change for each year from 2010 to 2019. Figure 1 (out/figure1.png) plots the yield over the sample; the series ends at 1.68% on 2019-12-31.

# Uncertainty

No interval can be reported because there is no estimate. If 2020 data were added, the Welch interval would assume the daily changes are independent within each window. Volatility in March 2020 was extreme and changes may be autocorrelated, so a HAC or block-bootstrap check would be advisable. The post-cut window would also be open-ended (it would cover all later dates), so the estimand would depend on where the file happens to end.

# Limitations and open issues

  • The main failure: the data do not cover the treatment period. Nothing in the file can tell us how the yield behaved after 2020-03-04. Any number reported for the effect would be made up.
  • What would invalidate a future estimate: (i) the post window mixes the effects of the cut with the COVID shock, the 2020-03-13 and 2020-03-27 cuts, and the start of QE (asset purchases) on 2020-03-27. A difference in means is not a causal effect of the 2020-03-04 cut alone. (ii) Because the flag is open-ended, the post window could include years of unrelated rate moves. (iii) The ambiguous README wording about when the flag starts could matter if the flag were ever redefined.
  • Not checked: whether the file matches the stated SHA-256 (not verified), and whether Valet has revised its values.
  • What would resolve this: re-download the series through at least mid-2020 and set a finite post window.
Files · main
Menu

Theme