F2-conf-03: Monte Carlo coverage of OLS confidence intervals with heteroskedastic errors (n = 30)
Question
The model has a fixed design: y_i = 1 + 0.5 x_i + σ_i ε_i, with ε_i iid N(0,1), and x_i and σ_i taken from data/design.csv (n = 30). The question is whether the nominal 95% interval β̂ ± t_{0.975}(28)·se for the OLS slope reaches 95% coverage. Two standard errors are compared: (i) the conventional OLS standard error and (ii) the HC1 robust standard error. Two further quantities are reported: the exact SD of β̂ and E[se_conv].
Data and exclusions
The only input is data/design.csv. It has 30 rows (n_input_rows), SHA-256 b1a17a52…74f0, and matches the bundle manifest. It has no missing values, no duplicates and all σ_i > 0. No rows were excluded (out/exclusions.csv), and data_issues is empty. σ_i rises toward both ends of the x range, so the largest error variances sit at the high-leverage points. This is the pattern under which the conventional SE is biased downward.
Method
- Exact SD. β̂ − β = Σ w_i σ_i ε_i, where w_i = (x_i − x̄)/S_xx. So SD(β̂) = sqrt(Σ w_i² σ_i²), computed analytically (
sd_beta_exact). - Monte Carlo. R = 2000 replications (
n_replications) with numpydefault_rngseed 20261030 (random_seed). Only ε is redrawn. In each replication:- fit OLS;
- compute se_conv = sqrt(s²·[(X'X)⁻¹]₂₂), with s² = RSS/28;
- compute se_HC1 = sqrt((n/(n−2))·Σ a_i² e_i²), where a = row 2 of (X'X)⁻¹X';
- check whether β = 0.5 lies inside β̂ ± 2.0484·se (
t_crit_28).
- Undercoverage rule. The conventional interval counts as undercovering if its coverage is below 0.95 − 3·sqrt(0.95·0.05/2000) = 0.9354 (
undercover_threshold). The binomial SE here is evaluated at the nominal p (mcse_binomial_at_nominal). - Validation. One replication was cross-checked against statsmodels OLS/HC1 (exact match).
Results
- Conventional interval coverage: 0.844 (
coverage_conventional). This is the naïve baseline. - HC1 interval coverage: 0.902 (
coverage_hc1). - Exact SD(β̂): 0.2680 (
sd_beta_exact). The Monte Carlo SD is 0.2696 (sd_beta_mc), which agrees. - Mean se_conv: 0.1903 (
mean_se_conventional). That is about 71% of the true SD. The formula that assumes constant variance gives 0.1962 (sd_beta_conventional_formula_homoskedastic). - Mean se_HC1: 0.2408 (
mean_se_hc1). - Conclusion: the conventional 95% interval does not reach its nominal coverage (
conventional_ci_undercovers= true). It undercovers by about 10.6 percentage points. HC1 does better but still falls short of 95% at n = 30.
Uncertainty
- Monte Carlo SE of each coverage estimate (binomial, evaluated at p̂):
- conventional: 0.0081 (
mcse_coverage_conventional), giving an approximate 95% MC interval of [0.828, 0.860]; - HC1: 0.0066 (
mcse_coverage_hc1), giving approximately [0.889, 0.915].
- conventional: 0.0081 (
- At nominal p = 0.95, the binomial SE is 0.0049 (
mcse_binomial_at_nominal). - Size of the shortfall: both coverages lie more than 10 nominal SEs below 0.95. The conclusion does not depend on which SE is used.
- Other Monte Carlo checks:
- the MC SD of β̂ is within one SE (≈0.004) of the exact value;
- mean β̂ = 0.4962 (
mean_beta_hat_mc), which is within one MC SE (≈0.006) of 0.5.
Limitations and open issues
- The results hold conditionally on this particular fixed design and on normal errors. They are not general statements about OLS.
- With R = 2000, coverage is known only to about ±0.016 (95% MC interval). The conclusions above are well clear of that margin.
- The task specifies the HC1 interval with t(28) critical values. Small-sample alternatives (HC2/HC3, or Satterthwaite/Bell–McCaffrey degrees of freedom) would probably come closer to 95%, but they were not evaluated because the task did not ask for them.
- No part of the task was infeasible.