Liu, X. and Chan, K. W. (2026+). Tail postcoloring in long-run variance estimation of time series. To appear in Journal of the American Statistical Association.
Abstract
Prewhitening is a common approach to deal with strong autocorrelation. In this article, we propose a new approach called tail postcoloring, motivated by it. It uses parametric models to project, or color back, the neglected tail autocovariances in nonparametric estimators onto the final estimator. This approach bridges the nonparametric variance estimator and the parametric coloring model through a scaling factor. It automatically switches between these two arms using a bandwidth parameter, without the need to transform the entire dataset into residuals, as in the standard prewhitening approach. When the coloring model is well-specified, a parametric rate can be achieved. In finite samples, it is also more robust to misspecification of the coloring model compared to the whitening model in the standard approach. Besides, it avoids severe potential variance inflation or power reduction caused by the recoloring factor in the standard approach. We show that multiple parametric models can be used to construct a multiply robust tail postcolored estimator. It also naturally works for multivariate time series. A real-data example in Markov chain Monte Carlo output analysis is provided. Supplementary materials for this article are available online, including a standardized description of the materials available for reproducing the work.
Journal official link 10.1080/01621459.2026.2676715
airXiv: https://arxiv.org/abs/2605.15596
R-package: "postcoloring" (version: 0.0.0.3; last update: 2026-02-28; help manual)
R code for a simplified version of the proposed estimator:
lrv = function(x){ n = length(x) l = floor(2*n^(1/3)) acvf = c(acf(x,lag.max=l,type="cov",plot=FALSE)$acf) phi = acvf[2]/acvf[1] eta = l*(1-phi^2)/(2*phi^(l+1)-2*phi-l*phi^2+l) # postcolor factor lrv0 = acvf[1] + 2*sum(acvf[-1]*(1-(1:l)/l)) # standard estimator eta*lrv0}x = arima.sim(200, model=list(ar=.5,ma=.5))lrv(x) # true value = 9R code for installing the R package "postcoloring" (URL):
install.packages("postcoloring", repos=NULL, type="source")library(postcoloring)help(lrv)x = arima.sim(200, model=list(ar=.5,ma=.5))lrv(x, q=1, model="ar1", bw="arma11") # true value = 9