*! version 1.2.0 04mar2026

Title

aardl -- Augmented Autoregressive Distributed Lag Model

Syntax

aardl
depvar
indepvars
[if] [in],
[options]

Model specification
type(string) model type: aardl (default), baardl, faardl, fbaardl, nardl, fanardl, banardl, or fbanardl

decompose(varlist) NARDL: variables to decompose into positive/negative partial sums

maxlag(#) maximum lag order; default 4

maxk(#) maximum Fourier frequency; default 3

ic(string) information criterion: aic or bic (default)

case(#) PSS case: 1, 2, 3 (default), 4, or 5

Bootstrap
reps(#) bootstrap replications; default 999

bootstrap(string) bootstrap method: bvz (default) or mcnown

Reporting
level(#) confidence level; default c(level)

horizon(#) multiplier/persistence horizon; default 20

nodiag suppress diagnostic tests

nodynmult suppress dynamic multipliers

noadvanced suppress advanced analyses

notable suppress regression table

noheader suppress header

nograph suppress graphs

Post-estimation:

aardl_advanced
[, horizon(#) nograph]

You must tsset your data before using aardl; see tsset.

Description

aardl estimates an Augmented Autoregressive Distributed Lag (A-ARDL)
model with cointegration testing following the 3-test framework of
Sam, McNown & Goh (2019). It provides eight model types:

aardl Augmented ARDL (asymptotic)

baardl Bootstrap Augmented ARDL

faardl Fourier Augmented ARDL

fbaardl Fourier Bootstrap Augmented ARDL

nardl Augmented NARDL (asymptotic)

fanardl Fourier Augmented NARDL

banardl Bootstrap Augmented NARDL

fbanardl Fourier Bootstrap Augmented NARDL

Key features include:

1. 3-test cointegration framework (Sam, McNown & Goh, 2019): Tests
joint significance of level variables (F_overall), the error correction
term (t_dependent), and independent level variables (F_independent) to
distinguish cointegration from degenerate cases.

2. Fourier approximation: Low-frequency trigonometric terms capture
smooth structural breaks of unknown form, number, and location
(Enders & Lee, 2012; Yilanci et al., 2020).

3. Bootstrap critical values: Two bootstrap procedures for finite-sample
inference:

McNown, Sam & Goh (2018): Unconditional bootstrap with single
restricted null and residual resampling.

Bertelli, Vacca & Zoia (2022): Conditional bootstrap with three
separate nulls and marginal VECM for independent variables.

4. NARDL: Nonlinear ARDL via partial sum decomposition
(Shin, Yu & Greenwood-Nimmo, 2014).

5. Kripfganz & Schneider (2020) critical values: For asymptotic
models, response surface finite-sample critical values and approximate
p-values via the ardlbounds program.

Methodology

The A-ARDL Model (ECM form)

The ARDL(p, q1, ..., qk) error correction model is:

D.y_t = c + gamma1*sin(2*pi*k*t/T) + gamma2*cos(2*pi*k*t/T)

+ alpha*L.y_t + SUM beta_i*L.x_it

+ SUM(j=1..p) phi_j*L(j).D.y_t + SUM(i,j) theta_ij*L(j).D.x_it + e_t

Three Cointegration Tests (Sam et al. 2019)

F_overall (F_ov): Joint test: alpha = beta_1 = ... = beta_k = 0.
All lagged level variables.

t_dependent (t_DV): t-test on L.depvar: alpha = 0.

F_independent (F_ind): Joint test: beta_1 = ... = beta_k = 0.
Detects degenerate cases.

Cointegration is concluded when all three tests are significant.

NARDL Decomposition

For variables specified in decompose(), positive and negative partial
sums are created: x_pos_t = SUM max(D.x_j, 0) and x_neg_t = SUM min(D.x_j, 0).
Wald tests for long-run and short-run asymmetry are reported.

Options

Model specification

type(string) sets the model type:

type(aardl) (default): Augmented ARDL with PSS bounds test and
Kripfganz & Schneider (2020) critical values.

type(baardl): Bootstrap Augmented ARDL.

type(faardl): Fourier Augmented ARDL with PSS bounds test.

type(fbaardl): Fourier Bootstrap Augmented ARDL.

type(nardl): Augmented NARDL with asymptotic inference (requires decompose()).

type(fanardl): Fourier Augmented NARDL (requires decompose()).

type(banardl): Bootstrap Augmented NARDL (requires decompose()).

type(fbanardl): Fourier Bootstrap Augmented NARDL (requires decompose()).

decompose(varlist) specifies which independent variables to decompose
into positive and negative partial sums for NARDL analysis.

maxlag(#) maximum lag order for ARDL grid search. Default is 4.

maxk(#) maximum Fourier frequency. Default is 3.
The search grid uses increments of 0.1 (k = 0.1, 0.2, ..., maxk).

ic(string) information criterion for lag selection: aic or bic.
Default is bic.

case(#) PSS case number (1-5). Default is 3 (unrestricted intercept,
no deterministic trend).

Bootstrap

reps(#) number of bootstrap replications. Default 999.
Recommendations: 99 for exploratory work; 999 for standard analysis;
1999-4999 for publication.

bootstrap(string) bootstrap method: bvz (Bertelli et al. 2022,
default) or mcnown (McNown et al. 2018).

Reporting

level(#) confidence level for coefficient intervals.
Default is c(level) (usually 95).

horizon(#) maximum horizon for dynamic multipliers and persistence
profile. Default is 20.

nodiag suppresses diagnostic tests (Table 4).

nodynmult suppresses dynamic multipliers (Table 5).

noadvanced suppresses advanced analyses (Table 6).

notable suppresses the ARDL regression table (Table 2).

Output tables

aardl produces up to 6 publication-quality tables:

Table 1: Model Selection Summary (ARDL spec, k*, N, R2, IC)

Table 2: ARDL(p,q1,...,qk) regression, EC representation

ADJ - Speed of Adjustment (L.y)

LR - Long-Run Coefficients (-beta/alpha, delta method)

SR - Short-Run Coefficients (D.x, LD.x, ...)

Table 3: Cointegration Test Results (F_ov, t_DV, F_ind)

Table 4: Diagnostic Tests (JB, BG-LM, ARCH, RESET)

Table 5: Dynamic Multipliers / Asymmetric Dynamic Multipliers

Table 6: Half-Life, Persistence Profile, Equilibrium Relationship

Stored results

aardl stores the following in e():

Scalars

e(N) number of observations

e(p) selected dependent variable lag p

e(kstar) selected Fourier frequency k* (0 if no Fourier)

e(aic) AIC

e(bic) BIC

e(ll) log-likelihood

e(r2) R-squared

e(r2_a) adjusted R-squared

e(rmse) root mean squared error

e(F) overall model F-statistic

e(F_pss) F_overall cointegration test statistic

e(t_pss) t_dependent cointegration test statistic

e(F_ind) F_independent cointegration test statistic

e(case) PSS case number

e(total_models) number of models evaluated in grid search

e(q_varname) selected lag q for each independent variable

e(ecm_coef) error correction (speed of adjustment) coefficient

e(horizon) multiplier/persistence horizon used

Bootstrap only

e(Fov_bp) bootstrap p-value (F_overall)

e(tDV_bp) bootstrap p-value (t_dependent)

e(Find_bp) bootstrap p-value (F_independent)

Macros

e(cmd) "aardl"

e(cmdline) full command line

e(depvar) dependent variable

e(indepvars) independent variable(s)

e(type) model type

e(ic) information criterion used

e(all_indepvars) all independent variables (including decomposed)

e(model) "ec"

e(coint_status) "cointegrated", "not_cointegrated", or "degenerate"

Matrices

e(b) coefficient vector (ADJ/LR/SR equations)

e(V) variance-covariance matrix

Examples

The following examples use the Lutkepohl (1993) dataset, a classic time-series
dataset containing West German macroeconomic quarterly data (1960q1-1982q4).

Setup: Load sample data

. webuse lutkepohl2, clear

. tsset

The dataset contains variables ln_inv (log investment), ln_inc
(log income), and ln_consump (log consumption). We test for
cointegration among these macroeconomic variables.

Example 1: Augmented ARDL (asymptotic)

Basic A-ARDL with asymptotic PSS bounds test and AIC lag selection:

. aardl ln_inv ln_inc ln_consump, type(aardl) maxlag(4) ic(aic) case(3)

Example 2: Bootstrap Augmented ARDL (BVZ method)

Bootstrap critical values using the Bertelli, Vacca & Zoia (2022) method:

. aardl ln_inv ln_inc ln_consump, type(baardl) maxlag(4) reps(999) bootstrap(bvz)

Example 3: Fourier Augmented ARDL

Fourier terms capture structural breaks; k* selected by minimum SSR:

. aardl ln_inv ln_inc ln_consump, type(faardl) maxlag(4) maxk(3) ic(aic)

Example 4: Fourier Bootstrap Augmented ARDL

Combines Fourier approximation with bootstrap inference:

. aardl ln_inv ln_inc ln_consump, type(fbaardl) maxlag(3) maxk(3) reps(999)

Example 5: Augmented NARDL (asymptotic)

Asymptotic NARDL with PSS bounds tests and Kripfganz & Schneider critical values:

. aardl ln_inv ln_inc ln_consump, type(nardl) decompose(ln_consump) maxlag(4) ic(aic) case(3)

Example 6: Fourier Augmented NARDL

Fourier terms + NARDL with asymptotic inference:

. aardl ln_inv ln_inc ln_consump, type(fanardl) decompose(ln_consump) maxlag(3) maxk(3) ic(aic)

Example 7: Bootstrap Augmented NARDL

Decompose ln_consump into positive/negative partial sums to test
for asymmetric effects:

. aardl ln_inv ln_inc ln_consump, type(banardl) decompose(ln_consump) maxlag(3) reps(999)

Example 8: Fourier Bootstrap Augmented NARDL (full model)

Combines Fourier + Bootstrap + NARDL:

. aardl ln_inv ln_inc ln_consump, type(fbanardl) decompose(ln_consump) maxlag(3) maxk(3) reps(999)

Example 9: McNown bootstrap method

. aardl ln_inv ln_inc ln_consump, type(baardl) maxlag(4) reps(999) bootstrap(mcnown)

Example 10: Minimal output

Suppress diagnostics, multipliers, and advanced analysis:

. aardl ln_inv ln_inc ln_consump, type(aardl) maxlag(4) nodiag nodynmult noadvanced

Example 11: Access stored results

. aardl ln_inv ln_inc ln_consump, type(baardl) reps(999)

. di e(F_pss) // F_overall statistic

. di e(t_pss) // t_dependent statistic

. di e(F_ind) // F_independent statistic

. di e(coint_status) // Cointegration conclusion

. ereturn list // All stored results

Example 12: Post-estimation advanced analysis

Run aardl with noadvanced, then use aardl_advanced separately:

. aardl ln_inv ln_inc ln_consump, type(aardl) maxlag(4) ic(aic) case(3) noadvanced

. aardl_advanced

Override the horizon:

. aardl_advanced, horizon(30)

References

Bertelli, S., Vacca, G. & Zoia, M. (2022). Bootstrap cointegration tests in
ARDL models. Economic Modelling, 116, 105987.

Enders, W. & Lee, J. (2012). The flexible Fourier form and Dickey-Fuller type
unit root tests. Economics Letters, 117(1), 196-199.

Kripfganz, S. & Schneider, D.C. (2020). Response surface regressions for
critical value bounds and approximate p-values in equilibrium correction models.
Oxford Bulletin of Economics and Statistics, 82, 1456-1481.

Lutkepohl, H. (1993). Introduction to Multiple Time Series Analysis.
2nd ed. Berlin: Springer-Verlag.

McNown, R., Sam, C.Y. & Goh, S.K. (2018). Bootstrapping the autoregressive
distributed lag test for cointegration. Applied Economics, 50(13), 1509-1521.

Pesaran, M.H., Shin, Y. & Smith, R.J. (2001). Bounds testing approaches to
the analysis of level relationships. Journal of Applied Econometrics,
16(3), 289-326.

Sam, C.Y., McNown, R. & Goh, S.K. (2019). An augmented autoregressive
distributed lag bounds test for cointegration. Economic Modelling, 80, 130-141.

Shin, Y., Yu, B. & Greenwood-Nimmo, M. (2014). Modelling asymmetric
cointegration and dynamic multipliers in a nonlinear ARDL framework.
In R. Sickles & W. Horrace (Eds.), Festschrift in Honor of Peter Schmidt.
New York: Springer.

Yilanci, V., Bozoklu, S. & Gorus, M.S. (2020). Are BRICS countries pollution
havens? Evidence from a bootstrap ARDL bounds testing approach with a Fourier
function. Sustainable Cities and Society, 55, 102035.

Author

Dr. Merwan Roudane

Independent Researcher

Email: merwanroudane920@gmail.com

Post-estimation

aardl_advanced runs the advanced analysis as a separate post-estimation
command after aardl. It includes dynamic multipliers, half-life analysis,
persistence profile, Fourier significance test, and long-run equilibrium.

Syntax

aardl_advanced
[, horizon(#) nograph]

Options

horizon(#) overrides the horizon from the original aardl estimation.
Default uses the value from the prior estimation (typically 20).

nograph suppresses all graphs (dynamic multipliers, persistence profile).

Description

The advanced analysis includes:

Dynamic Multipliers: For linear ARDL models, displays impact and
cumulative dynamic multipliers for each independent variable. For NARDL models,
displays asymmetric dynamic multipliers (positive and negative paths) following
Shin, Yu & Greenwood-Nimmo (2014).

Half-Life Analysis: Computes the half-life of shocks based on the
ECM coefficient: t_half = -ln(2) / ln(1 + alpha).

Persistence Profile: Shows how shocks dissipate over the specified
horizon, with persistence = (1 + alpha)^h.

Fourier Significance Test: For Fourier models (faardl, fbaardl,
fanardl, fbanardl), reports the joint Wald F-test for the sine and cosine terms
with p-value.

Long-Run Equilibrium: Displays the long-run equilibrium relationship
derived from the estimated coefficients.

Usage

The advanced analysis runs automatically when cointegration is found (unless
suppressed with noadvanced). Use aardl_advanced to:

1. Re-run the analysis with a different horizon

2. Run it after suppressing it with noadvanced

3. Re-display the results without re-running the full estimation

Example

. aardl ln_inv ln_inc ln_consump, type(aardl) maxlag(4) noadvanced

. aardl_advanced

. aardl_advanced, horizon(30) nograph