
Alternative Tests: lbi_test(), ssu_test(), quantile_test()
Source:vignettes/alternative-tests.Rmd
alternative-tests.RmdWhy not just use radf()
radf()’s GSADF statistic tests one specific alternative:
a fixed explosive AR(1) root. lbi_test(),
ssu_test() and quantile_test() are standalone
hypothesis tests – not built on radf()’s recursive core,
and not fit into the
summary()/datestamp()/tidy()/autoplot()
pipeline (see vignette("naming-and-analysis")) – each
targeting a different alternative where GSADF-style tests can
lose power:
| Function | Paper | Alternative it targets |
|---|---|---|
lbi_test() |
Breitung & Diegel (2025) | A fixed explosive root, tested with the locally-best-invariant statistic for that specific alternative (so it can out-power GSADF exactly there). |
ssu_test() |
Kurozumi & Nishi (2025) | A stochastically varying explosive coefficient – the root itself has a random component, not a fixed value. |
quantile_test() |
Wu, Shi & Wu (2025) | Explosiveness in the tau-th conditional quantile of
y_t on y_{t-1}, not the conditional mean. |
A different alternative: where lbi_test() misses and
ssu_test() doesn’t
ssu_test() is designed for a root that itself varies
stochastically over time, not a fixed one:
sim_psy1()’s coef_noise/coef_a
arguments generate exactly that alternative,
rho_t = 1 + c/n + coef_a * u_t / sqrt(n), a random root
rather than a fixed one:
y <- sim_psy1(n = 150, te = 75, tf = 150, c = 3, alpha = 1, seed = 2001,
coef_noise = rnorm(149), coef_a = 4)
ssu_test(y, level = 0.95)
#>
#> ── ssu_test (n = 150, minw = 23, level = 95%, crit = 3.3) ──────────────────────
#>
#> series sadf detected
#> series1 14.53 TRUE
lbi_test(y)
#>
#> ── lbi_test (n = 150, level = 95%) ─────────────────────────────────────────────
#>
#> series stat crit detected
#> series1 0.3121 1.645 FALSEssu_test() detects it; lbi_test(), built
for a fixed root, does not on this same draw. This isn’t a defect in
lbi_test() – it’s the whole reason two tests exist: each is
the (locally) most powerful test for its own alternative, and neither
dominates the other everywhere.
Testing the quantile, not the mean
quantile_test() picks (or is given) a quantile
tau and tests for explosiveness there instead of in the
conditional mean – the setting where that pays off is heavy-tailed
innovations, where the conditional-mean regression is least reliable, so
the DGP here drives the PSY bubble with t(3) shocks:
y_t3 <- sim_psy1(n = 100, seed = 1, e = sim_innov(99, dist = "t", df = 3))
quantile_test(y_t3, nrep = 100, seed = 1)
#>
#> ── quantile_test (n = 100, level = 95%) ────────────────────────────────────────
#>
#> series tau tstat crit delta detected
#> series1 0.25 4.684 0.6824 0.379 TRUEtau = "optimal" (the default) searches
tau_grid and reports the quantile with the strongest
signal, shown here fixed at a specific value for a faster, reproducible
example.
Which to reach for
- A genuinely fixed explosive root, and want a test with power
advantages over standard GSADF for exactly that case:
lbi_test(). - Suspect the explosive root itself is noisy/time-varying rather than
constant:
ssu_test(). - Suspect explosiveness shows up more in the tails (or a specific
quantile) of the distribution than in the mean:
quantile_test(). - Not sure which alternative applies, or want the most widely used
benchmark:
radf()’s GSADF remains the default first test to run.