Full-sample tests find little return predictability; a growing
literature argues that predictability comes and goes in “pockets”.
ivx_episodic() implements the subsample IVX tests of
Demetrescu, Georgiev, Rodrigues & Taylor (2023, Section 3.2), which
formalise the rolling and recursive approaches of Demetrescu et
al. (2022) and, for one-sided tests, of Pavlidis, Paya & Peel (2017)
(see vignette("rolling-ivx") for the latter).
For a window \(t = \lfloor \tau_1 T \rfloor + 1, \dots, \lfloor \tau_2 T \rfloor\) the IVX statistic is computed from the window’s observations but with the full-sample instrument (DGRT eqs 15–17):
\[ \hat\beta_{zx}(\tau_1, \tau_2) = \frac{\sum_{t} z_{t-1}\,(y_t - \bar y(\tau_1,\tau_2))} {\sum_{t} z_{t-1}\,(x_{t-1} - \bar x_{-1}(\tau_1,\tau_2))}, \qquad t_{zx}(\tau_1, \tau_2) = \frac{\hat\beta_{zx}(\tau_1,\tau_2)}{\mathrm{s.e.}(\hat\beta_{zx}(\tau_1,\tau_2))}, \]
with \(\hat\sigma_u^2\) from the
window’s OLS residuals (or Eicker–White weights with
robust = TRUE). Three agnostic sequences are
considered:
The tests are the maximum (right-tailed, \(H_1: \beta > 0\)), minimum (left-tailed)
and maximum squared (two-sided) of the sequence; with several
predictors, the maximum of the subsample Wald statistics (Remark 11).
Their limits are functionals of Brownian motions, so critical values
come from the wild bootstrap of
vignette("robust-inference"): the same functional is
computed on each bootstrap sample. The default is the fixed regressor
wild bootstrap used by Demetrescu et al. (2022);
type = "rwb" is available.
mod <- ivx(Ret ~ DP, data = kms)
e <- ivx_episodic(mod, scheme = "rolling", window = 0.2, B = 499, seed = 1)
e
#>
#> Call:
#> ivx(formula = Ret ~ DP, data = kms, horizon = 1)
#>
#> Subsample IVX tests, rolling scheme (window = 0.2), 827 windows
#> Fixed regressor wild bootstrap, B = 499
#>
#> statistic bootstrap p
#> sup t (H1: beta > 0) 2.921 0.1363
#> inf t (H1: beta < 0) -0.4166 0.9980
#> sup t^2 (H1: beta != 0) 8.533 0.2846The sequence itself is returned, with the window bounds as row indices of the regression sample:
head(e$sequence, 3)
#> start end Wald t_DP
#> 1 2 207 0.3000535 0.5477714
#> 2 3 208 0.2980866 0.5459731
#> 3 4 209 0.3001673 0.5478752
plot(kms$Date[e$sequence$end], e$sequence$t_DP, type = "l",
xlab = "window end", ylab = "subsample IVX t-ratio", main = "Rolling windows, 20% of the sample")
abline(h = c(-1.96, 1.96), lty = 2)Forward and backward recursive sequences:
window is a fraction of the regression sample; the
paper uses window fractions between 0.1 and 0.3 for rolling tests and
warm-in fractions of 0.1–0.25 for recursive ones. Very short windows
give noisy statistics and low power.ivx() on each window (as in
vignette("rolling-ivx")) rebuilds the instrument inside the
window, which is a different statistic; the Bonferroni approach used
there is conservative, the bootstrap sup-test is not.ivx object
without weights.