ivx_ar() implements the IVX-AR procedure of Yang, Long,
Peng & Cai (2020), which extends the Kostakis et al. (2015) test to
predictive regressions whose errors are serially correlated — the
situation the authors document for housing price index returns.
\[ y_t = \mu + \beta' x_{t-1} + u_t, \qquad u_t = \sum_{j=1}^{q} \phi_j u_{t-j} + \varepsilon_t, \]
with persistent predictors as in vignette("ivx"). Serial
correlation in \(u_t\) invalidates the
IVX Wald statistic’s \(\chi^2\) limit
(and the Newey–West correction inside it is designed for the predictor’s
innovations, not for \(u_t\)). Applying
the AR filter \(\phi(L) = 1 - \sum_j \phi_j
L^j\) to both sides,
\[ \phi(L)\, y_t = \phi(1)\mu + \beta' \phi(L)\, x_{t-1} + \varepsilon_t, \]
gives a predictive regression with white-noise errors and the same slope \(\beta\), to which IVX applies. Since \(\phi\) is unknown and its estimate from the residuals is biased under persistence, the paper profiles over it.
ar = "auto", ar_ic, ar_max) or
fixing it (ar = q).ar_grid, default \(\pm 0.3\) in steps of 0.02 per
coefficient), quasi-difference \(y_t\)
and \(x_{t-1}\) with \(\phi(L)\) and refit IVX.Wald_AR (see
ac_test_wald()); ar = 0 reduces to
ivx().m <- ivx_ar(hpi ~ log(res) + cpi, data = ylpc)
m
#>
#> Call:
#> ivx_ar(formula = hpi ~ log(res) + cpi, data = ylpc, horizon = 1)
#>
#> Lag Selection:
#> Auto (bic) with AR terms q = 4
#>
#> Coefficients:
#> log(res) cpi
#> 0.0018317 -0.0002078
summary(m)
#>
#> Call:
#> ivx_ar(formula = hpi ~ log(res) + cpi, data = ylpc, horizon = 1)
#>
#> Auto () with AR terms q = 4
#>
#> Coefficients:
#> Estimate Std. Error t value Wald Ind Pr(> chi)
#> log(res) 0.0018317 0.0012533 1.461 2.136 0.1439
#> cpi -0.0002078 0.0001075 -1.932 3.732 0.0534 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Joint Wald statistic: 4.316 on 2 DF, p-value 0.1156
#> Multiple R-squared: 0.03437, Adjusted R-squared: 0.02281
#> Wald AR statistic: 133.6 on 4 DF, p-value < 2.2e-16The estimated AR coefficients of the selected grid point are in
m$coefficients_ar, and the automatic order selection can be
replaced:
m$coefficients_ar
#> ar1 ar2 ar3 ar4
#> 0.4062933 -0.1139760 0.3459206 0.2142420
coef(ivx_ar(hpi ~ log(res) + cpi, data = ylpc, ar = 1))
#> log(res) cpi
#> 0.0010780144 -0.0001155392The ylpc dataset is the authors’ quarterly US housing
data.
ar_max small or
fix ar.ar = "forecast" delegates order selection to
forecast::auto.arima() and needs that package.ivx()
(beta, cz, bandwidth,
robust) are passed through to every grid refit.ivx_boot() does not accept ivx_ar objects:
the bootstrap schemes are defined for the untransformed regression.ac_test() on an ivx fit is a quick check)
ivx() is the better choice; the profiling adds noise.