# F5-conf-02 — Finite-sample bias of OLS for an AR(1) coefficient ## Question The model is a Gaussian AR(1), y_t = c + ρ y_{t−1} + ε_t, with c = 0 and σ = 1. The design is n = 30 and ρ = 0.8, with a stationary initial value. How large is the finite-sample bias of the OLS estimator ρ̂ from the regression of y_t on (1, y_{t−1})? And how well does the Marriott–Pope/Kendall approximation E[ρ̂] − ρ ≈ −(1+3ρ)/n describe that bias at this design? ## Data and exclusions The only input is `data/design.csv`: 7 rows (`n_input_rows`), SHA-256 matching `bundle.json`. It specifies n = 30, ρ = 0.8, σ = 1, an intercept, a stationary y_1, R = 20000 replications and seed 20261029. No data problems were found (`data_issues` is empty). The only filtering rule drops replications with a non-finite ρ̂. It removed none, so `n_analysed` = `n_replications` = 20000 (`out/exclusions.csv`). Nothing is observed; all series are simulated. ## Method - **Baseline (closed form).** The baseline is `bias_analytical` = −(1+3·0.8)/30 = −0.1133, evaluated at n = 30 as specified. Alongside it is the textbook asymptotic SE, `se_asymptotic` = √((1−ρ²)/n) = 0.1095. - **Monte Carlo.** I used `numpy.random.default_rng(20261029)` (`random_seed`). The script first draws R stationary initial values y_1 ~ N(0, σ²/(1−ρ²)), then an R×(n−1) matrix of N(0, σ²) innovations. The series are built recursively with c = 0, and each replication is a fresh series of 30 observations. - **Per-replication estimate.** ρ̂ is the OLS slope from regressing y_t on (1, y_{t−1}) for t = 2..30, which is 29 regression observations. It is computed in vectorised demeaned form. For one replication it was checked against `numpy.linalg.lstsq`. - **Reported quantities.** `bias_mc` = mean(ρ̂) − ρ; `bias_mc_se` = sd(ρ̂)/√R; `discrepancy_se_units` = (`bias_mc` − `bias_analytical`)/`bias_mc_se`. - **What kind of formula this is.** −(1+3ρ)/n is the leading term of an asymptotic expansion in 1/n of E[ρ̂] − ρ. It is derived for a stationary Gaussian AR(1) with an estimated mean, and the error it leaves out is of order O(n⁻²). It is accurate in the sense that n·(E[ρ̂] − ρ) → −(1+3ρ) as n → ∞. It is **not** an exact finite-sample result. At fixed n, the left-out higher-order terms can be noticeable, especially when ρ is close to 1, where the expansion converges more slowly. ## Results | quantity | key | value | |---|---|---| | Analytical approximation | `bias_analytical` | −0.11333 | | Monte Carlo bias | `bias_mc` | −0.12371 | | MC standard error | `bias_mc_se` | 0.00105 | | Mean of ρ̂ | `rho_hat_mean` | 0.67629 | | SD of ρ̂ across replications | `rho_hat_sd_mc` | 0.14891 | | Discrepancy in MC-SE units | `discrepancy_se_units` | −9.85 | | Asymptotic SE | `se_asymptotic` | 0.10954 | - **Size of the bias.** OLS clearly underestimates ρ: the mean estimate is 0.676 against a true value of 0.8 (`rho_hat_mean`). The median is 0.699 (`rho_hat_median`), and 79.3% of the estimates fall below ρ (`share_rho_hat_below_rho`). - **How well the formula does.** The formula gets the sign and roughly the size of the bias right. The simulated bias is 1.09 times the approximation (`ratio_bias_mc_to_analytical`), a difference of −0.0104 (`bias_mc_minus_analytical`). So the formula understates the bias by about 9%. - **The gap is not simulation noise.** The difference is about 9.9 Monte Carlo SEs (`discrepancy_se_units`). - **Using 29 instead of 30 in the formula.** With n−1 = 29, the number of regression observations, the approximation becomes −0.1172 (`bias_analytical_neff`). The gap narrows but stays at 6.1 MC SEs (`discrepancy_se_units_neff`). - **The bias is about as large as the sampling error.** The bias is comparable in size to the textbook asymptotic SE (0.110, `se_asymptotic`). The simulated sampling SD is 1.36 times larger than that SE (`ratio_sd_mc_to_se_asymptotic`). ## Uncertainty - **Monte Carlo error.** The only randomness is simulation noise. The MC SE of the bias is 0.00105 (`bias_mc_se`), so an approximate 95% MC interval for the bias is −0.1237 ± 0.0021. That interval excludes the analytical value −0.1133. - **Reproducibility.** The results are fully reproducible for the given seed. A different seed would move `bias_mc` by roughly ±0.001 (one MC SE). - **No uncertainty in the formula value.** `bias_analytical` and `se_asymptotic` are deterministic functions of the design. ## Limitations and open issues - **What the discrepancy does and does not mean.** The statistically clear gap (`discrepancy_se_units` ≈ −9.9) does **not** show that the Marriott–Pope/Kendall formula is "wrong". The formula is a first-order O(1/n) approximation, and a difference of order 1/n² at n = 30 with ρ = 0.8 is what one expects. The Monte Carlo only shows that, at this one design point, the approximation captures about 92% of the true bias (1/1.09) and leaves a small but real remainder. - **What the Monte Carlo cannot tell us.** It cannot establish how fast the approximation error shrinks with n. It cannot say how the formula performs at other values of (n, ρ), with non-Gaussian errors, without an intercept, or with a non-stationary start. Only one (n, ρ) point was simulated. - **Which n to plug in.** The task specifies n = 30, the series length. The regression uses 29 observations, and the result with that choice is reported as a sensitivity check (`bias_analytical_neff`). - **Sampling-distribution caveat.** ρ̂ is skewed to the left; the median lies above the mean (`rho_hat_median`). The mean bias therefore does not fully describe the sampling distribution. - **Scope.** No higher-order bias formulas or bias corrections were evaluated; the task does not require them.