exuber (development version)
New methodologies from the docs/enhancements/ research programme, each independently validated against a published number (formula-exact check, table lookup, or a direct Monte Carlo reproduction of the source paper’s own theorem) — see docs/enhancements/README.md for the full record of what was checked and how.
Volatility-robust tests
-
radf_sbz()/radf_sbz_cv()/radf_sbz_union()— Herwartz & Siedenburg’s WLS/kernel-volatility SBZ test, split 2026-08-22 into a statistic (radf_sbz()), its bootstrap critical values (radf_sbz_cv(), fulldatestamp()/autoplot()support), and the union-of-rejections test against classicsupDF(radf_sbz_union(), renamed from the original bundledradf_sbz_cv()— seevignette("volatility-robust-radf"). -
radf_kp()— kernel-purge heteroskedasticity test. -
radf_wb_cv(..., dist_skew = TRUE)— Hafner (2020) skewness-corrected wild bootstrap. -
radf_sign()/radf_sign_cv()— Harvey, Leybourne & Zu (2020) sign-based sGSADF, invariant to volatility with no bootstrap needed. -
ssu_test()— Kurozumi & Nishi (2025) stochastic explosive-coefficient test (minimum-viable subset). -
datestamp(..., option = "svadf")— Sarkar & Wells (2026) SV-ADF asymmetric-threshold dating, folded intodatestamp()rather than shipped as a separateradf_svadf()entry point. Caveat: the source is a non-peer-reviewed preprint, flagged at call time and in?datestamp, Caveats section.
Dating and root inference
-
dating_pdc()— PDC/KS sequential sample-splitting dating, plustype = "wls"for Kurozumi & Skrobotov (2023)’s time-varying-volatility correction. -
radf_recovery()/radf_recovery_cv()— Phillips & Shi (2014) reverse-regression crisis-origination/recovery dating. Caveat:f_cand the overall false-detection rate are exploratory pending further validation, flagged at call time and in?radf_recovery. -
dating_hls()— Harvey, Leybourne & Sollis (2017) SSR/BIC single-bubble dating. -
dating_hlw()— Harvey, Leybourne & Whitehouse (2020) SSR/BIC multi-bubble two-step wrapper. -
dating_knp()— Kejriwal, Nguyen & Perron (2025) bias-corrected dating.
Real-time monitoring
-
monitor()— Phillips & Shi (2020) training/monitoring orchestration (Family A), plus Kurozumi (2020) closed-formSADF/GSADF_s0boundaries and Homm & Breitung (2012)’s FLUC boundary. -
monitor_cusum()— Homm & Breitung (2012) CUSUM monitoring, plus Astill et al. (2023)’s volatility-robust CUSUMV kernel variant and HB’s finite-sample boundary. -
lbi_test()/monitor_lbi()— Breitung & Diegel (2025) static LBI test and its sequential mCUSUM/wCUSUM extension.
Multivariate / panel tests
-
radf_common()/radf_common_cv()— Chen, Phillips & Shi common-bubble detection (PCA + PSY). -
cobubble_test()— Evripidou, Harvey, Leybourne & Sollis (2022) co-explosive test. -
contagion_reg()— Greenaway-McGrevy & Phillips (2016) bubble contagion regression (minimum-viable subset).
Alternative paradigms
-
quantile_test()— Wu, Shi & Wu (2025) quantile-based global test. -
monitor_quantile()— Wu, Shi & Wu (2025) QPWY recursive quantile monitoring.
Naming
- 12 of the functions above (
cobubble_test,contagion_reg,monitor_cusum,dating_hls,dating_hlw,dating_knp,lbi_test,monitor_lbi,dating_pdc,monitor_quantile,quantile_test,ssu_test) were namedradf_*in earlier development snapshots of this unreleased version; renamed before release since none of them are actually recursive-ADF-based tests. No deprecated aliases were kept, as the old names never shipped in a CRAN release. -
radf_monitor()renamed tomonitor()(via a brief intermediatemonitor_radf(), never released), the flagship of the real-time monitoring family alongsidemonitor_cusum()/monitor_lbi()/monitor_quantile()— deliberately carrying noradf/sadftoken so it can’t be mistaken for aradf_*()variant, ADF-family internals notwithstanding — seevignette("naming-and-analysis"). -
exuber_functions()added: a queryable registry of every exported function’s family (adf,test,dating,monitor,root,regression), so “what monitoring functions exist” is an actual function call, not a naming convention to memorize. -
radf_wb_cv2()/radf_wb_distr2()renamed toradf_wb_ps_cv()/radf_wb_ps_distr()– the2suffix named nothing (just “the second wild bootstrap added”);_psidentifies it as Phillips & Shi (2020)’s wild bootstrap (fits a null AR model, resamples residuals, supports atbtraining-window boundary), as opposed toradf_wb_cv()’s Harvey et al. (2016) non-parametric multiplier bootstrap, matching this file’s own internal naming (radf_wb_dgp_ps/radf_wb_psvs.radf_wb_dgp_hlst/radf_wb_hlst) and the package-wideradf_<method>_<qualifier>_cvpattern (radf_sign_dm_cv()). Unlike the renames above,radf_wb_cv2()shipped in the 1.0.0 release (the JSS paper), so this one keepsradf_wb_cv2()/radf_wb_distr2()as deprecated aliases (.Deprecated(), warn-and-forward, see?exuber-deprecated) rather than a clean break. -
radf_tt_cv(),radf_sign_cv(), andradf_sign_dm_cv()now all computebadf_cv/bsadf_cv(a time-varying boundary), not just the three scalar critical values —radf_tt()/radf_sign()/radf_sign_dm()results now work with the fullsummary()/datestamp()/tidy()/autoplot()pipeline, not justsummary()/tidy(). Found first inradf_tt_cv()(a user-reporteddatestamp()crash onradf_sign()prompted checking all three GLS-demeaned-family functions), then confirmed the identical fix applies to the other two. Validated per function:badf_cv‘s last row is bit-identical toadf_cv(a hard identity), empirical false-alarm rate at or below nominal (radf_tt3.3%,radf_sign5.5%,radf_sign_dm3.5%, vs. 5% nominal), and detection power on an identical synthetic bubble in the same range as the establishedradf()/radf_mc_cv()baseline (16%):radf_tt18%,radf_sign20%,radf_sign_dm8% (lower power a known, expected property of the sign-based tests’ heteroskedasticity invariance, not a validation concern) — seevignette("naming-and-analysis").
Other
-
rootstamp()— confidence interval and doubling time on the explosive root, via S3 dispatch: the default method fits a single sub-sample, theradf_objmethod runs everydatestamp()episode at once (previously three separate functions –explosive_root(),root_ci(),root_ci_datestamp()– consolidated before release).
exuber 1.1.0
CRAN release: 2025-08-31
- Fixed targets not in the package itself nor in the base packages to use package anchors, i.e., use
exuber 1.0.1
CRAN release: 2023-02-12
Maintenance release to accommodate breaking changes in dplyr 1.1.0.
exuber 1.0.0
CRAN release: 2022-08-19
This first major release accompanies the publication of an article in the Journal of Statistical Software:
Vasilopoulos, K., Pavlidis, E., & Martínez-García, E. (2022). exuber: Recursive Right-Tailed Unit Root Testing with R. Journal of Statistical Software, 103(1), 1–26. https://doi.org/10.18637/jss.v103.i10
augment method for radf_obj and radf_cv
New arg
truncFixed inconsistencies among functions.
Now radf stores the data that are later can be accessed with
mat+-
Advanced features on datestamping: New columns that indicate:
- Signal
- Peak
- Ongoing
- Nonrejected
New datestamping procedure
rev_radfetc.New bootstrap procedure
radf_wb_cv2andradf_wb_distr2New coloring convention for plotting
dsandobjclasses
exuber 0.4.2
CRAN release: 2020-12-18
- Include printing methods for
radf_objandradf_cv. - Removed unused class definitions.
- Using
progresspackage for progress_bar.
exuber 0.4.0
CRAN release: 2020-05-04
Design
We have the following design in mind for future scalability. If you want make inference about radf models, then the estimation can be achieved with radf() function and return an object of class radf_obj, and the critical values can be achieved with radf_*_cv() and return an object of class radf_cv.
Breaking changes
-
autoplot()forradfmodels has been refactored and new features have been added for more flexibility and conformity with the {ggplot} mindset. - Because of the change in
autoplot,ggarrange()is now defunct. -
fortify()methods have been replaced bytidy(),augment(),tidy_join()andglance_join()methods.fortify()methods are now defunct. - Also
glance()is now defunct. The user can usetidy()withpanel=TRUEinstead. - Changed the names of:
-
mc_cv()toradf_mc_cv().mc_cv()is now deprecated. -
mc_distr()toradf_mc_distr().mc_distr()is now deprecated. -
wb_cv()toradf_wb_cv().wb_cv()is now deprecated. -
wb_distr()toradf_wb_distr().wb_distr()is now deprecated. -
sb_cv()toradf_sb_cv().sb_cv()is now deprecated. -
sb_distr()toradf_sb_distr().sb_distr()is now deprecated. -
critdataset toradf_crit. -
col_names()toseries_names().col_names()is now deprecated.
-
exuberdata
- We created a new package called
exuberdatathat accommodates critical values for up to 2000 observations. Critical values can be examined withexuberdata::radf_crit2. The package is created throughdratR archive Template, and can be easily installed withinstall.packages('exuberdata', repos = 'https://kvasilopoulos.github.io/drat/', type = 'source')or throughinstall_exuberdatawrapper function that is provided inexuber.
exuber 0.3.0
CRAN release: 2019-07-15
Breaking changes
- Changed
opt_bsadf = conservativefor the simulated critical values (crit), also reduced the size of thecritfrom 700 to 600 due to package size restrictions. -
sim_dgp1()andsim_dgp2()have been renamed tosim_psy1()andsim_psy2()to better describe the origination of the dgp. -
sim_dgp1()andsim_dgp2()have been soft-deprecated. -
autoplot_radf()arranges automatically multiple graphs, to return to previous behavior we included the optional argumentarrangewhich is set to TRUE by default.
Three new functions have been added to simulate empirical distributions for:
-
mc_dist(): Monte Carlo -
wb_dist(): Wild Bootstrap -
sb_dist(): Sieve Bootstrap
and a function that can calculate the p-values calc_pvalue() given the above distributions as argument.
Also methods tidy() and autoplot() have been added to turn the object into a tidy tibble and draw a particular plot with ggplot2, respectively.
New features
-
tidy()methods for objects of classradf,cv. -
augment()methods for objects of classradfandcv. -
augment_join()to combine objectradfandcvinto a single data.frame. -
glance()method for objects of classradf.
Improvements
- New printing output for the functions
summary(),diagnostics()anddatestamp(). - New improved progressbar with more succinct printing for
wb_cv() -
seedargument to functions that are using rng. Also the option to declare a global seed for reproducibility with theoption(exuber.global_seed = ###)
exuber 0.2.1
CRAN release: 2019-03-01
- Changed DESCRIPTION to include
sb_cvreference. - Renamed boolean to dummy from
datestampanddiagnostics. -
datestampdummy is now an attribute.
exuber 0.2.0
CRAN release: 2019-02-04
Options
Some of the arguments in the functions were included as options, you can set the package options with e.g. options(exuber.show_progress = TRUE).
-
paralleloption boolean, allows for parallel in critical values computation. -
ncoresoption numeric, sets the number of cores, defaults to max - 1. -
show_progressoption boolean, allows you to disable the progress bar, defaults to TRUE.
New features
- Panel estimation in
radf() - Added
sb_cv()function: Panel Sieve Bootstrapped critical values - Default critical values are supplied directly into
summary(),diagnostics,datestamp()andautoplot(), without having to specify argument cv. The critical values have been simulated frommc_cv()function and stored as data. Custom critical values should be provided by the user with the optioncv. - Added
ggarrange()function, that can arrange a list of ggplot objects into a single grob. - Added
fortifyto arrange a data.frame fromradf()function.
