Skip to contents

dating_hls dates a single bubble episode by fitting four candidate regime-dummy regressions of Delta y_t on y_{t-1} (unit-root-to-end, unit-root-bubble-unit-root, unit-root-bubble-collapse, and unit-root-bubble-collapse-unit-root), each by residual-sum-of-squares minimisation over candidate break fractions, and selects among them by BIC.

Usage

dating_hls(data, trim = 0.05)

# S3 method for class 'dating_hls_obj'
autoplot(object, ...)

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 NA values (an uneven/unbalanced panel where series enter or exit the sample at different times) – those periods are filled with NA in badf/bsadf and excluded from that series' adf/sadf/ gsadf. Interior NA values (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 as NA, with a warning.

trim

Minimum fraction of the (differenced) sample required in every regime (default 0.05, following Harvey, Leybourne & Sollis's own empirical-application choice; their simulations use 0.1).

object

An object of class dating_hls_obj, the output of dating_hls.

Value

An object of class dating_hls_obj: a list with the selected model (model, one of 1:4), its breakpoint date(s) (origination, collapse, recoveryNA for breakpoints the selected model doesn't have), and the BIC value of every candidate model (bic, for inspecting how close the selection was).

Details

Unlike datestamp (threshold-crossing on the recursive BSADF statistic) or dating_pdc (a fixed 3/4-regime structure with sequentially, not jointly, estimated breaks), this jointly searches breakpoints within each of four candidate regime structures and lets BIC pick the structure itself – so it can distinguish "bubble that collapses to a new stationary regime" (Model 3) from "bubble that fully reverts to a unit root" (Model 4) from "bubble ongoing at the sample end" (Model 1), which dating_pdc's fixed regime count cannot. The cost is a genuine joint grid search rather than dating_pdc's sequential one-break- at-a-time scan.

Note

This is an SSR/BIC model-selection dating procedure, not a hypothesis test – it needs no critical values at all.

Returns its own class (not radf_obj), so it does not plug into summary()/\link{datestamp}/tidy/autoplot – prints its own dating table (model, origination, collapse, recovery) – see vignette("naming-and-analysis", package = "exuber") for the full picture of which functions do and don't fit that pipeline.

Status

[Experimental]

References

Harvey, D. I., Leybourne, S. J., & Sollis, R. (2017). Improving the accuracy of asset price bubble start and end date estimators. Journal of Empirical Finance, 40, 121-138.

See also

dating_pdc for the cheaper sequential-splitting alternative this complements, and datestamp for PSY's original threshold-crossing rule.

Examples

# \donttest{
res <- dating_hls(sim_data$psy1, trim = 0.05)
print(res)
#> 
#> ── dating_hls (n = 100, trim = 0.05) ───────────────────────────────────────────
#> 
#>    series  model  origination  collapse  recovery
#>   series1      4           41        55        62
#> 

# Plot the series with the selected model's breakpoint(s) overlaid
autoplot(res)


# A whole panel at once, faceted one subplot per series
autoplot(dating_hls(sim_data, trim = 0.05))

# }