Statistics for Traders #19: Newey-West 1994's actual automatic Bartlett bandwidth on the same NFP × USDJPY sample is m = 8, n_eff = 88 — much wider than Andrews's 4.51, because the widely-cited [4·(T/100)^(2/9)] = 4 is the plug-in lag parameter, NOT the final bandwidth
Almost every online reference cites M = 4·(T/100)^(2/9)as “the Newey-West 1994 rule” for Bartlett-HAC bandwidth. Re-read the actual paper (NBER Working Paper #144, verified via OCR for today’s Paper Trail #19) and that quantity is the plug-in lag selection parameter ninside NW94’s automatic procedure — used only to bound the sum over sample autocovariances that feeds the data-driven bandwidth γ̂·T^(1/3).
On our 196-release NFP × USDJPY 15m sample: n = 4(matching Andrews-1991’s M* ≈ 4.5), but the actual NW94 automatic bandwidth m = 8, giving Bartlett n_eff = 88. Wider than Andrews’ 113, wider than the AR(1)-only 115 from Stats #10, wider than the QS 108 from Stats #18. NW94’s procedure captures the empirical γ(4) = 299 lag-4 autocovariance that Andrews’ AR(1) plug-in ignores.
![Chart showing Bartlett n_eff as a function of bandwidth M from 1 to 20 on the 196-release NFP × USDJPY 15m |move_pips| series. Green curve of n_eff points at each integer M, declining from n_eff = 196 at M = 1 (iid ceiling, shown as horizontal grey reference line at 196) down to about 55 at M = 20. Two vertical marker lines: a grey line at Andrews-1991's M* = 4.51 (Bartlett) with a grey dot at n_eff = 113; a coral line at NW94's automatic m = 8 with a coral dot at n_eff = 88.26. Text annotation at top: 'plug-in lag n = 4; γ = 1.1447·(s(1)/s(0))^(2/3) = 1.414; m = [γ·T^(1/3)] = 8'. A thin dim line at M = 4 labelled 'n = 4 (lag-select param, ≠ final m)' shows the plug-in-parameter quantity that gets mis-cited as NW94's rule.](/insights/stats-for-traders-nw94-bandwidth/neff.png)
The attribution error
Type “Newey-West bandwidth rule” into any econometrics stack overflow question, Stata help forum, R sandwich package documentation issue, or graduate econometrics lecture notes. You will find, over and over:
Attributed to Newey & West (1994). Sometimes with a small variation like M = ceiling instead of floor, sometimes with the constant 4 replaced by 12(that alternative is also in the paper). Almost never with clarification that this is not the paper’s actual proposed bandwidth.
The 2026-08-17 Stats #17 ledger note fell into the same pattern.It wrote (verbatim): “Cross-check: Newey-West 1994 rule M = 4·(T/100)^(2/9) = 4·1.156 = 4.63 gives n_eff = 118 — essentially agreeing.” That’s the plug-in lag parameter n inside NW94’s procedure, not the procedure’s final bandwidth. On this sample the two happen to be 4 and 8 respectively — the “essentially agreeing” claim was true for the shortcut interpretation and false for the procedure-as-written interpretation.
Both interpretations are defensible ways to cite Newey-West 1994 — the paper itself distinguishes them clearly (equation 2-2 on page 7 uses n for the plug-in lag limit and m for the final bandwidth). The point of today’s post is to walk the procedure end-to-end so the distinction is unambiguous.
Walking NW94 end-to-end on the 196 NFP × USDJPY moves
The recipe, from NW94 equation (2-2) page 7 (assuming Bartlett kernel, no VAR(1) prewhitening — the paper explicitly considers both, we do the simpler no-prewhitening case for clarity):
Step 1 — plug-in lag selection parameter: n = [4·(T/100)^(2/9)] = [4·(196/100)^(2/9)] = [4·1.1613] = [4.6452] = 4 Step 2 — sample autocovariances at lags 0..n: γ(0) = 1411.34 (sample variance of |move|_t, biased) γ(1) = 367.08 (ρ(1) = 0.2601) γ(2) = 344.56 (ρ(2) = 0.2441) γ(3) = 63.78 (ρ(3) = 0.0452) γ(4) = 299.19 (ρ(4) = 0.2120 — the lag-4 echo) Step 3 — spectral moments: s(1) = 2·Σ_{j=1..4} j·γ(j) = 2·(1·367.08 + 2·344.56 + 3·63.78 + 4·299.19) = 2·(367.08 + 689.12 + 191.33 + 1196.75) = 2·2444.30 = 4888.60 s(0) = γ(0) + 2·Σ_{j=1..4} γ(j) = 1411.34 + 2·(367.08 + 344.56 + 63.78 + 299.19) = 1411.34 + 2·1074.61 = 1411.34 + 2149.22 = 3560.56 s(1)/s(0) = 1.3730 Step 4 — bandwidth parameter: γ̂ = 1.1447·(s(1)/s(0))^(2/3) = 1.1447·(1.3730)^(2/3) = 1.1447·1.2353 = 1.4141 Step 5 — final Bartlett bandwidth: m = [γ̂·T^(1/3)] = [1.4141·196^(1/3)] = [1.4141·5.8088] = [8.2140] = 8 Step 6 — Bartlett effective sample size at m = 8: τ_int(8) = 1 + 2·Σ_{k=1..7} (1 − k/8)·ρ(k) = 2.2206 n_eff = n/τ_int = 196/2.2206 = 88.26
Every number is deterministic — no bootstrap component. Same sample, same biased-autocovariance convention as Stats #17 and Stats #18. JS implementation in scripts/insights-charts/nw94Bandwidth.ts cross-verified against Python numpy to 4 decimal places.
Why NW94’s m = 8 is wider than Andrews’ M* = 4.51
Andrews-1991’s automatic Bartlett bandwidth (Stats #17) uses an AR(1)-plug-in for the parameter a:
= 4·0.0677 / 0.8692 = 0.3113
M* = 1.1447·(a·T)^(1/3) = 1.1447·(0.3113·196)^(1/3) = 4.51
The AR(1) plug-in treats the whole autocovariance sequence as if it decayed geometrically from ρ(1). On this sample that’s a bad fit: empirical ρ(2) is +0.2441 vs AR(1)-predicted 0.2601² = 0.0677 (3.6× miss); empirical ρ(4) is +0.2120 vs AR(1)-predicted 0.2601^4 = 0.0046 (46× miss). The AR(1) shape has already decayed to essentially zero by lag 4, while the real series still has a substantial lag-4 echo (volatility clustering at the ~4-monthly cadence NFP-USDJPY volatility exhibits).
NW94’s procedure sidesteps the AR(1) assumption. It uses the empirical sample autocovariances at lags 1..n = 1..4 directly. Those pick up γ(4) = 299 as-is. The spectral moments s(1) and s(0) that feed γ̂ include the lag-4 echo, so γ̂ is bigger than what AR(1) would predict — and the final bandwidth m = γ̂·T^(1/3) picks a wider window to capture the empirically-observed autocorrelation structure.
Which is “right”? Neither. Both are consistent procedures; both target a well-defined MSE loss function for estimating the spectral density at frequency zero. NW94’s procedure is more robust to autocorrelation shapes that AR(1) misfits (like the lag-4 echo here). Andrews’ procedure is less noisy if the AR(1) assumption is actually a decent fit (which it’s not on this sample, but IS on many macro-monthly time series where ρ(1) dominates).
The four-installment HAC-bandwidth quadrilogy on this sample
| Method | Kernel | Bandwidth | n_eff | Stats installment |
|---|---|---|---|---|
| AR(1)-only formula | n·(1−ρ)/(1+ρ) | — | 115 | #10 (2026-08-10) |
| Andrews-1991 auto | Bartlett | M* = 4.51 | 113 | #17 (2026-08-17) |
| Andrews-1991 auto | QS | S* = 3.72 | 108 | #18 (2026-08-18) |
| NW94 automatic | Bartlett | m = 8 | 88 | #19 (today) |
| Politis-White block bootstrap | stationary boot | b_opt = 4.98 | 39 | #16 (2026-08-16) |
The 3-way HAC clustering(AR(1) 115, Bartlett 113, QS 108) that Stats #17 and #18 flagged as “coincidental agreement” is legitimate as far as it goes — all three use rules that put dominant weight on ρ(1) and don’t reach the lag-4 echo. NW94 breaks that cluster because it uses n = 4 empirical autocovariances directly. The block bootstrap (39) still stands alone because it corrects the WHOLE sampling distribution (not just the variance of the mean).
Between NW94’s 88 and the block-bootstrap 39 is where the “how much correlation is really in this series” answer lives on a NON-parametric reading. The parametric-AR(1) answer (115) undercounts. The four numbers 88 / 108 / 113 / 115 span the full range of what different bandwidth-selection philosophies think is “the” right effective-n for mean-of-|move| inference on this sample.
What this doesn’t say
It doesn’t say Andrews-1991 is wrong. Andrews’ procedure is asymptotically optimal in the class of AR(1)-plug-in Bartlett rules. On a sample where AR(1) is a good fit for the true autocovariance decay, it will beat NW94. On this sample it doesn’t.
It doesn’t say the shortcut [4·(T/100)^(2/9)] is wrong to use. As a fixed bandwidth rule it has the appeal of not requiring the s(1)/s(0) plug-in step, and on most samples (the ones where AR(1) is a good fit) it lands close to Andrews’ automatic Bartlett M*. It’s the ATTRIBUTION that’s slippery — calling it “the NW94 rule” conflates it with the paper’s actual proposed procedure, and on samples like this one where the two disagree by 2× that matters.
Prewhitening is not applied here. NW94 explicitly recommend applying a VAR(1) prewhitening step BEFORE the automatic-bandwidth calculation, then adjusting the final S estimate for the AR(1) filter. Prewhitening typically reduces higher-lag autocorrelation and would push the final m DOWN (probably back toward Andrews’ range). The no-prewhitening case worked here for clarity. On a real production HAC standard error you’d probably do both and report whichever is more conservative — the paper explicitly suggests this sensitivity check on page 7.
Today’s Paper Trail #19 (NW94 primary source) walks through the paper’s actual claims and Monte Carlo evidence, so the correction here has its citation trail already laid out.