SPB Git

spb/wp29_uqo

Public

# F6-conf-01 — Weekday effects in daily changes of the 10-year Treasury yield

# Question

Does the day of the week carry predictive content for the one-day change Δy_t (bp) of the 10-year US Treasury constant-maturity yield (FRED DGS10), 2000–2019? Three estimands: (i) joint equality of the five weekday means (classical one-way ANOVA, all changes); (ii) the Monday contrast (mean Monday change − mean Tue–Fri change) with a 95% interval; (iii) out-of-sample RMSE (2010–2019) of weekday-specific means estimated on 2000–2009, compared with a zero-change (random-walk) forecast.

# Data and exclusions

Single input data/DGS10.csv (SHA-256 verified against the README), 5217 rows (n_input_rows), every weekday from 2000-01-03 to 2019-12-31, no duplicate dates. 215 rows have an empty yield field (US market holidays; n_missing_rows) and were dropped before differencing, as the task requires. Changes were then taken between consecutive available observations; the first observation has no change. That leaves 5001 changes (n_analysed): 2500 in the estimation period ≤2009-12-31 (n_train) and 2501 in the evaluation period ≥2010-01-01 (n_test). The exclusion ledger (out/exclusions.csv) adds up: 5217 − 215 − 1 = 5001. Data issues found and how each was handled are listed in data_issues: holiday gaps, multi-day post-holiday changes, heavy tails (−51 bp on 2009-03-18), and 1 bp discreteness. No extreme value was removed. Full audit: out/state/data_audit.md.

# Method

  • Joint test: scipy.stats.f_oneway (equal-variance one-way ANOVA, F(4, 4996)) on all 5001 changes, grouped by the weekday of t.
  • Monday contrast: difference of sample means, all changes. The 95% interval is a Welch two-sample t interval (Monday n=919 vs Tue–Fri n=4082), chosen because it does not assume equal variances. As a sensitivity check, an OLS regression on a Monday dummy with Newey–West (HAC, 5 lags) SE.
  • Out-of-sample: each evaluation-period change is forecast by the estimation-period mean change for its weekday (train_weekday_means_bp). The baseline forecast is zero. Both are scored by RMSE over the 2501 evaluation changes. A Diebold–Mariano-type test on the squared-error differential (HAC, 5 lags) is supplementary.
  • Decision rule: conclusion comes from the ANOVA at the 5% level. If the ANOVA rejected, the sign would come from the Monday interval.
  • Sensitivity checks on the ANOVA: Welch ANOVA, Kruskal–Wallis, and a Levene (median) test of equal variances.
  • No randomness is involved (random_seed = null). out/analysis.py regenerates every output.

# Results

  • Weekday means (table1.csv, figure1.png) range from −0.22 bp (Tuesday) to +0.02 bp (Wednesday). Each 95% interval covers zero.
  • ANOVA: F = 0.263 (anova_f_stat), p = 0.902 (anova_p_value). Equality of the weekday means is not rejected.
  • Monday contrast: +0.050 bp (effect_estimate), 95% Welch CI [−0.319, +0.420] bp (effect_ci_low, effect_ci_high), p = 0.79 (effect_p_welch).
  • Out-of-sample: zero-change RMSE 4.876 bp (baseline_metric), weekday-mean RMSE 4.884 bp (model_metric), a ratio of 1.0017 (oos_rmse_ratio_model_over_baseline). The weekday model is slightly worse than the random walk. The DM statistic is t = 1.89, p = 0.058 (oos_dm_t, oos_dm_p), so the deterioration is borderline and not significant at 5%. Using the overall training mean instead gives an RMSE of 4.875 bp (oos_rmse_unconditional_train_mean).
  • Conclusion: no_detectable_effect (conclusion). These data show no evidence that the weekday predicts daily 10-year yield changes, and weekday-specific means do not beat a zero forecast out of sample.

# Uncertainty

  • The Welch SE of the Monday contrast is 0.188 bp (effect_se_welch). The HAC SE is 0.194 bp (sens_hac_effect_se, p = 0.80, sens_hac_effect_p), so allowing for autocorrelation and heteroskedasticity barely changes the inference.
  • The CI half-width is about 0.37 bp. A Monday effect larger than about ±0.4 bp/day is therefore inconsistent with these data at the 95% level. Smaller effects cannot be ruled out, but they would be tiny next to the ~5 bp daily standard deviation.
  • The equal-variance assumption of the classical ANOVA is violated: Levene p ≈ 1e-7 (sens_levene_p). The conclusion holds anyway under Welch ANOVA (p = 0.902, sens_welch_anova_p) and Kruskal–Wallis (p = 0.52, sens_kruskal_p).
  • The OOS comparison rests on a single split, with no resampling-based interval for the RMSE difference beyond the DM test.

# Limitations and open issues

  • What would invalidate the result. Strong dependence or volatility clustering beyond what 5-lag HAC captures could make the SEs too small. Since the effect is null, though, too-small SEs would only make it easier to find an effect, so the null conclusion is conservative in that direction. Changes in the weekday pattern over time (e.g., FOMC calendars, the 2008–09 crisis, QE) could hide period-specific effects that cancel in the pooled 20-year sample. No subperiod tests were run beyond the train/test split.
  • Measurement convention. Post-holiday changes span more than one trading day; for example, Tuesday after a Monday holiday captures Fri→Tue. This inflates the variance of some weekday groups (one reason for the Levene rejection) and slightly mixes weekday attributions. I followed the task rule and did not adjust for it. DGS10 is an end-of-day constant-maturity interpolated yield, not a traded price, and is discretised at 1 bp.
  • Not checked. Event-day effects such as FOMC days or payroll Fridays, intraday timing, other maturities, and any multiple-testing adjustment across folklore hypotheses (only the Monday contrast was tested specifically). The classical ANOVA is the mandated test even though its equal-variance assumption fails; robust alternatives agree with it.
  • Main threats. The power to detect sub-0.4 bp effects is limited. A single OOS split can be sensitive to regime (2010–2019 is a low-rate era). Heavy tails make RMSE sensitive to a few large days.
  • No review issues have been received yet.
Files · main
Menu

Theme