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