*! version 1.0.0 21feb2026

Title

fbardl -- Fourier Bootstrap Autoregressive Distributed Lag Model

Syntax

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

Model specification
type(string) model type: fardl (default), fbardl_mcnown, or fbardl_bvz

maxlag(#) maximum lag order for grid search; default 4

maxk(#) maximum Fourier frequency; default 5

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

nofourier pure ARDL without Fourier terms

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

Bootstrap
reps(#) bootstrap replications; default 999

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

horizon(#) multiplier/persistence horizon; default 20

nodiag suppress diagnostics

nodynmult suppress dynamic multipliers and graphs

noadvanced suppress advanced analyses

notable suppress regression table

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

Description

fbardl estimates a Fourier Autoregressive Distributed Lag (FARDL)
model and performs cointegration testing. It combines three advances:

1. Fourier approximation: Low-frequency trigonometric terms capture smooth
structural breaks of unknown form, number, and location.

2. Bootstrap cointegration testing: Two bootstrap procedures compute
finite-sample critical values:

McNown, Sam & Goh (2018): Unconditional bootstrap — single restricted
null, residual resampling, three test statistics (F_overall, t_dependent,
F_independent).

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

3. Kripfganz & Schneider (2020) critical values:
For the non-bootstrap case (type(fardl)), the command uses
response surface regressions from the ardlbounds program to
compute exact finite-sample critical values and approximate p-values.
These are based on ~95 billion simulated F-statistics and ~57 billion
t-statistics. If ardlbounds is not installed, PSS (2001) asymptotic
critical values are used as fallback.

Methodology

The FARDL 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

where D. denotes the first difference operator, L. denotes the lag operator,
L(j).D. denotes the j-th lag of the first difference, and the Fourier terms
sin(2*pi*k*t/T) and cos(2*pi*k*t/T) capture smooth structural breaks.

Time-Series Operator Notation

This command uses Stata's standard time-series operators:

L.y = y_ (lagged level)

D.y = y_t - y_ (first difference)

L1.D.y = D.y_ (first lag of the first difference)

L2.D.y = D.y_ (second lag of the first difference)

Two-Step Model Selection (Yilanci et al. 2020)

Step 1 -- Select k* by minimum SSR:
For each k in {0.1, 0.2, ..., maxk}, a maximal ARDL model
is estimated and the SSR recorded. The k with the lowest SSR is selected as k*.

Step 2 -- Select lags (p,q) by AIC/BIC with k* fixed:
Exhaustive grid search over all lag combinations. The model with the
minimum information criterion value is selected.

Cointegration Test Statistics

Three test statistics following McNown, Sam & Goh (2018):

F_overall (F_ov): Joint test: alpha = beta_1 = ... = beta_k = 0.
Uses 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.
Tests for degenerate cases.

Critical Values

type(fardl): Uses Kripfganz & Schneider (2020) response surface
regressions via the ardlbounds program. Provides finite-sample-adjusted
I(0) and I(1) critical value bounds and approximate p-values at each
significance level. Falls back to PSS (2001) asymptotic tables if
ardlbounds is not installed. Install via:
net install ardl, from(http://www.kripfganz.de/stata/).

type(fbardl_mcnown): McNown et al. (2018) unconditional bootstrap.
Restricted null on all level terms, residual resampling, recursive data
generation, bootstrap distributions for all three statistics.

type(fbardl_bvz): Bertelli et al. (2022) conditional bootstrap.
Three separate nulls (F_ov, t_DV, F_ind), marginal VECM for independent
variables, joint resampling of ARDL and VECM residuals.

Degenerate Case Detection

Following McNown et al. (2018), degenerate cases are detected when:

Degenerate #1: F_ov and F_ind significant, t_DV not. Indicates y may be
I(0) rather than cointegrated with x variables.

Degenerate #2: F_ov and t_DV significant, F_ind not. Indicates x variables
do not enter the error correction mechanism.

Options

Model specification

type(string) sets the cointegration test type:

type(fardl) (default): Fourier ARDL with PSS bounds test. Uses
Kripfganz & Schneider (2020) finite-sample critical values and approximate
p-values from the ardlbounds program.

type(fbardl_mcnown): McNown, Sam & Goh (2018) unconditional
bootstrap procedure.

type(fbardl_bvz): Bertelli, Vacca & Zoia (2022) conditional
bootstrap procedure.

maxlag(#) maximum lag order p and q for grid search. Default is 4.

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

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

nofourier estimates pure ARDL without Fourier terms. Useful as a
comparison benchmark.

case(#) PSS case number (2-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.

Reporting

level(#) confidence level for long-run multiplier CIs.
Default is c(level) (usually 95).

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

Output tables

fbardl produces up to 8 publication-quality tables:

Table 1: Model Selection Summary (ARDL spec, k*, N, R2, AIC/BIC)

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

ADJ — Speed of Adjustment (L.y)

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

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

Fourier Terms & Deterministics

Table 3: Cointegration Test Results (F_ov, t_DV, F_ind with CVs/p-values)

Table 4: Diagnostic Tests (normality, serial correlation, heteroskedasticity, RESET, CUSUM)

Table 5: Dynamic Multipliers (by horizon)

Table 6: Half-Life & Persistence Profile (mean adj. lag, 90%/99% adjustment)

Table 7: Fourier Terms Joint Significance F-test

Table 8: Long-Run Equilibrium Relationship

Graphs

All graphs use publication-quality styling (white background, modern colors,
labeled axes):

kstar_selection: SSR vs k* frequency selection scatter

dynmult_varname: Dynamic multiplier area chart (per variable)

cummult_varname: Cumulative multiplier with LR target line

persistence_profile: Pesaran & Shin (1996) persistence profile

Stored results

fbardl stores the following in e():

Scalars

e(N) number of observations

e(best_p) selected lag p

e(best_kstar) selected Fourier frequency k*

e(aic) AIC

e(bic) BIC

e(ll) log-likelihood

e(r2) R-squared

e(r2_a) adjusted R-squared

e(Fov) F_overall statistic

e(t_dep) t_dependent statistic

e(Find) F_independent statistic

e(ecm_coef) ECM coefficient (alpha)

Bootstrap only (fbardl_mcnown / fbardl_bvz)

e(Fov_pval) bootstrap p-value (F_overall)

e(t_pval) bootstrap p-value (t_dependent)

e(Find_pval) bootstrap p-value (F_independent)

e(Fov_cv05) bootstrap 5% critical value (F_overall)

e(t_cv05) bootstrap 5% critical value (t_dependent)

e(Find_cv05) bootstrap 5% critical value (F_independent)

e(reps) number of bootstrap replications

PSS only (fardl)- Kripfganz & Schneider (2020)

e(Fov_pval_I0) approximate p-value under I(0) (F_overall)

e(Fov_pval_I1) approximate p-value under I(1) (F_overall)

e(t_pval_I0) approximate p-value under I(0) (t_dependent)

e(t_pval_I1) approximate p-value under I(1) (t_dependent)

e(F_I0_05) 5% I(0) critical value (F-test)

e(F_I1_05) 5% I(1) critical value (F-test)

e(t_I0_05) 5% I(0) critical value (t-test)

e(t_I1_05) 5% I(1) critical value (t-test)

Macros

e(cmd) "fbardl"

e(depvar) dependent variable

e(indepvars) independent variable(s)

e(type) model type

e(ic) information criterion used

Examples

Example 1: Fourier ARDL with PSS bounds test

. fbardl y x1 x2, type(fardl) maxlag(4) maxk(3) ic(aic)

Example 2: Fourier Bootstrap ARDL — McNown et al. (2018)

. fbardl y x1 x2, type(fbardl_mcnown) maxlag(3) maxk(2) reps(999)

Example 3: Fourier Bootstrap ARDL — Bertelli et al. (2022)

. fbardl y x1 x2, type(fbardl_bvz) maxlag(3) maxk(2) reps(999)

Example 4: Pure ARDL (no Fourier terms)

. fbardl y x1, nofourier maxlag(4) ic(bic)

Example 5: Minimal output

. fbardl y x1 x2, nodiag nodynmult noadvanced maxlag(2)

Example 6: Access stored results

. fbardl y x1 x2, type(fbardl_mcnown) reps(999)

. di e(Fov) // F_overall statistic

. di e(Fov_pval) // Bootstrap p-value

. di e(best_kstar) // Optimal Fourier frequency

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.

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. (1996). Cointegration and speed of convergence to
equilibrium. Journal of Econometrics, 71(1-2), 117-143.

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.

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