The replication record
Replication
Every method that exuber implements beyond the original PSY test comes from a published source and is checked by a standalone script. This page records what was reproduced and where the result falls short.
This section is for readers who want to check the work. If you want to run the methods on your own data, the guide is the better place to start.
The package's own tests guard against regressions. The 69 scripts behind this page recompute each statistic from scratch with brute-force regressions, hand-derived identities, and Monte Carlo size and power compared with the paper's tables. Agreement therefore says something independent of the code being checked.
Of the 30 methods, 28 reproduce their source
and 2 carry a caveat. Every script is
self-contained. The R scripts run from the exuber/
package root, and the Python versions check that pyexuber reproduces the same numbers.
Volatility-robust tests
Full notes & scripts →-
STADF/GSTADF (time-transformed)
radf_tt()vs. Whitehouse (2019) published critical values
clean -
SBZ (WLS + kernel volatility)
radf_sbz()vs. paper's Table 1 bootstrap p-values
clean -
Kernel-purge heteroskedasticity test
radf_kp()Unit tests
clean -
Pedersen & Schütte sieve-bootstrap lag selection (radf_sb_cv(type = "aic"/"bic"))
lag-order recovery on AR(2)/AR(5) DGPs + modal lag 0 under a pure random walk (radf_sb_cv_aic_bic_validation.R)
clean -
Hafner skewness-corrected wild bootstrap
moments + Monte Carlo size/power
clean -
Sign-based sGSADF
radf_sign()exact heteroskedasticity invariance + published-value cross-check
clean -
Sign-based level-shift robustness + demeaned variant (Harvey, Leybourne, Tatlow & Zu 2025)
radf_sign()formula-exact vs. brute-force recursive-mean loop + heteroskedasticity invariance + power + reproduction of the paper's own Table 1 Case-1 empirical size
clean -
Stochastic explosive-coefficient SSU/GSSU + UR/GUR union (Kurozumi & Nishi 2025)
ssu_test()formula-exact vs. brute-force lm() + manual cross-moment (any window start, GSSU sup) + every Table I column + Monte Carlo size/power
clean -
CUSUM-type tests CS/GCS/CSSQ/GCSSQ (Kurozumi & Nishi 2025)
cusum_test()running max/min vs. a double loop over every window + Table I + Monte Carlo size
clean -
SV-ADF asymmetric-threshold dating (Sarkar & Wells 2026, preprint)
badf reuse bit-for-bit + threshold-formula exact match + Monte Carlo dating accuracy/false-alarm rate
clean
Dating and root inference
Full notes & scripts →-
Root inference, Guo/Sun/Wang normal-t CI
rootstamp()Unit tests
clean -
PDC/KS sequential dating (+ WLS variant)
dating_pdc()formula-exact vs. brute force + Monte Carlo consistency
clean -
Reverse-regression recovery dating (Phillips & Shi 2014)
radf_recovery()structural invariant + Monte Carlo bias/false-detection rate
caveatthe recovery date f_r behaves well. The crisis-origination date f_c and the false-detection rate under the null are noisier.
-
SSR/BIC dating, HLS route (Harvey, Leybourne & Sollis 2017)
dating_hls()formula-exact incl. full joint 3-breakpoint search vs. brute force + Monte Carlo model-selection accuracy
clean -
SSR/BIC dating, HLW multi-bubble route (Harvey, Leybourne & Whitehouse 2020)
dating_hlw()window-arithmetic check + Monte Carlo breakpoint accuracy + exact-match check vs. standalone dating_hls()
clean -
SSR/BIC dating, KNP bias-corrected route (Kejriwal, Nguyen & Perron 2025)
dating_knp()formula-exact vs. brute force + direct Monte Carlo reproduction of the paper's own Theorem 1 (naive inconsistency) and Theorem 2 (fix); multi-bubble DP exact vs. a brute-force partition search + two-bubble Monte Carlo
clean
Real-time monitoring for bubbles
Full notes & scripts →-
Real-time monitoring, Family A (Phillips & Shi 2020)
monitor()training/monitoring separation + Monte Carlo false-alarm/detection rates
clean -
Real-time monitoring, CUSUM + CUSUMV (Homm & Breitung 2012; Astill et al. 2023)
monitor_cusum()formula-exact vs. brute force + Monte Carlo false-alarm/detection rates under homo-/heteroskedasticity
clean -
Real-time monitoring, Kurozumi (2020) closed-form SADF boundary
monitor()table-lookup exact match + Monte Carlo false-alarm/detection rates
clean -
Real-time monitoring, Kurozumi (2020) closed-form GSADF_{s0} boundary
monitor()closed-form band vs. brute-force lm() search + table-lookup exact match + Monte Carlo false-alarm/detection rates
clean -
Real-time monitoring, HB (2012) FLUC statistic
monitor()table-lookup exact match + Monte Carlo false-alarm/detection rates
clean -
Real-time monitoring, HB (2012) CUSUM finite-sample boundary
monitor_cusum()table-lookup exact match + Monte Carlo false-alarm/detection rate vs. asymptotic default
clean -
Static LBI test (Breitung & Diegel 2025)
lbi_test()eq. 4 telescoping identity + Monte Carlo N(0,1)-calibration check (mean/sd/KS-test) + power vs. standard SADF
clean -
Sequential LBI monitoring, mCUSUM/wCUSUM (Breitung & Diegel 2025)
lbi_test()weight-normalization + telescoped-final-point formula check + table-lookup exact match + Monte Carlo false-alarm/detection rate vs. monitor_cusum()
clean
Multivariate bubble tests
Full notes & scripts →-
Common-bubble PCA+PSY
radf_common()vs. paper's Theorem 4.3
clean -
Co-bubble (KPSS-type + wild bootstrap)
cobubble_test()formula-exact vs. brute force + Monte Carlo size/power
clean -
Contagion regression, minimum-viable subset (Greenaway-McGrevy & Phillips 2016)
contagion_reg()formula-exact vs. brute force (fixed-window AR1, NW ratio, LOOCV SSE) + directional sensible-behavior check
clean
Alternative paradigms
Full notes & scripts →-
Quantile-based global test (Wu, Shi & Wu 2025)
quantile_test()structural check (Q matches radf()$adf bit-for-bit) + Monte Carlo size/power vs. standard SADF
clean -
Quantile monitoring, QPWY route (Wu, Shi & Wu 2025)
monitor_quantile()formula-exact vs. brute-force QR + badf-reuse structural check + Monte Carlo false-alarm/detection rates vs. standard SADF
clean -
Quantile monitoring, QPSY route (Wu, Shi & Wu 2025)
monitor_quantile()formula-exact vs. brute-force QR over every window + grid-simulation brute force + Monte Carlo size across quantiles and innovations + power vs. SADF
caveatthe asymptotic boundary is well sized at the median (4%) but oversized away from it in small samples (35% to 44% at tau = 0.9, n = 100). The paper's bootstrap is not implemented.
Full research notes
Each family has one page. It lists the sources, the exact numbers reproduced, what differs from the paper, what remains open, and every script in full.
- Volatility-robust tests Tests robust to time-varying innovation variance: time-transformed, kernel-purged, WLS, sign-based, and stochastic-coefficient routes.
- Dating and root inference Origination, collapse and recovery dates, plus confidence intervals on the explosive root itself.
- Real-time monitoring for bubbles Sequential and real-time detection: training-vs-monitoring orchestration, CUSUM families, and closed-form boundaries.
- Multivariate bubble tests Panel and cross-series tests -- common bubbles, co-bubbles, and bubble contagion.
- Alternative paradigms Non-ADF-family approaches, principally the quantile-based global test and its recursive monitoring extension.
- Simulation DGPs Data-generating processes for the axes the original sim_*() functions do not cover.
- References, full bibliography Full bibliography behind the replication record, organised by methodological family.
The cited PDFs are not redistributed here. The bibliography gives DOIs and working-paper links instead.
exuber