{smcl} {* *! xtflucbreak 1.0.0 07aug2026}{...} {vieweralsosee "xtflucbreak" "help xtflucbreak"}{...} {vieweralsosee "xtflucbreak postestimation" "help xtflucbreak_postestimation"}{...} {vieweralsosee "xtbfkbreak" "help xtbfkbreak"}{...} {viewerjumpto "The model" "xtflucbreak_methods##model"}{...} {viewerjumpto "Section 3: no common factors" "xtflucbreak_methods##sec3"}{...} {viewerjumpto "Section 4: common correlated effects" "xtflucbreak_methods##sec4"}{...} {viewerjumpto "Critical values" "xtflucbreak_methods##cv"}{...} {viewerjumpto "The change-point estimator" "xtflucbreak_methods##khat"}{...} {viewerjumpto "Step-to-equation map" "xtflucbreak_methods##map"}{...} {viewerjumpto "Departures from the printed paper" "xtflucbreak_methods##departures"}{...} {viewerjumpto "Implementation choices" "xtflucbreak_methods##choices"}{...} {viewerjumpto "The benchmark tests" "xtflucbreak_methods##bench"}{...} {viewerjumpto "Author" "xtflucbreak_methods##author"}{...} {title:Title} {phang} {bf:xtflucbreak methods} {hline 2} equation-by-equation derivation of the fluctuation test and the exact correspondence with Li, Xiao and Chen (2024) {marker model}{title:The model and the hypotheses} {pstd} The heterogeneous panel regression (LXC eq. 1, p.1185) is {p 12 12 2} y{sub:it} = x{sub:it}'{&beta}{sub:i} + e{sub:it}, {space 4}e{sub:it} = {&gamma}{sub:i}'f{sub:t} + {&epsilon}{sub:it}, {space 4}x{sub:it} = {&Gamma}{sub:i}'f{sub:t} + v{sub:it}, {pstd} with x{sub:it} of dimension K{×}1, f{sub:t} an unobserved m{×}1 factor, and {&beta}{sub:i} = {&beta} + v{sub:{&beta},i}, v{sub:{&beta},i} ~ IID(0, {&Sigma}{sub:{&beta}}) (Assumption 3.3 / 4.7: a random-coefficient model). If the slopes change at an unknown k{sub:0}, {p 12 12 2} y{sub:it} = x{sub:it}'({&beta}{sub:i} + {&delta}{sub:i}{c 183}1{c 123}t > k{sub:0}{c 125}) + e{sub:it}. {pstd} H{sub:0}: {&delta}{sub:i} = 0 for all i. H{sub:A}: {&delta}{sub:i} {&ne} 0 for i {&isin} {&Pi}, with |{&Pi}|/N {&rarr} c {&isin} (0,1]. The last condition is the panel-unit-root convention of Choi (2001) and Im-Pesaran-Shin (2003): the break need not be in every panel, but it must be in a non-vanishing fraction of them. {pstd} {bf:Timing.} The paper's displayed model writes 1{c 123}t {&ge} k{sub:0}{c 125}, but H{sub:A} states {&delta}{sub:i} = 0 for t = 1,...,k{sub:0} and {&delta}{sub:i} {&ne} 0 for t = k{sub:0}+1,...,T, and the post-break design matrix on p.1189 is X{sub:1i}(T) = (0,...,0, x{sub:i,k0+1},...,x{sub:iT})'. The operative convention is therefore 1{c 123}t > k{sub:0}{c 125}: {bf:k{sub:0} is the last pre-break period}. {cmd:r(breakdate)} reports that period and {cmd:r(breakpost)} the first post-break one. The paper's own application is consistent with this reading: on 1996-2020 data it dates the break at 2008 and attributes it to policies enacted after the 2008 crisis. {marker sec3}{title:Section 3: no common correlated effects} {pstd} Set {&gamma}{sub:i} = 0, {&Gamma}{sub:i} = 0. Per-panel OLS on the full sample and on the first k observations (LXC eq. 2 and the display below it, p.1187): {p 12 12 2} {&beta}hat{sub:i} = (X{sub:i}'X{sub:i}){sup:-1}X{sub:i}'Y{sub:i}, {space 6}{&beta}hat{sub:i}(k) = (X{sub:i}(k)'X{sub:i}(k)){sup:-1}X{sub:i}(k)'Y{sub:i}(k). {pstd} With Qhat{sub:i} = X{sub:i}'X{sub:i}/T and sigmahat{sub:i}{sup:2} = (1/T){&Sigma}{sub:t}(ehat{sub:it} - ebar{sub:i}){sup:2} computed from the full-sample residuals, the fluctuation process is {p 12 12 2} S(k) = N{sup:-1/2} {&Sigma}{sub:i} (1/sigmahat{sub:i})(k/{&radic}T){c 183}Qhat{sub:i}{sup:1/2}({&beta}hat{sub:i}(k) - {&beta}hat{sub:i}). {pstd} {bf:Why this is a bridge.} Substituting the OLS formulas, Qhat{sub:i}{sup:1/2}(X{sub:i}(k)'X{sub:i}(k)){sup:-1} {&asymp} (1/k)Qhat{sub:i}{sup:-1/2}, so {p 12 12 2} (k/{&radic}T){c 183}Qhat{sub:i}{sup:1/2}({&beta}hat{sub:i}(k) - {&beta}hat{sub:i}) {&asymp} T{sup:-1/2}Qhat{sub:i}{sup:-1/2}{&Sigma}{sub:t{&le}k}x{sub:it}e{sub:it} - (k/T){c 183}T{sup:-1/2}Qhat{sub:i}{sup:-1/2}{&Sigma}{sub:t{&le}T}x{sub:it}e{sub:it}. {pstd} By the functional CLT of Assumptions 3.1-3.2 the first term is W{sub:i}(s) with s = k/T and the second is sW{sub:i}(1), so the difference is a Brownian bridge B{sub:i}(s). Dividing by sigmahat{sub:i} standardises the variance {&Omega} = E(x{sub:it}x{sub:it}'{&epsilon}{sub:it}{sup:2}) = {&sigma}{sub:i}{sup:2}Q{sub:i} to the identity, so B{sub:i} is a {it:standard} K-dimensional bridge. Averaging over i with the N{sup:-1/2} normalisation and a second CLT across panels (LXC Appendix, p.1205) gives Theorem 3.4: {p 12 12 2} max{sub:1k{sub:0}{c 125}{c 125}, so both the factor and its regime-split copy are removed. Omitting the constant leaves the regime-split factor in the errors. The default therefore includes it, which also makes {cmd:xtflucbreak} and {helpb xtbfkbreak} numerically consistent on the same data. {cmd:nocceconstant} reproduces the literal display. {pstd} {bf:Balanced panels.} S(k) is a sum over i evaluated at a {it:common} k. With unequal T the panels would be evaluated at different points of their own bridges and the aggregation would be meaningless, so unbalanced data is refused rather than silently truncated. {marker bench}{title:The benchmark tests} {pstd} {cmd:compare} implements the three statistics Li, Xiao and Chen benchmark against, from Antoch, Hanousek, Horvath, Huskova and Wang (2018). Let Z{sub:it} = {&Sigma}{sub:v{&le}t}x{sub:iv}x{sub:iv}', ehat{sub:iv} = y{sub:iv} - x{sub:iv}'{&beta}hat{sub:iT}, and s{sub:it} = {&Sigma}{sub:v{&le}t}x{sub:iv}ehat{sub:iv}. {pstd} The general Wald-type process is U{sub:N}(t) = {&Sigma}{sub:i}({&beta}hat{sub:it}-{&beta}hat{sub:iT})'C{sub:it}({&beta}hat{sub:it}-{&beta}hat{sub:iT}). Since Z{sub:it}({&beta}hat{sub:it} - {&beta}hat{sub:iT}) = s{sub:it} exactly, the two weighting matrices used in the paper collapse to score forms: {p 8 12 2} {bf:Wald 1} C{sub:it} = Z{sub:it}Z{sub:it} {space 6}{&rArr} U{sub:N}(t) = {&Sigma}{sub:i} s{sub:it}'s{sub:it} {space 8}(Antoch S1, d = 2) {p 8 12 2} {bf:Wald 2} C{sub:it} = Z{sub:it}Z{sub:iT}{sup:-1}Z{sub:it} {space 2}{&rArr} U{sub:N}(t) = {&Sigma}{sub:i} s{sub:it}'Z{sub:iT}{sup:-1}s{sub:it} {space 2}(Antoch S2, d = 5) {p 8 12 2} {bf:CUSUM} V{sub:N}(t) = {&Sigma}{sub:i}{&Sigma}{sub:s{&le}t}ehat{sub:is}{sup:2} {space 6}(Antoch eq. 2.5) {pstd} Each is centred by its mean under H{sub:0} (Antoch eq. 3.1-3.4), with sigchk{sub:i}{sup:2} = (1/(T-d)){&Sigma}{sub:t}ehat{sub:it}{sup:2} (eq. 3.10) -- note this is a {it:different} variance estimator from LXC's, and each paper's own is used: {p 12 12 2} Ahat{sup:(1)}{sub:N}(t) = {&Sigma}{sub:i}sigchk{sub:i}{sup:2}{c 183}tr(C{sub:it}(Z{sub:it}{sup:-1} - Z{sub:iT}{sup:-1})), {break} Ahat{sup:(2)}{sub:N}(t) = {&Sigma}{sub:i}sigchk{sub:i}{sup:2}{c 183}(t - tr(Z{sub:it}Z{sub:iT}{sup:-1})). {pstd} The reported statistic is max{sub:t}|N{sup:-1/2}(U{sub:N}(t) - Ahat{sub:N}(t))| over d {&le} t {&le} T-d. {pstd} {bf:Wild bootstrap} (Antoch sec. 4.1-4.2). With q{sub:it} the panel-i contribution to the process, put {&phi}{sub:it} = q{sub:it} - N{sup:-1}{&Sigma}{sub:j}q{sub:jt}, draw {&zeta}{sub:i} ~ N(0,1) independently across panels, and form U*{sub:N}(t) = N{sup:-1/2}{&Sigma}{sub:i}{&zeta}{sub:i}{&phi}{sub:it}. The bootstrap statistic is max{sub:t}|U*{sub:N}(t)|; the critical value is its (1-{&alpha}) quantile over B replications. Because the centring is by the cross-sectional mean, the bootstrap reproduces the centred observed process automatically -- Ahat{sub:N}(t) does not enter it. The whole replication is a single matrix product {&Phi}'{&zeta}, so B = 1000 is cheap. {pstd} {bf:Raw data.} The benchmarks are always computed on the untransformed data with an intercept, even when {cmd:cce} is specified for the fluctuation test. That is deliberate: it is the configuration in the paper's Tables 6-9, where the Wald and CUSUM tests are applied to factor-contaminated data because no CCE variant of them exists. Their collapse in power there is the comparison's whole point. {marker author}{title:Author} {pstd} Dr Merwan Roudane{break} merwanroudane920@gmail.com{break} {browse "https://github.com/merwanroudane":github.com/merwanroudane} {title:Also see} {psee} Online: {help xtflucbreak:xtflucbreak}, {help xtflucbreak_postestimation:xtflucbreak postestimation}, {helpb xtbfkbreak}