*! version 1.0.0 17jul2026

help for xtcombreak version 1.0.0 - 17jul2026

Title

xtcombreak -- Common breaks in panel data: estimating the
common break date with a confidence interval (Bai 2010), and testing whether the
break really is common across units (Jiang and Kurozumi 2026).

Syntax

Estimate the common break date, its confidence interval, and which series broke

xtcombreak estimate depvar [if] [in]
[, estimate_options]

Test the null that the break date is COMMON across units

xtcombreak test depvar indepvars [if] [in]
[, test_options]

Both, in the recommended order, with the pre-test caveat printed

xtcombreak all depvar [indepvars] [if] [in]
[, options]

The data must be xtset as a balanced panel. depvar and
indepvars may contain time-series operators.

estimate_options

Model
method(ls|qml|gls) estimator of the break date; default method(ls)

breaks(#) number of breaks; default breaks(1)

trimming(#) minimum regime length as a fraction; default trimming(0) = none

Inference
level(#) CI level: 90, 95 or 99 only; default 95

anmethod(het|hom) form of A_N; default anmethod(het)

chow per-series Chow test at the estimated break

Reporting
showindex also report break positions as indices 1..T

graph break-identification and per-series shift plots

profname(name) name for the profile graph

shiftname(name) name for the shift graph

test_options

Model
trimming(#) trimming eps for Lambda(eps); default trimming(0.1)

noconstant suppress the constant in xit

Critical values
simulate simulate critical values and a p-value instead of using the table

reps(#) replications for simulate; default 2000

gridpoints(#) grid points approximating the Brownian motion; default 1000

seed(#) random-number seed for simulate

level(#) level flagged in the output: 10, 5 or 1; default 5

Reporting
showindex also report the break position as an index

graph CUSUM process and shift-direction plots

cusumname(name) name for the CUSUM graph

shiftname(name) name for the shift-direction graph

Description

xtcombreak implements two complementary papers on common breaks
in panel data.

xtcombreak estimate implements
Bai (2010). In a single time series only the break
fraction can be estimated consistently; the break date cannot. Bai's
result is that a panel fixes this: as N grows, P(khat = k0) -> 1, so the exact
date is recovered. This holds even when a regime contains a single
observation, which makes it useful for pinning down the onset of a new regime
quickly. The command estimates the date by least squares, quasi-maximum
likelihood or feasible GLS, reports Bai's parameter-free confidence interval,
and runs his series-by-series Chow test to say which units actually broke.

xtcombreak test implements
Jiang and Kurozumi (2026). Every common-break method,
including Bai's, assumes the break is at the same date for all units. This
is a real restriction and can fail. The command tests that assumption with a
self-normalised CUSUM statistic built from OLS residuals.

The two are complements. estimate gives you the answer;
test tells you whether you were entitled to ask the question that way.

Which command do I want?

Panel break analysis in Stata now spans several commands with different
nulls. They are not substitutes:

Command Question it answers / null

xtbreak test Is there a break at all? How many? Null: no break

xtbreak estimate Where are the breaks (Bai-Perron dynamic programme)?

xtbfkbreak Slopes + breaks with CCE factors, heterogeneous panels

xtcombreak estimate The exact break date, its CI, and which series broke

xtcombreak test Is the break common across units? Null: it is common

xtcombreak test is the only one whose null hypothesis is the
common-break assumption itself.

The four stages -- and the two neither paper provides

A complete panel common-break analysis has four stages. Bai (2010) and
Jiang-Kurozumi (2026) cover only the middle two. Be explicit about this:

Stage 1. Does a break exist at all? NOT provided by either
paper. Bai (2010, p.79) is explicit: "The focus is on the estimation of the
break point given its existence". Jiang-Kurozumi's null is "the break is
common", not "there is a break". Use xtbreak test (or
Horvath-Huskova 2012, De Wachter-Tzavalis 2012, Antoch et al. 2019 -- the
literature Jiang-Kurozumi cite for exactly this stage).

Stage 2. Where is it? xtcombreak estimate (Bai) or, with
regressors and factors, xtbfkbreak / xtbreak_estimate. This is
an estimator, not a test.

Stage 3. Is it common? xtcombreak test (Jiang-Kurozumi).
Post-estimation in mechanics -- it needs khat first -- but a pre-test in
purpose: it licenses stage 4.

Stage 4. Which series broke, and how precise is the date?
xtcombreak estimate, chow and its CI (Bai p.84, eq.13).

xtcombreak all prints this sequence and runs stages 3 and 4.

Remarks and practical guidance

Sample-size regime: T should be large relative to N

Both papers point the same way, which is why they can share a command:

o Bai's eq.(5), N*log(log T)/T -> 0, is required by his
Theorem 3.2, by the limiting distribution behind the confidence interval
(Lemma 4.1), and by the whole QML section ("assume T is larger than N such that
(5) hold", p.84).

o Jiang-Kurozumi's Assumption 2(iii) requires T/N -> infinity --
"a significant condition to ensure a non-degenerate distribution of the statistic
under the null hypothesis and consistency of the test under the alternative".

The one place they diverge is Bai's Remark 3 (p.87): the special mode in
which k0 is unrestricted and a regime may hold a single observation needs
T/N -> 0 instead. That mode is outside his CI framework.

When T < N the command prints a note. Read it carefully: under Bai's
Assumption 2 the point estimate khat stays consistent with no T/N condition
at all, so khat is robust. It is the CI that leans on eq.(5) and degrades.

The pre-test problem

If you run test, fail to reject, and then report estimate's
confidence interval as though the common break were known, that interval is a
pre-test estimator: its true coverage is not the nominal level, because it
is conditional on having passed a screening on the same data. Neither paper
quantifies this distortion. xtcombreak never selects a model for you on
the basis of the test, and prints the caveat in xtcombreak all.

This matters more than usual here, because the test's power failures line
up exactly with the cases where you would lean on a non-rejection hardest --
close breaks, unbalanced groups, and shifts in opposite directions. See
xtcombreak test for the numbers.

Cross-sectional dependence

Both papers assume cross-sectionally independent errors (Bai Assumption 1;
Jiang-Kurozumi Assumption 3(ii)). Both concede it is restrictive; Jiang-Kurozumi
"leave such an extension for our future research". Check with xtcd2 or
xttestpanel csd. If CSD is present, consider xtbfkbreak (CCE) or
xtbreak, csd, and treat these results as indicative.

Trimming

estimate defaults to trimming(0), i.e. Bai's literal search
over k in [1, T-1]. This is deliberate: consistency with a single-observation
regime is the paper's headline claim, and any trimming would forbid it. Most
other break commands trim 15% and cannot reproduce Bai's Fig.2. See
the estimate page for when to depart from
this.

Examples

Setup

. webuse grunfeld, clear

. xtset company year

1. The full recommended sequence

. xtbreak test invest mvalue kstock, hypothesis(1) breaks(1)

(stage 1: is there a break at all?)

. xtcombreak test invest mvalue kstock

(stage 2: is it common across firms?)

. xtcombreak estimate invest, chow

(stages 3-4: the date, its CI, and which firms broke)

2. Estimation, all three estimators

. xtcombreak estimate invest

least squares -- Bai sec.3, the default

. xtcombreak estimate invest, method(qml)

QML -- also picks up breaks in the VARIANCE (Bai sec.5)

. xtcombreak estimate invest, method(gls)

two-step feasible GLS -- asymptotically equivalent to QML (Bai p.85)

3. A tighter confidence interval

. xtcombreak estimate invest, level(90)

. xtcombreak estimate invest, method(qml) level(90)

QML is never less efficient than LS (A_N <= B_N, Bai p.85), so its

interval is never wider. Compare r(AN) and r(BN).

4. Which firms actually broke?

. xtcombreak estimate invest, chow

. matrix C = r(chow)

. matlist C

column 1 = panel id, 2 = chi2(1), 3 = p-value, 4 = sigma_i^2

5. Testing the common-break assumption

. xtcombreak test invest mvalue kstock

critical values from Jiang-Kurozumi Table 1

. xtcombreak test invest mvalue kstock, simulate reps(5000) seed(42)

simulated critical values AND a p-value (the table gives no p-value)

. xtcombreak test invest mvalue kstock, trimming(0.15) simulate

any eps other than 0.1 REQUIRES simulate -- Table 1 is only valid at 0.1

6. Multiple breaks

. xtcombreak estimate invest, breaks(2) showindex

one-at-a-time method (Bai sec.6 / Bai 1997a). Bai derives no CI for

multiple breaks -- the reported interval is for the first break only.

7. Graphs

. xtcombreak estimate invest, method(qml) chow graph

. xtcombreak test invest mvalue kstock, graph

. graph combine xtcb_profile xtcb_shift xtcb_cusum xtcb_dsign

8. Simulated data with a known break (see the ancillary do-file)

. net get xtcombreak

. do xtcombreak_example.do

reproduces Bai's Fig.1/Fig.2/Table 1 and Jiang-Kurozumi's Tables 2/4,

and checks the simulated critical values against their Table 1.

Stored results

See xtcombreak estimate and
xtcombreak test for the full lists.

References

Bai, J. 2010. Common breaks in means and variances for panel data.
Journal of Econometrics 157(1): 78-92.
doi:10.1016/j.jeconom.2009.10.020

Jiang, P., and E. Kurozumi. 2026. A new test for common breaks in
heterogeneous panel data models. Econometrics and Statistics 37: 87-125.
doi:10.1016/j.ecosta.2023.01.005

Bai, J. 1997a. Estimating multiple breaks one at a time.
Econometric Theory 13(3): 315-352.

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

Baltagi, B. H., Q. Feng, and C. Kao. 2016. Estimation of heterogeneous
panels with structural breaks. Journal of Econometrics 191(1): 176-195.

Brown, R. L., J. Durbin, and J. M. Evans. 1975. Techniques for testing the
constancy of regression relationships over time. JRSS B 37(2): 149-192.

Chow, G. C. 1960. Tests of equality between sets of coefficients in two
linear regressions. Econometrica 28(3): 591-605.

Deng, A., and P. Perron. 2008. A non-local perspective on the power
properties of the CUSUM and CUSUM of squares tests for structural change.
Journal of Econometrics 142(1): 212-240.

Ditzen, J., Y. Karavias, and J. Westerlund. 2025. Testing and estimating
structural breaks in time series and panel data in Stata. Stata Journal.

Shao, X., and X. Zhang. 2010. Testing for change points in time series.
JASA 105(491): 1228-1240.

Author

Dr Merwan Roudane

merwanroudane920@gmail.com

github.com/merwanroudane

Bug reports and comments welcome.