
SBZ Weighted Least Squares Bubble Test with Union-of-Rejections
Source:R/radf_sbz.R
radf_sbz_union.Rdradf_sbz_union performs the HLST (2016) wild bootstrap – the same
algorithm as radf_wb_cv – jointly on the classic
sup-ADF statistic (supDF, i.e. radf()'s sadf) and the
WLS/kernel-volatility statistic supBZ of Harvey, Leybourne & Zu
(2019), and combines them into the paper's union-of-rejections statistic
U. supBZ can have substantially higher power than supDF under
many time-varying-volatility patterns, at the cost of lower power under
others (e.g. upward volatility trends); U is designed to capture
whichever of the two is more powerful for a given series.
Arguments
- data
A univariate or multivariate numeric time series object, a numeric vector or matrix, or a data.frame. A column may have leading and/or trailing
NAvalues (an uneven/unbalanced panel where series enter or exit the sample at different times) – those periods are filled withNAinbadf/bsadfand excluded from that series'adf/sadf/gsadf. InteriorNAvalues (a gap in the middle of a series) are not supported. When any series is padded this way, the panel statistic (bsadf_panel/gsadf_panel) is not available and is returned asNA, with a warning.- minw
A positive integer. The minimum window size (default = \((0.01 + 1.8/\sqrt(T))T\), where T denotes the sample size).
- nboot
A positive integer. Number of bootstraps (default = 500L).
- kernel
Kernel for the spot-volatility estimator (eq. 6),
"gaussian"(default, as in the paper) or"uniform".- h
Bandwidth for the spot-volatility estimator. Default: leave-one-out cross-validation over the paper's own search range.
- seed
An object specifying if and how the random number generator (rng) should be initialized. Either NULL or an integer will be used in a call to
set.seedbefore simulation. If set, the value is saved as "seed" attribute of the returned value. The default, NULL, will not change rng state, and return .Random.seed as the "seed" attribute. Results are reproducible across the parallel and non-parallel option when the same seed is used.- object
A
radf_sbz_unionobject.- sig_lvl
Significance level to plot the critical value at, one of
90,95(default),99.- ...
Further arguments passed to methods. Not used.
Value
A list with bootstrap p-values (p_supDF, p_supBZ,
p_U) and critical values (supDF_cv, supBZ_cv,
U_cv) for each series.
Details
U's value itself – not just its significance – is defined using
a bootstrap-calibrated scaling ratio between supDF and
supBZ's own 95\
the joint bootstrap needs supDF/supBZ computed from the
same resampled series each replicate for the union's size
guarantee (the paper's Theorem 3) to hold. That coupling is why this
stays one bundled function rather than splitting into a statistic and a
critical-value function the way most of exuber does – unlike U,
supBZ alone has no such coupling, so it does split that way: see
radf_sbz/radf_sbz_cv for the supBZ-only
route, with the usual summary()/datestamp/
tidy/autoplot pipeline.
Note
This function bundles the statistic and its critical values in a
single call – there is no separate un-cv'd statistic function and no
other critical-value function to pair it with, unlike radf()/
radf_wb_cv() (U's own value structurally requires the
bootstrap, see Details).
Returns its own class (not radf_obj), so it does not plug into
summary()/\link{datestamp}/tidy/autoplot – prints its own
statistic/critical-value summary (bundles the test statistic and its
critical value in one object), but has its own autoplot method
(a per-series comparison of supDF/supBZ/U against
their critical values) – see vignette("naming-and-analysis",
package = "exuber") for the full picture of which functions do and
don't fit the shared pipeline.
References
Harvey, D. I., Leybourne, S. J., & Zu, Y. (2019). Testing explosive bubbles with time-varying volatility. Econometric Reviews, 38(10), 1131-1151.
See also
radf_wb_cv for the underlying (supDF-only) wild
bootstrap, radf_sbz/radf_sbz_cv for the
supBZ-only route with full pipeline support, and radf_tt
for a bootstrap-free heteroskedasticity-robust alternative.
Examples
# \donttest{
res <- radf_sbz_union(sim_data, nboot = 200)
print(res)
#>
#> ── radf_sbz_union (minw = 19, nboot = 200) ─────────────────────────────────────
#>
#> series supDF supBZ U p_supDF p_supBZ p_U
#> psy1 1.946 0.2802 1.946 0.055 0.675 0.105
#> psy2 7.880 1.5349 7.880 0.000 0.175 0.000
#> evans 5.283 1.9138 5.283 0.120 0.285 0.190
#> div 1.113 2.2607 1.338 0.090 0.100 0.130
#> blan 3.930 1.4008 3.930 0.080 0.240 0.130
#>
autoplot(res)
# }