radf()The GSADF statistic in radf() tests against one specific
alternative, an explosive AR(1) root that stays fixed.
lbi_test(), ssu_test() and
quantile_test() are standalone hypothesis tests. They do
not use the recursive core of radf() and they do not feed
into the summary(), datestamp(),
tidy() and autoplot() pipeline (see
vignette("naming-and-analysis")). Each targets a different
alternative, one 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 alternative, so it can have more power than GSADF in exactly that case. |
ssu_test() |
Kurozumi & Nishi (2025) | A stochastically varying explosive coefficient: the root has a random component and is not a fixed value. |
quantile_test() |
Wu, Shi & Wu (2025) | Explosiveness in the tau-th conditional quantile of
y_t given y_{t-1}, instead of in the
conditional mean. |
lbi_test() detectsssu_test() detects and
lbi_test() missesssu_test() is designed for a root that varies
stochastically over time. The coef_noise and
coef_a arguments of sim_psy1() generate this
alternative, with rho_t = 1 + c/n + coef_a * u_t / sqrt(n),
so the root is random and not fixed:
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, sig_lvl = 95)
#>
#> ── ssu_test (SSU, n = 150, minw = 23, sig_lvl = 95%, crit = 3.3) ───────────────
#>
#> series sadf detected
#> series1 15.02 TRUE
lbi_test(y)
#>
#> ── lbi_test (n = 150, sig_lvl = 95%) ───────────────────────────────────────────
#>
#> series stat crit detected
#> series1 0.3121 1.645 FALSEOn this draw ssu_test() detects the bubble and
lbi_test(), which is built for a fixed root, does not. This
is not a defect of lbi_test(). Each test is the (locally)
most powerful one against its own alternative, and neither dominates the
other everywhere, which is why both exist.
quantile_test() picks a quantile tau (or
takes one from you) and tests for explosiveness there instead of in the
conditional mean. This pays off with heavy-tailed innovations, where the
conditional-mean regression is least reliable, so the example below
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, sig_lvl = 95%) ──────────────────────────────────────
#>
#> series tau tstat crit delta detected
#> series1 0.25 4.684 0.6824 0.379 TRUEBy default (tau = "optimal") the function searches
tau_grid and reports the quantile with the strongest
signal. The example above fixes the quantile at a specific value so that
it runs faster and can be reproduced.
lbi_test().ssu_test().quantile_test().radf().