F5-conf-02 — Finite-sample bias of OLS ρ̂ in a Gaussian AR(1)
Question
In the Gaussian AR(1) y_t = c + ρ y_{t−1} + ε_t, ε_t ~ N(0, σ²), OLS of y_t on (1, y_{t−1}) is biased downward in small samples. We compare the Marriott–Pope/Kendall approximation E[ρ̂] − ρ ≈ −(1+3ρ)/n with a Monte Carlo estimate of the actual bias at the design n = 30, ρ = 0.8 (design_n, design_rho).
Data and exclusions
The only input is data/design.csv (7 rows, n_input_rows; SHA-256 in design_sha256): n = 30, ρ = 0.8, σ = 1 (design_sigma), intercept included, stationary initial condition, R = 20000 replications (n_replications), seed 20261029 (random_seed). No data problems were found (data_issues is empty). One exclusion rule (drop replications with a non-finite ρ̂) removed 0 replications, so n_analysed = 20000 (out/exclusions.csv).
Method
- Analytical approximation (
bias_analytical): −(1+3ρ)/n with n = 30, the series length given in the design. This formula is the leading term of an asymptotic expansion of E[ρ̂] in powers of 1/n, derived for a stationary Gaussian AR(1) with an estimated mean/intercept. Its error is O(n⁻²), so it is accurate as n → ∞ (relative error shrinks like 1/n). It is not an exact finite-sample result and gives no guarantee at any fixed n, especially when ρ is near 1, where higher-order terms are larger. Because the regression actually uses n − 1 = 29 pairs, and both n and n − 1 are consistent with the same first-order expansion, I also report the formula evaluated at n − 1 as a sensitivity check (bias_analytical_neff). - Monte Carlo (
bias_mc): for each of R = 20000 replications, y_1 ~ N(0, σ²/(1−ρ²)), then y_t = 0.8 y_{t−1} + ε_t for t = 2…30 (c = 0). ρ̂ is the OLS slope of y_t on (1, y_{t−1}) for t = 2…30. One (R × n) standard-normal matrix is drawn fromnumpy.random.default_rng(20261029). bias_mc = mean(ρ̂) − ρ; its MC standard error is sd(ρ̂)/√R (bias_mc_se). Baseline reference: the textbook asymptotic SE √((1−ρ²)/n) (se_asymptotic). - Checks: a statsmodels OLS fit reproduces the first replications exactly, and a clean re-run gives byte-identical output (
out/state/checks.md).
Results
| quantity | value | key |
|---|---|---|
| Analytical bias −(1+3ρ)/n | −0.1133 | bias_analytical |
| MC bias | −0.1223 | bias_mc |
| MC SE of bias | 0.00105 | bias_mc_se |
| mean ρ̂ | 0.6777 | rho_hat_mean |
| median ρ̂ | 0.6990 | rho_hat_median |
| sd ρ̂ across replications | 0.1479 | rho_hat_sd_mc |
| asymptotic SE √((1−ρ²)/n) | 0.1095 | se_asymptotic |
| (bias_mc − bias_analytical)/SE | −8.61 | discrepancy_se_units |
| MC bias / analytical bias | 1.079 | bias_ratio_mc_to_analytical |
| analytical bias using n−1 = 29 | −0.1172 | bias_analytical_neff |
| discrepancy vs n−1 version (SE units) | −4.88 | discrepancy_se_units_neff |
Interpretation:
- Size and direction of the bias. The OLS estimator is clearly biased downward. On average ρ̂ is about 0.68 rather than 0.8, a bias of −0.122 (
bias_mc). That is larger than the asymptotic SE itself (se_asymptotic= 0.110). About 79% of the ρ̂ values fall below the true ρ (share_rho_hat_below_rho). - How well the approximation does. It gets the sign and most of the size right: the actual bias is about 8% larger than predicted (
bias_ratio_mc_to_analytical= 1.079). - The gap is real, not simulation noise. The difference is −8.6 MC standard errors (
discrepancy_se_units). Even with n − 1 in the formula, the gap is still −4.9 SE (discrepancy_se_units_neff). - Why the gap is expected. A first-order O(1/n) approximation should leave a remainder of order 1/n². With n = 30 and ρ = 0.8, a remainder of about −0.009 is consistent with that. The gap is statistically significant but small in substantive terms. It does not show that the formula is "wrong"; it is the expected size of the higher-order terms.
- Spread of ρ̂. The sampling sd of ρ̂ is 1.35 times the asymptotic SE (
sd_ratio_mc_to_asymptotic). The distribution is left-skewed: its 2.5%–97.5% range is 0.331 to 0.902 (rho_hat_q025,rho_hat_q975). So first-order asymptotics also understate the dispersion at this design.
Uncertainty
The MC standard error of the bias is 0.00105 (bias_mc_se), giving a 95% interval for the true finite-sample bias of [−0.1244, −0.1203] (bias_mc_ci95). This interval excludes the analytical value −0.1133 (bias_analytical) and also its n−1 version −0.1172 (bias_analytical_neff). The analytical quantities are deterministic and have no sampling uncertainty. The results are exact for the fixed seed; a different seed would move bias_mc by roughly ±0.002 (2 × bias_mc_se).
Limitations and open issues
-
What the analytical formula is. −(1+3ρ)/n is a first-order asymptotic (large-n) approximation to the mean bias, with an O(n⁻²) remainder. It is accurate in the sense that its relative error vanishes as n grows. It carries no exact finite-sample guarantee, and its accuracy gets worse as ρ → 1 and as n gets smaller.
-
What the Monte Carlo can establish. It estimates the bias at exactly one design point: n = 30, ρ = 0.8, Gaussian errors, stationary start, intercept included, c = 0. It cannot establish:
- the approximation's accuracy at other (n, ρ) values;
- behaviour with non-Gaussian errors or non-stationary starting values;
- the general size of the higher-order terms.
Making such claims would need a grid of designs or analytical higher-order expansions, which this task did not require.
-
Ambiguity in "n". Whether n in the formula means the series length (30) or the number of regression pairs (29) is a matter of convention. I used 30 as the task specifies, and both versions are reported. Neither version falls within the MC confidence interval.
-
Mean bias only. The bias is a statement about the mean. Because the ρ̂ distribution is skewed, the median bias (
rho_hat_median− 0.8 ≈ −0.10) differs from the mean bias.