SPB Git

spb/wp29_uqo

Public

# 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).

Files · main
Menu

Theme