makicoint implements the Maki (2012) residual-based test
for cointegration that allows for an unknown number of
structural breaks. It extends the Gregory-Hansen (one break)
and Hatemi-J (two breaks) tests to any feasible number of breaks. The
null hypothesis is no cointegration; the alternative is
cointegration with up to m breaks.
Breaks are placed one at a time by a sequential Bai-Perron procedure. At each candidate break the cointegrating regression is fitted and its residual is tested with an augmented Dickey-Fuller (ADF) regression. The test statistic is the minimum ADF t-statistic over all candidates and all steps; reject the null when it falls below the critical value.
Four deterministic models are available: level shift
(model = 0), level shift with trend (1),
regime shift (2), and regime shift with trend
(3).
set.seed(123)
n <- 100
x <- cumsum(rnorm(n))
y <- 0.5 * x + cumsum(rnorm(n))
y[51:100] <- y[51:100] + 2 # a level break at observation 50
res <- coint_maki(cbind(y, x), m = 1, model = 0)
res
#>
#> Maki (2012) Cointegration Test with Multiple Structural Breaks
#> --------------------------------------------------------------
#> Model : Level Shift (model = 0)
#> Engine : GAUSS/tspdlib-compatible
#> Observations : 100 Regressors: 1 Trimming: 0.10
#> Lag rule : tsig (max 12, used 3)
#> Dependent : y Regressor(s): x
#> --------------------------------------------------------------
#> Test statistic : -3.1616
#> Critical values: 1% = -5.709 5% = -4.602 10% = -4.354 [table]
#>
#> Estimated breaks (obs : fraction):
#> break 1 : 34 : 0.3400
#> --------------------------------------------------------------
#> Fail to reject H0: no evidence of cointegration.The break is detected near observation 50 and, if the series are cointegrated with that break, the statistic falls below the critical value.
The break dates can be chosen two ways; both give
the same test statistic. The default reproduces the original
‘GAUSS’/‘tspdlib’ implementation. With engine = "paper",
each break minimises the cointegrating-regression sum of squared
residuals, the rule in Maki (2012, Steps 2 and 4).
g <- coint_maki(cbind(y, x), m = 2, model = 2) # default (GAUSS)
p <- coint_maki(cbind(y, x), m = 2, model = 2, engine = "paper")
c(gauss = g$statistic, paper = p$statistic)
#> gauss paper
#> -3.621283 -4.386842
rbind(gauss = g$breakpoints, paper = p$breakpoints)
#> [,1] [,2]
#> gauss 34 63
#> paper 19 63cv_coint_maki() returns the Maki (2012) Table 1 values,
which depend on the number of regressors (1-4), the number of breaks
(1-5) and the model.
Maki’s Table 1 stops at five breaks (his footnote 5 notes more are
possible). makicoint estimates the statistic and breaks for
any feasible number, and for more than five it can simulate the critical
values by Maki’s own Monte-Carlo design. The simulation reruns the whole
search every replication, so it is heavy; use a few thousand
replications for reported work.
Maki, D. (2012). Tests for cointegration allowing for an unknown number of breaks. Economic Modelling, 29, 2011-2015. https://doi.org/10.1016/j.econmod.2012.04.022