SPB Git

spb/wp29_uqo

Public

# F5-conf-02 — Finite-sample bias of the OLS AR(1) coefficient

# Question

In the Gaussian AR(1) y_t = c + ρ y_{t−1} + ε_t (c = 0, σ = 1), how large is the finite-sample bias of the OLS estimator ρ̂ from a regression of y_t on (1, y_{t−1}), and how well does the Marriott–Pope/Kendall approximation −(1+3ρ)/n describe it at the design n = 30, ρ = 0.8?

# Data and exclusions

The only input is data/design.csv (7 rows, n_input_rows; SHA-256 recorded in out/state/data_audit.md): n = 30, ρ = 0.8, σ = 1, intercept included, stationary start, R = 20000 replications, seed 20261029 (random_seed). No data issues were found (data_issues = []). The one filtering rule, dropping replications with a non-finite ρ̂, removed 0 replications (out/exclusions.csv). That leaves n_analysed = 20000 = n_replications.

# Method

  • Analytical baseline. bias_analytical = −(1+3ρ)/n with n = 30 (the design series length), which gives −0.11333. The textbook asymptotic standard error is se_asymptotic = √((1−ρ²)/n) = 0.1095.
  • Monte Carlo. We used numpy.random.default_rng(20261029). The draws come in a fixed order: first y_1 ~ N(0, σ²/(1−ρ²)) for all R series, then an R×(n−1) matrix of N(0, σ²) innovations. Each series is built by recursion with c = 0. For each series, ρ̂ is the OLS slope of y_t on (1, y_{t−1}) for t = 2,…,30 (29 observations). It is computed from demeaned cross-products, and the result was checked against numpy.linalg.lstsq on one replication. Then bias_mc = mean(ρ̂) − ρ and bias_mc_se = sd(ρ̂)/√R.
  • Nature of the analytical formula. −(1+3ρ)/n is the leading term of an asymptotic expansion of E[ρ̂] − ρ in powers of 1/n: bias = −(1+3ρ)/n + O(n⁻²). It is accurate in the sense that the approximation error shrinks faster than 1/n as n → ∞. It is not an exact formula, and it is not guaranteed to be accurate at any particular small n. The neglected higher-order terms are expected to matter more when n is small and when ρ is close to 1.

# Results

  • Mean of ρ̂: rho_hat_mean = 0.6763. Monte Carlo bias: bias_mc = −0.1237.
  • Analytical approximation: bias_analytical = −0.1133. The Monte Carlo bias is about 9% larger in magnitude (supp_ratio_bias_mc_to_analytical = 1.092).
  • Standardised difference: discrepancy_se_units = −9.85 Monte Carlo standard errors. The formula therefore under-states the magnitude of the true bias at this design, and the gap is far too large to be Monte Carlo noise.
  • Is the gap just a matter of using n − 1 = 29 (the effective regression sample) in place of n = 30? No. That version of the formula gives −0.1172 (supp_bias_analytical_n_minus_1), which still leaves a gap of about −6.1 standard errors (computed in the P4 checks).
  • Size of the bias relative to sampling spread: the bias is roughly the same size as the asymptotic s.e. (se_asymptotic = 0.1095). The Monte Carlo sd of ρ̂ is rho_hat_sd_mc = 0.1489, about 1.36 times the asymptotic s.e. (supp_ratio_sd_mc_to_se_asymptotic). The distribution of ρ̂ is skewed to the left: its median is 0.699 (supp_rho_hat_median), above its mean.

# Uncertainty

The Monte Carlo standard error of the bias is bias_mc_se = 0.00105. A normal-approximation 95% interval for the true bias is therefore about [−0.1258, −0.1216]. This interval does not contain −0.1133 (bias_analytical). With R = 20000 independent replications, the central limit theorem justifies the normal approximation for the mean even though ρ̂ is skewed. bias_analytical and se_asymptotic are deterministic and have no Monte Carlo error. The results are exactly reproducible given the seed. A different seed would move bias_mc by roughly ±1 bias_mc_se.

# Limitations and open issues

  • Scope of the Monte Carlo evidence. The simulation measures the exact finite-sample bias, up to Monte Carlo error, at a single design point: n = 30, ρ = 0.8, Gaussian errors, stationary start, intercept estimated. It shows that at this point the first-order formula is off by about 0.010, roughly 9% of the bias. It does not show that the formula is "wrong" in its intended asymptotic sense, because a gap at fixed n is consistent with an O(n⁻²) remainder. A single n cannot verify or refute a rate statement. The results also do not carry over to other n, other ρ (especially values near 1), non-Gaussian or heteroskedastic errors, non-stationary starts, or regressions without an intercept, where the leading term is −2ρ/n instead.
  • Ambiguity in n. The formula was evaluated at n = 30 as instructed ("at the design values"). The n − 1 variant is reported only as a supplementary check, and it does not change the conclusion.
  • Supplementary keys. Keys prefixed supp_ are descriptive extras computed by out/analysis.py. They are not required by the task.
  • No part of the task was infeasible (feasibility = "complete").
Files · main
Menu

Theme