Learn R Programming

dcce (version 0.4.2)

structural_break_test: Structural Break Tests for Panels with Cross-Sectional Dependence

Description

Tests for and estimates structural breaks in heterogeneous panel data models with cross-sectional dependence. Implements a Wald-type Chow test at a known break date, a sup-Wald test for an unknown break date (with trimmed candidate set), and a sequential procedure for multiple breaks following Bai & Perron (1998) adapted to panel CCE settings.

Usage

structural_break_test(
  data,
  unit_index,
  time_index,
  formula,
  model = "cce",
  type = c("unknown", "known"),
  break_date = NULL,
  trim = 0.15,
  n_breaks = 1L,
  test_terms = NULL,
  verbose = FALSE,
  ...
)

Value

An object of class dcce_break with elements:

type

"known" or "unknown".

statistic

The Wald (or sup-Wald) test statistic.

p_value

Approximate p-value.

df

Degrees of freedom of the Wald statistic.

break_date

Known or estimated break date.

candidates

For type = "unknown": a tibble with one row per candidate date (date, wald).

break_dates

Vector of break dates when n_breaks > 1L.

fit_pre

dcce_fit object from the pre-break sub-sample.

fit_post

dcce_fit object from the post-break sub-sample.

call

The original call.

Arguments

data

A panel data.frame.

unit_index

Character: unit identifier column.

time_index

Character: time identifier column.

formula

Two-sided formula passed through to dcce().

model

Character: base estimator (default "cce").

type

Character: "known" for a Chow test at a specific break date, "unknown" for a sup-Wald test over a trimmed window. Default "unknown".

break_date

Required when type = "known". Must match the time-index type.

trim

Numeric: trimming fraction at each end of the sample for the unknown-break-date search. Default 0.15 (standard Andrews 1993 choice).

n_breaks

Integer: maximum number of breaks to search for using the sequential Bai-Perron procedure. Default 1L.

test_terms

Character vector: which coefficients to include in the Wald statistic. Default NULL tests all slope coefficients (excluding the intercept).

verbose

Logical: print progress during the candidate search. Default FALSE.

...

Additional arguments passed to dcce() (e.g. cross_section_vars, cross_section_lags).

Details

For each candidate break date \(\tau\) the function computes $$W_N(\tau) = (\hat\beta_1(\tau) - \hat\beta_2(\tau))' [V_1(\tau) + V_2(\tau)]^{-1} (\hat\beta_1(\tau) - \hat\beta_2(\tau))$$ where \(\hat\beta_1\) and \(\hat\beta_2\) are the Mean Group coefficients from running the base estimator on the pre-break and post-break sub-samples respectively, and \(V_1\), \(V_2\) are the corresponding MG variances. Under the null of no break the statistic is distributed \(\chi^2_k\) where \(k\) is the number of tested coefficients.

The unknown-break-date sup-Wald test reports \(\sup_{\tau \in [\tau_1, \tau_2]} W_N(\tau)\), where \([\tau_1, \tau_2]\) is the interior of the sample after applying the trimming parameter. Approximate p-values use the Andrews (1993) large-sample distribution.

References

Andrews, D. W. K. (1993). Tests for parameter instability and structural change with unknown change point. Econometrica, 61(4), 821-856.

Bai, J., & Perron, P. (1998). Estimating and testing linear models with multiple structural changes. Econometrica, 66(1), 47-78.

Ditzen, J., Karavias, Y., & Westerlund, J. (2024). Multiple structural breaks in interactive effects panel data models. Journal of Applied Econometrics.

Examples

Run this code
data(pwt8)
brk <- structural_break_test(
  data       = pwt8,
  unit_index = "country",
  time_index = "year",
  formula    = d_log_rgdpo ~ log_hc + log_ck + log_ngd,
  model      = "mg",
  cross_section_vars = NULL,
  type       = "unknown",
  trim       = 0.20
)
print(brk)

Run the code above in your browser using DataLab