Skip to contents

dating_pdc dates a single bubble episode using the sequential sample-splitting method of Pang, Du & Chong (2021) and its 4-regime extension by Kurozumi & Skrobotov (2023): a fixed regime structure (unit-root, explosive, stationary-collapse, and optionally a final unit-root recovery regime) whose breakpoints are estimated one at a time, each a closed-form residual-sum-of-squares minimisation over a no-intercept AR(1) model, in \(O(T)\) via cumulative sums.

Usage

dating_pdc(
  data,
  regimes = 3L,
  trim = 0.05,
  type = c("ols", "wls"),
  kernel = c("gaussian", "uniform"),
  h = NULL
)

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.

regimes

Either 3 (PDC: unit-root, explosive, stationary collapse) or 4 (KS: adds a final unit-root recovery regime after the collapse).

trim

Minimum fraction of the (differenced) sample required on either side of each breakpoint search (default 0.05, as in KS's empirical application; PDC use 0.05-0.1 in their simulations).

type

"ols" (default) for the plain homoskedastic estimator, or "wls" for Kurozumi & Skrobotov (2023)'s volatility-corrected two-step estimator.

kernel

Kernel for the spot-volatility estimator when type = "wls", "gaussian" (default) or "uniform". Ignored when type = "ols".

h

Bandwidth for the spot-volatility estimator when type = "wls". Default: leave-one-out cross-validation. Ignored when type = "ols".

Value

A data.frame with one row per series and columns origination, collapse, and (if regimes = 4) recovery, giving the estimated break dates (or observation indices, if no date index is available).

Details

Unlike datestamp (which finds where the recursive BSADF statistic crosses a critical value), this fits an explicit regime-switching model directly to the series; it needs no critical values at all. PDC prove the collapse date is identified first – its effect on the residual sum of squares dominates the origination date's – which is what licenses estimating the breaks sequentially rather than jointly (unlike Harvey, Leybourne & Sollis's (2017) BIC-selected, jointly-fit alternative, which is not implemented here; see the package's enhancement notes for the cost/benefit reasoning).

type = "wls" adds Kurozumi & Skrobotov (2023)'s time-varying- volatility correction: fit the plain ("ols") model first, collect its fitted piecewise-regime residuals, smooth their square nonparametrically (the same Nadaraya-Watson kernel/leave-one-out bandwidth estimator exuber already uses for radf_sbz_cv/radf_kp), and re-run the same sequential break search with each squared term weighted by the inverse of the estimated spot variance. This needs no new critical-value theory – like the OLS version, it is point estimation, not a threshold-crossing test.

Status

[Experimental]

References

Pang, T., Du, L., & Chong, T. T. L. (2021). Estimating multiple breaks in the bubble regime with SSR minimization. Journal of Management Science and Engineering.

Kurozumi, E., & Skrobotov, A. (2023). Bubble dating: a sequential testing approach.

Kurozumi, E., & Skrobotov, A. (2023). Improving the accuracy of bubble date estimators under time-varying volatility. arXiv:2306.02977.

See also

datestamp for the PSY threshold-crossing alternative.

Examples

# \donttest{
res <- dating_pdc(sim_data$sim_psy1, regimes = 3L, trim = 0.05)
#> Warning: Unknown or uninitialised column: `sim_psy1`.
#> Error: unsupported class
print(res)
#> Error: object 'res' not found
# }