SPB Git

spb/wp29_uqo

Public

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

# Question

How did the average one-day change in the GoC 5-year benchmark yield (bp) on post_cut = 1 days compare with the average over the 120 trading days just before the first flagged day? The interval is a 95% Welch (unequal-variance) interval.

# Data and exclusions

The only input is data/gc5y_daily.csv (Valet BD.CDN.5YR.DQ.YLD). It has 2498 rows (n_input_rows) running from sample_start = 2010-01-04 to sample_end = 2019-12-31. The SHA-256 matches the README. There are no missing values and no duplicate dates. The dates are strictly increasing.

The audit's key finding: n_treated = 0. No row has post_cut = 1, because the file ends before 2020-03-04. The README's retrieval URL uses end_date=2019-12-31. The flag itself is consistent with its stated definition; the treated period simply isn't in the file. This is recorded in data_issues.

The only exclusion was the first row, which has no previous row to difference against. That leaves 2497 one-day changes (out/exclusions.csv).

# Method

The planned method was:

  • the difference between the post-cut mean change and the pre-window mean change;
  • a Welch standard error with Welch–Satterthwaite degrees of freedom for the 95% interval;
  • model_metric as the RMSE of the two-window mean model.

This logic is implemented in out/analysis.py. It runs only when treated rows exist. With zero treated rows the post-cut mean is undefined, so the script returns conclusion = premise_invalid. As TASK.md requires, it doesn't swap in a proxy, such as a different event date or a redefined flag. No randomness is used (random_seed = null).

# Results

  • baseline_metric: the mean one-day change over the whole file is −0.043 bp.
  • effect_estimate, effect_ci_low, effect_ci_high, model_metric and n_analysed are all null because they cannot be estimated.
  • conclusion = premise_invalid; feasibility = infeasible (see feasibility_reason).
  • out/table1.csv gives yearly counts, mean yield and mean change for 2010–2019.
  • out/figure1.png plots the yield over the file's sample.

# Uncertainty

No interval can be reported because the effect isn't defined for this file (effect_ci_low and effect_ci_high are null). The baseline is descriptive only, and no uncertainty is attached to it.

# Limitations and open issues

  • Main failure: the data don't cover the event. Any number reported as "the effect" would be invented. To answer the question, the series needs to be re-retrieved with an end date after March 2020, for example through at least mid-2020.
  • Threats if data were available:
    • The post window is open-ended, so it mixes the March 4, 16 and 27 cuts, QE (the GoC bond purchase programme), and global COVID-19 market stress. The difference in means can't be read as the causal effect of the March 4 cut.
    • Daily changes are heteroskedastic and possibly autocorrelated, especially in March 2020. A Welch interval ignores autocorrelation.
    • The 120-day pre-window is an arbitrary benchmark.
  • Not checked:
    • whether Valet revised past values;
    • the multi-day gaps across holidays, where changes span more than one business day.
Files · main
Menu

Theme