The null is a unit root with no break. The alternative is a trend-stationary process whose intercept, trend, or both shift at a single break date \(T_B\) that is not known in advance but chosen by the data. The regression run at each candidate break is, in levels, $$y_t = \mu + \alpha y_{t-1} + \beta t + \theta DU_t(T_B) + \gamma DT_t(T_B) + \sum_{j=1}^{k} c_j \Delta y_{t-j} + e_t,$$ with break dummies \(DU_t(T_B) = 1\) for \(t > T_B\) and 0 otherwise (intercept shift), and \(DT_t(T_B) = t - T_B\) for \(t > T_B\) and 0 otherwise (trend shift).
Value
Named list with statistic, break_point,
model, lags, cval_1pct, cval_5pct,
cval_10pct, tstats, n, method.
Details
model = "intercept" includes \(DU\) only (Zivot & Andrews
model A), "trend" includes \(DT\) only (model B), and
"both" includes both (model C). The statistic is the minimum
over candidate break dates of the t-ratio for \(\alpha = 1\),
\(t_\alpha(T_B) = (\hat\alpha(T_B) - 1)/se(\hat\alpha(T_B))\), and
the reported break point attains that minimum. Because \(T_B\) is
chosen to minimise the statistic the null distribution is not the
Dickey–Fuller one, hence the tabulated critical values.
Candidate break dates run over \(1, \ldots, n-1\) without trimming,
matching urca::ur.za. Candidates whose design is rank deficient
(which happens near the ends of the sample, where a dummy is almost
constant) are skipped rather than allowed to produce a spurious
minimum.
The regression layout, the untrimmed break search and the critical
values follow urca::ur.za (urca 1.3-4, R/ur-za.R), the
reference implementation of this test in R. Both arms were checked
against it and agree to twelve decimal places.
Mirrors morie.fn.zaurts on the Python side.
