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_metricas 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_metricandn_analysedare all null because they cannot be estimated.conclusion=premise_invalid;feasibility=infeasible(seefeasibility_reason).out/table1.csvgives yearly counts, mean yield and mean change for 2010–2019.out/figure1.pngplots 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.