This file covers methods that address the same problem, detecting explosive or bubble dynamics, from outside the ADF/SADF/GSADF/BSADF recursive-regression family around which exuber is built.
| Method | Paper | Status |
|---|---|---|
| Quantile-based detection | Pavlidis (2025); Wu, Shi & Wu (2025) | the global test, QPWY and QPSY monitoring are done (QPSY carries a small-sample caveat away from the median); Pavlidis’s Un/QKS is not implemented |
| Noncausal / local explosive dynamics | Blasques, Koopman, Mingoli & Telg (2025) | evaluated, not implemented |
| Spectral fragility | Bhandari (arXiv) | out of scope |
| Stochastic tree asset pricing | Gourieroux & Jasiak (2025) | out of scope (pricing, not testing) |
All papers are from the JTSA 46(5) special issue except Bhandari (arXiv). See references.md.
Quantile-based detection
Status: the global test is quantile_test(), and the recursive monitoring extensions QPWY and QPSY are monitor_quantile().
Sources
- Pavlidis, E. G. (2025). Bubbles and crashes: A tale of quantiles. JTSA, 46(5), 884–907.
- Wu, R., Shi, S. & Wu, J. (2025). Quantile analysis for financial bubble detection and surveillance. JTSA, 46(5), 908–931. Shi is a coauthor of PSY, so this is a quantile-based test from inside the same lineage.
Idea
These papers characterise explosive behaviour through quantile regression (QR) at chosen points of the conditional distribution, in place of a recursive mean-regression ADF statistic.
The global test of Wu, Shi & Wu (eq. 18) is the QR analogue of the DF -ratio:
Here is the quantile-regression estimator of on an intercept and at quantile (eq. 13). The term is the demeaned sum of squares of the lagged level ( is a demeaning projector and a column of ones). The density is a kernel estimate of the density of the first-differenced series at its own -th sample quantile (eq. 19, with ). It studentises the QR coefficient, as the residual variance does for the OLS DF ratio. The paper’s QPWY and QPSY statistics have the sup-scan structure of PWY and PSY, with this QR -ratio computed in every window.
Critical values (eq. 22–23). The limiting null distribution of is
where is a correlation estimated from the data, , between the innovation and its quantile-check score. (eq. 23) is the standard demeaned Dickey–Fuller -distribution. Simulating by the random-walk-plus-OLS- construction of radf_mc_cv() gives values identical, bit for bit, to the adf field of radf() on the same series. The quantiles of therefore need one fresh normal draw and a critical value that the package already simulates.
Optimal quantile. The paper’s criterion (eq. 33) is , a grid search over the same .
Implementation: global test
quantile_test() implements the global test of Section 3.1, a single static QR fit at one quantile with no recursion. It adds quantreg (>= 5.9) as an estimation dependency of exuber. tau = "optimal" (the default) runs the grid search of eq. 33 over tau_grid (default seq(0.2, 0.8, by = 0.05), the practical range the paper recommends), and a fixed tau can be passed. quantreg::rq() fits the regression, and the density, the demeaned sum of squares and the critical-value simulation are plain R.
Validation. The empirical size under a pure random-walk null is 5.0% for tau = "optimal" and 3.0% for fixed tau = 0.5 (nominal 5%, 100 replications). Power under an explosive alternative is 100%, as for SADF on the same DGP. The selected lies inside the search grid across replications and does not collapse to a boundary. Replication script: replication/alternative-paradigms/radf_quantile_validation.R.
Implementation: QPWY
is a single recursion. The window start is fixed at 1 and only the end grows, which is the badf shape of radf(), so it needs QR fits. QR has no closed form in cumulative sums, so each window needs a genuine fit (Corollaries 1–2, pages 10–11).
Corollary 1 decomposes the limit of the windowed statistic as
the same decomposition used for quantile_test(). Corollary 2 identifies with the badf sequence of radf() under a simulated null path.
monitor_quantile(data, tau = 0.5, minw, nrep, level, seed) is in exuber/R/monitor_quantile.R. qpwy_stat_path() is the loop of quantreg::rq() fits and repeats the per-window -ratio of quantile_test() (eq. 18) over a growing window. The boundary is a single flat value, the quantile across replicates of each simulated path’s own maximum, as in the sadf_cv of radf_mc_cv(). A pointwise marginal quantile at each would not control the first crossing: it gave a false-alarm rate of 50% against a nominal 5%.
The limit in Theorem 1 is , where is a Brownian motion with correlation to . Writing with independent of gives
For a single window is exactly , which is all that quantile_test() needs. It varies across windows, however, and a monitoring boundary is a quantile of path suprema, so a single constant draw of understates it. At (4000 replications, Gaussian innovations, ) the single- 95% boundary and the correct one are:
| single- boundary | correct boundary | true size of single- | |
|---|---|---|---|
| 0.8 | 1.534 | 1.665 | 0.066 |
| 0.5 | 1.657 | 2.060 | 0.108 |
| 0.2 | 1.704 | 2.405 | 0.196 |
The distortion is largest where QPWY is meant to help, with heavy tails and non-central quantiles, because is small there. quantile_boundary_sim() simulates and jointly for every window from prefix sums of , at per window, takes each path’s supremum for the data-estimated and matches a per-window brute force to .
Validation. The false-alarm rate under at a nominal 5% (, 200 replications) is 0.035 for Gaussian innovations and for at . For at , and it is 0.075, 0.085 and 0.125. The last is well above nominal, in line with the paper’s advice to avoid extreme quantiles in small samples (its Table II reports 0.07 for the global test at under ). Power on a post-training explosive DGP (60 replications) is 50.0%, against 55.0% for SADF on the same DGP. QPWY gives up a little power for robustness to non-Gaussian innovations, which is the paper’s motivation. test-qpwy.R has 7 tests, including a check that the supremum-calibrated boundary stochastically dominates any single-column marginal quantile.
Implementation: QPSY
(eq. 26) needs QR fits, about per series. In R with rq.fit(method = "br") that takes 2.7 s at and 12 s at . The boundary needs none of them. The of Corollary 2 comes from the same / simulation as QPWY, run over the full grid instead of the row.
monitor_quantile(..., type = "qpsy") uses windows with at least minw regression observations (the same first-window floor as QPWY) and the same flat, supremum-calibrated boundary.
Validation. qpsy_stat_path() matches a quantreg::rq() brute force over every window exactly. The grid simulation matches a per-window brute force to , and the QPSY suprema dominate those of QPWY on shared draws, as they must. At a nominal 5% (, 80 to 100 replications), Gaussian innovations give size 0.040 at and 0.350 at . With innovations the size is 0.037 at , 0.212 at and 0.440 at . For power (, explosive from , , Gaussian innovations, 60 replications), QPWY gives 0.400, QPSY 0.433 and SADF 0.483. The OLS test is ahead with Gaussian errors, as in Table V of the paper.
Caveat. The asymptotic boundary is exact and well sized at the median, and does not hold in the small early windows (about 20 observations) away from the median. A double supremum over thousands of such windows amplifies the finite-sample error, which the single supremum of QPWY mostly avoids. The paper uses bootstrap critical values for monitoring (Algorithm 1, used for Table V) and advises against extreme quantiles. With tau away from 0.5, type = "qpsy" emits a caveat as a message and as attr(x, "caveat"), and ?monitor_quantile gives the numbers. pyexuber has monitor_quantile(type="qpsy") with a UserWarning for the caveat.
The bootstrap of Algorithm 1 is not implemented. It resamples the centred and recomputes the whole statistic path for every replicate, so each replicate repeats the full QR sweep. That takes about 9 minutes per series at with 199 replicates.
Tests are in test-qpwy.R. Replication script: replication/alternative-paradigms/radf_qpwy_validation.R. The sizes are Monte Carlo estimates from 80 to 200 replications, good to about 2 or 3 points.
Pavlidis’s quantile-autoregressive tests: not implemented
Pavlidis characterises bubbles through unit-root quantile-autoregressive models in which the largest autoregressive root may vary by quantile (below 1 at low quantiles and crashes, above 1 at high quantiles and expansions). Pages 6–7 (eq. 5–11) give the same ADF regression form as radf(), fitted by quantile regression at chosen . The statistics are (coefficient-based) and (eq. 11). Critical values come from a residual or sieve bootstrap (page 7, steps 1–5) that is close to the Pedersen–Schütte bootstrap of radf_sb_(): fit an AR() to under , resample the centred residuals and rebuild the series by cumulation. Table 2 of the paper gives empirical sizes (N(0,1), and errors, ).
The tests are not implemented because the bootstrap does not reproduce the published sizes. In a prototype, the size of at with N(0,1) errors matched Table 2 (0.050 against 0.053), but at higher and were oversized (0.075–0.100 against 0.052–0.063 published). Comparing the oracle null distribution of and (1000 i.i.d. random walks, no bootstrap) with the critical values implied by the bootstrap on a single series, the bootstrap critical value stays substantially below the oracle at even at 1999 bootstrap replications, so the gap is not a matter of replication count. Only and came close to the oracle at large nboot. The statistic is very sensitive to small differences in , because the coefficient is near 1 and amplifies third-decimal differences by about 100. A next step would be to compare the bootstrap and oracle distributions of itself at several , or to implement alone, the headline statistic of the paper, which calibrated well.
Noncausal / local explosive dynamics
Status: evaluated, not implemented.
Source
Blasques, F., Koopman, S. J., Mingoli, G. & Telg, S. (2025). A Novel Test for the Presence of Local Explosive Dynamics. JTSA, 46(5), 966–980, doi:10.1111/jtsa.70001.
Idea
The test is built for mixed causal-noncausal autoregressive processes, a model class in which part of the dynamics depends on future shocks (anticipative or noncausal terms) as well as past ones. The premise is that bubbles come from an extreme shock acting through the forward-looking component of the model, and not from a recursively estimated explosive AR root on the past alone. The distribution of the test statistic is derived analytically or approximated numerically, depending on the assumed error distribution. The application is a monthly oil price index, framed partly as a Value-at-Risk-style risk-assessment tool.
Fit with exuber
Mixed causal-noncausal AR models need their own estimation. There is no closed-form OLS or QR reduction. Noncausal components are typically estimated by approximate or simulated maximum likelihood under a specified non-Gaussian error distribution, because noncausal processes are identifiable only with non-Gaussian innovations. None of the recursive least squares of exubercore applies, nor does any transform-and-reuse approach of the kind used for STADF, the sign-based test or PDC. It would be a separate statistical framework with a new estimation dependency, and no mainstream R package for noncausal AR fitting is available.
Spectral fragility (out of scope)
Bhandari, A. Rational Bubbles at the Spectral Edge: An Operator-Spectral Theory of Fragility, Identification and Finite-Sample Certification. arXiv:2607.03933.
The paper detects factor and co-movement spectral fragility. It identifies market fragility through the strength of a dominant factor extracted from cross-sectional co-movement (fewer independent factors during crises than in calm periods). It is not a right-tailed unit-root test on a single series, and it detects fragility contemporaneously and not predictively. It is not built on ADF machinery, and it addresses market-wide fragility and not the explosiveness of a specific series, so it falls outside the scope of exuber.
Stochastic tree asset pricing (out of scope)
Gourieroux, C. & Jasiak, J. (2025). A Stochastic Tree for Bubble Asset Modelling and Pricing. JTSA, 46(5), 932–944.
The paper presents a stochastic-tree representation for modelling, forecasting and pricing bubbles, with closed-form option-pricing formulas. It is an asset-pricing model and not a test for the presence of a bubble, and exuber is concerned with testing.
exuber