*! version 1.0.0 06jun2026

Title

xtcipsm -- Modified CADF / CIPS panel unit-root test with standard
chi-squared and normal limiting distributions (Westerlund & Hosseinkouchack, 2016)

Syntax

xtcipsm varname [if] [in] [, options]

Model
model(none|constant|trend) deterministic term; default constant

maxlags(#) maximum augmentation lags; default maxlags(4)

ic(#) lag-selection criterion: 1=AIC, 2=SIC, 3=t-stat; default ic(3)

Reporting & graph
graph plot per-unit CADF and M-CADF against their critical values

noprintind suppress the table of individual statistics

graph_options any options passed to graph combine

The data must be xtset and the panel must be balanced.
xtcipsm is part of the xtpdlib library.

Description

xtcipsm implements the modified cross-sectionally augmented Dickey-Fuller
(M-CADF) and modified CIPS panel unit-root statistics of
Westerlund and Hosseinkouchack (2016). Cross-section dependence
is handled by augmenting the ADF regression with the cross-sectional averages of the
levels and first differences, as in Pesaran (2007).

The novelty of the modified test is its standard limiting distribution: the
individual statistic D = LM - CADF^2 is asymptotically chi-squared with
q degrees of freedom (q=2 for the constant model, q=3 for the trend
model), and the standardized panel statistic Dp (the modified CIPS) is
asymptotically N(0,1). This avoids the non-standard, tabulated distributions and
the truncation needed for the original CIPS.

The null hypothesis is a unit root in every unit. xtcipsm reports the
modified statistics together with the standard Pesaran CIPS (computed from the same
regression as a by-product and benchmarked against Pesaran's 2007 tables).

This command is a Stata translation of the GAUSS routine pd_cips (proc cips)
from S. Nazlioglu's TSPDLIB.

Relation to other commands. The standard single-series Pesaran CADF/CIPS test
is provided by pescadf (P. Lewandowski) and the panel CIPS by xtcips
(M. Sangiacomo). xtcipsm adds the modified version with standard
distributions; the CADF column is reported only because the modified statistic is built
from it.

Options

model(none|constant|trend) sets the deterministic component of the CADF
regression. The modified statistic and its chi-squared/normal distributions are defined
for constant (q=2) and trend (q=3). With none only the
standard CIPS is reported.

maxlags(#) sets the maximum number of augmentation lags considered.

ic(#) chooses the lag-length criterion: 1 = Akaike, 2 = Schwarz,
3 = t-statistic general-to-specific (default, as in the GAUSS code).

graph draws a two-panel figure: individual CADF statistics against the
Pesaran 5% critical value and the CIPS average, and individual M-CADF statistics against
the chi-squared 5% critical value.

noprintind prints only the panel statistics.

Method

For each unit i, after selecting p lags, the CADF regression is

D.y = a_i + b_i * L.y + c_i * L.ybar + d_i * D.ybar + (lags) + e

where ybar are the cross-sectional averages. CADF_i is the t-statistic for
b_i = 0; LM_i is the Lagrange-multiplier statistic for the same restriction;
and the modified statistic is D_i = LM_i - CADF_i^2 ~ chi2(q). The panel statistics
are

CIPS = mean_i CADF_i

M-CIPS (Dp) = sqrt(N) * (mean_i D_i - q) / sqrt(2q) ~ N(0,1).

The reported M-CIPS p-value is the lower-tail normal probability, matching the GAUSS
implementation.

Interpretation

Null hypothesis. For all panel statistics here H0 is a unit root in every unit.
Rejection (large negative statistics) is evidence of stationarity in at least some units.

Modified CIPS (Dp). This is the headline statistic. It is N(0,1) under the null and
xtcipsm reports the lower-tail p-value Phi(Dp) (matching the GAUSS implementation),
so:

- p-value < 0.05 => reject the unit-root null at 5% (panel contains
stationary units).

- p-value >= 0.05 => cannot reject the unit-root null.

Standard CIPS. Reported as a by-product and compared with the Pesaran (2007) tables
shown on the same line: reject H0 when CIPS < critical value (the critical values
are negative; "smaller" means more negative). The modified test is preferred for
inference because its distribution is standard and free of the truncation/nuisance issues
of CIPS, but agreement between the two is reassuring.

Individual statistics. CADF_i is each unit's cross-sectionally augmented DF
t-statistic (more negative = more evidence against a unit root). M-CADF_i (= D_i)
is chi-squared(q) under the null, so compare it with the printed chi-squared critical
values, or read its p-val column (upper tail): p-val < 0.05 rejects the
unit root for that unit. The lags column shows the augmentation order selected.

Why M-CADF can be negative. D = LM - CADF^2 is only asymptotically chi-squared;
in finite samples it can be negative for strongly stationary units. The reported per-unit
p-value uses |D|; treat clearly negative D as strong rejection.

Cautions

o Balanced panel only, declared with xtset.

o Model choice. The modified statistics (chi-squared / N(0,1)) are defined for
model(constant) (q=2) and model(trend) (q=3). With model(none) only the
standard CIPS is produced. Choose trend if the series display deterministic trends.

o Lag length. Too few lags leaves residual serial correlation (size
distortion); too many wastes power. The default ic(3) (t-stat general-to-specific)
follows the GAUSS code; AIC tends to pick longer, SIC shorter lags. Keep maxlags()
modest relative to T.

o Need enough T. Each CADF regression loses p+1 observations and the
cross-section averages must be informative; very short T gives unreliable individual
statistics.

o Cross-section dependence is assumed and handled through the cross-sectional
averages (a single common factor). If dependence is driven by multiple strong factors,
consider a multi-factor approach in addition.

o Relation to existing commands. Standard Pesaran CADF/CIPS are available in
pescadf and xtcips; xtcipsm adds the modified version and shows
CADF/CIPS only for comparison.

Examples

Setup

. webuse grunfeld, clear

. xtset company year

Constant model, lags by t-stat (default)

. xtcipsm invest, model(constant)

Trend model, SIC lag selection, maximum 3 lags

. xtcipsm invest, model(trend) ic(2) maxlags(3)

With the two-panel CADF / M-CADF diagnostic graph

. xtcipsm invest, model(constant) maxlags(3) graph

Suppress the per-unit table, show only panel statistics

. xtcipsm invest, model(constant) noprintind

Use the stored results

. xtcipsm invest, model(constant)

. display "CIPS = " r(cips) " M-CIPS = " r(mcips) " p = " r(mpval)

. matrix list r(results)

Test the first difference if the level is found non-stationary

. gen dinvest = D.invest

. xtcipsm dinvest, model(constant)

Stored results

xtcipsm stores the following in r():

Scalars

r(cips) standard CIPS statistic

r(mcips) modified CIPS (Dp) statistic

r(mpval) lower-tail p-value of Dp

r(mdbar) average of individual D statistics

r(cv10), r(cv5), r(cv1) Pesaran CIPS critical values

r(N), r(T) panel dimensions

r(model) deterministic model code (0/1/2)

Matrices

r(results) N x 6: id, CADF, LM, M-CADF, p-value, lags

Macros

r(cmd) xtcipsm

References

Pesaran, M. H. 2007. A simple panel unit root test in the presence of
cross-section dependence. Journal of Applied Econometrics 22: 265-312.

Westerlund, J., and M. Hosseinkouchack. 2016. Modified CADF and CIPS panel unit
root statistics with standard chi-squared and normal limiting distributions.
Oxford Bulletin of Economics and Statistics 78(3): 347-364.

Author

Stata implementation:

Dr Merwan Roudane

merwanroudane920@gmail.com

github.com/merwanroudane

Original GAUSS code (TSPDLIB, proc cips):

Saban Nazlioglu, Pamukkale University, snazlioglu@pau.edu.tr

See also:

xtpdlib, xtfpss, xtpgc