Skip to content

fqardl

1.1.0Package record

Fourier ARDL Methods: Quantile, Nonlinear, Multi-Threshold & Unit Root Tests

0packages depend
3.1Kdownloads / year
76.2%test coverage
13/13flavors OK

Overview

About

Implementation of ARDL methods for cointegration analysis with structural breaks and asymmetric effects. Includes: (1) Fourier Quantile ARDL (FQARDL), quantile regression with Fourier approximation following the quantile ARDL of Cho, Kim and Shin (2015) doi:10.1016/j.jeconom.2015.05.003; (2) Fourier Nonlinear ARDL (FNARDL), asymmetric cointegration with partial sum decomposition following Shin, Yu and Greenwood-Nimmo (2014) doi:10.1007/978-1-4899-8008-3_9; (3) a deprecated Multi-Threshold NARDL (MTNARDL) function; (4) Fourier unit root tests, ADF and KPSS tests with Fourier terms following Enders and Lee (2012) doi:10.1016/j.econlet.2012.04.081 and Becker, Enders and Lee (2006) doi:10.1111/j.1467-9892.2006.00478.x. Features automatic lag and frequency selection, Wald bounds statistics with the tables of Pesaran, Shin and Smith (2001) doi:10.1002/jae.616 (no verdict with Fourier terms, for which the tables are not valid), recursive bootstrap bounds tests following Bertelli, Vacca and Zoia (2022) doi:10.1016/j.econmod.2022.105987 and McNown, Sam and Goh (2018) doi:10.1080/00036846.2017.1366643, Wald tests for asymmetry, multiplier computation, and visualizations.

Changes in 1.1.0

Breaking changes

  • fqardl(bootstrap = TRUE) / bootstrap_bounds_test() and fnardl(bootstrap = TRUE) / bootstrap_nardl() use a new bootstrap (below). Bootstrap p-values, critical values and decisions change. The decision element of the bootstrap result is now a code ("COINTEGRATION", "NO_COINTEGRATION", "DEGENERATE_1", "DEGENERATE_2", "UNDETERMINED") with the text in label; failed replications are NA and counted in n_valid instead of being dropped. The tau argument of bootstrap_bounds_test() is no longer used. bootstrap_nardl() (internal) has new arguments: the original regressors, their names and the decomposed variables.
  • perform_bounds_test() and the bounds test of fnardl() give no analytical verdict when the regression contains Fourier terms, which is always the case for fqardl() and fnardl(); the decision now reads "No analytical verdict: the PSS bounds are for the model without Fourier terms and are not valid with Fourier terms", followed by "; use the bootstrap (bootstrap = TRUE)" when fqardl() or fnardl() was called without the bootstrap. The per-quantile decision_F and decision_t read "not available (Fourier terms)" and the decision column of bounds_test$summary carries the new text. The F and t statistics are unchanged (see below for the fnardl F statistic); the PSS bounds are still returned, labelled "Bounds for the model without Fourier terms; not valid with Fourier terms", with the new elements bounds_valid and bounds_note. The evidence that the PSS (2001) bounds do not apply with Fourier terms is the Monte Carlo below, not a published result.
  • bootstrap_bounds_test() no longer emits its "indicative only" warning; its arguments case and tau now have the defaults 3 and NULL.
  • The fnardl and mtnardl bounds tests read the PSS table at k equal to the number of level regressors, so cv_5 and t_cv_5 change whenever the old count (all _lag1 terms minus one) differed, and the mtnardl verdict can change with the corrected F and bounds.
  • orig_t of the fnardl bootstrap result keeps its name y_lag1 as in 1.0.6; its value is now the OLS t statistic of the same model.
  • The header printed by print() for mtnardl objects is now "Multi-Threshold NARDL Model (fqardl, deprecated)". plot() on an fqardl mtnardl object now stops with an informative error (method plot.fqardl_mtnardl) instead of dispatching through the inherited class to the plot method of ardlverse, which failed with "argument is of length zero".
  • mtnardl() is deprecated and will be removed in fqardl 2.0.0; use ardlverse::mtnardl(). The first call in a session gives a warning that also states that the conventions differ (p in ardlverse equals p - 1 here; thresholds are a single numeric vector there, a named list here). Its results change: the bounds F statistic is corrected when the selected p or q exceeds 1 (example below), thresholds other than 0 and cases other than 3 give an error, and the object has class c("fqardl_mtnardl", "mtnardl").
  • decompose_multi_threshold() gives an error for thresholds other than 0.

Bootstrap bounds tests (fqardl and fnardl)

  • Up to 1.0.6 each replication regressed a new Gaussian random walk on the fixed observed regressors and Fourier terms (fqardl: quantile regression at the first quantile; fnardl: OLS, t test only, without any warning), and fqardl declared cointegration when the F or the t test rejected. This is not a bootstrap under the null of the estimated model and it was oversized (Monte Carlo below).
  • The pseudo-samples now come from the shared recursive bootstrap engine R/ardl_boot_engine.R (engine version 1.1.0, copied verbatim from the package ardlverse; a test checks its version and checksum). Under each null the restricted conditional ECM and a marginal model for the differenced regressors are estimated by OLS, and y* and x* are generated recursively from resampled, recentred residuals. boot_scheme = "bvz" (default) follows Bertelli, Vacca and Zoia (2022): a separate restricted model for each statistic, marginal VECM, recentring after each draw, initial values from a random block, with the levels of the regressors and partial sums continuing from the block; the x equation has as many lags as the y equation has lagged differences of y (BVZ eq. 19). boot_scheme = "mcnown" applies the Fov null for all statistics (McNown, Sam and Goh 2018, Steps 1-8) to the conditional ECM (package choice; MSG write the y equation in unconditional form): the null of the overall F test generates the samples for all statistics, unrestricted x equation, residuals mean-centred once.
Show all changes in 1.1.0Hide the rest of the changes in 1.1.0
  • The statistics are OLS statistics of the package's own design (build_ardl_design() for fqardl, build_nardl_design() for fnardl): the overall F test on the lagged levels of y and the regressors (Fov), the t ratio on the lagged level of y (t) and the F test on the lagged levels of the regressors (Find). For fnardl the positive and negative partial sums are rebuilt from x* with the package's own decomposition (starting at zero). The Fourier terms are held fixed in the data generating process.
  • The Fourier frequency and the lag orders are re-selected in every replication (a package choice: Bertelli, Vacca and Zoia 2022, step 5(c), re-estimate the unrestricted model on each bootstrap sample but do not discuss re-selection) with the criteria of select_fourier_frequency() and select_optimal_lags() (computed with qr() for speed; a test checks that the choices are identical). The new argument fourier_k of fqardl() and fnardl() fixes the frequency in advance; it is then held fixed in the bootstrap.
  • Decision: AND rule. Cointegration only if Fov, t and Find all reject at 5 percent (bootstrap order-statistic critical values); Fov rejecting without t, and Fov and t rejecting without Find, are reported as the degenerate cases of the first and second type. Cointegration is never declared from a single test (no OR rule).
  • The quantile ARDL of Cho, Kim and Shin (2015) has no bounds test and no bootstrap for the null of no cointegration, so no quantile-specific bootstrap statistic is computed; the quantile Wald bounds statistics of perform_bounds_test() are descriptive.
  • New arguments: fqardl(fourier_k, boot_scheme), fnardl(fourier_k, boot_scheme, seed), bootstrap_bounds_test(reselect, scheme, level, seed). A seed given to the bootstrap functions is used locally and the caller's random number state is restored. fqardl(seed) still calls set.seed() at the start, as before.

Bounds statistics

  • fnardl(): the bounds F statistic tested every coefficient whose name ended in _lag1, so with p > 1 or q > 1 it also tested dy_lag1 and the lagged differences of the regressors. It now tests only the lagged level of y and the lagged levels of the regressors, with k equal to the number of level regressors. With p = q = 1 the value is unchanged. Examples with data set.seed(s); n <- 120; x1 <- cumsum(rnorm(n)); x2 <- cumsum(rnorm(n)); y <- 0.5 * x1 + cumsum(rnorm(n, sd = 0.5)); d <- data.frame(y, x1, x2) and fnardl(y ~ x1 + x2, d, decompose = "x1", max_k = 3, max_p = 3, max_q = 3) (selected p = 2, q = 1): s = 1, F 4.9160 becomes 6.1315; s = 2, 2.2814 becomes 2.8463; s = 42, 6.2361 becomes 7.5356. The bounds test also returns t_cv_5, Find_stat and k.
  • mtnardl(): same correction (defect F1 of the 2026-10-03 audit); with the data above, s = 2, and mtnardl(y ~ x1, d, max_p = 3, max_q = 3) (selected p = 2, q = 1), F 1.5051 becomes 1.9533; k for the PSS table is the number of level regressors (partial sums and undecomposed variables), a package choice pending verification against Shin, Yu and Greenwood-Nimmo (2014) and Pal and Mitra (2016). The decision is the F-based three-way verdict, as before.

mtnardl (deprecated)

  • F2: the multi-threshold decomposition was mathematically wrong. With a nonzero threshold (0 is always added) the regime increments did not sum to the change of the variable (for example, with thresholds -2, 0 and 2 the changes -3, -1, 1, 3 and 0.5 gave regime increments summing to -5, 1, 3, 5 and 2.5; with the single threshold 2 the changes -3 and -1 gave -5 and -3). Thresholds other than 0 now give an informative error in mtnardl() and decompose_multi_threshold(); with threshold 0 (the default) the decomposition is the standard pair of partial sums and results other than the bounds F are unchanged.
  • F3: case was ignored in the bounds test and forced to 3 in the lag selection; cases other than 3 now give an error.
  • The print and summary methods are registered for class "fqardl_mtnardl" only, so they no longer mask the methods of ardlverse for its "mtnardl" objects when both packages are loaded.

Printing

  • summary() of an fnardl object printed the long-run multipliers as NA (the elements of multipliers$long_run_positive and long_run_negative are named <var>.<var>_pos_lag1 and were indexed by <var>). The printout now shows the values; the stored values are unchanged.
  • Author names in the documentation and in the headers printed by the Fourier unit root tests are joined with "and" instead of "&"; the help page of get_pss_critical_values() now describes the function as implemented since 1.0.4.

Monte Carlo (size at the 5 percent level)

y and x independent random walks, n = 100, 200 replications, B = 199, default calls (BIC, max_p = max_q = 4, max_k = 3); rejection rates with their Monte Carlo standard errors sqrt(r(1 - r)/200) in parentheses. Before: fqardl 1.0.6 (audit of 2026-10-03, same data seeds).

| Statistic | 1.0.6 | 1.1.0 |

|---|---|---|

| fqardl bootstrap, Fov | 0.085 (0.020) | 0.065 (0.017) |

| fqardl bootstrap, t | 0.120 (0.023) | 0.100 (0.021) |

| fqardl bootstrap, Find | not computed | 0.075 (0.019) |

| fqardl bootstrap, decision | 0.130 (0.024) (F or t) | 0.035 (0.013) (Fov and t and Find) |

| fnardl bootstrap, Fov | not computed | 0.060 (0.017) |

| fnardl bootstrap, t | 0.170 (0.027) | 0.105 (0.022) |

| fnardl bootstrap, Find | not computed | 0.100 (0.021) |

| fnardl bootstrap, decision | none | 0.030 (0.012) (Fov and t and Find) |

| fqardl analytical decision (Fourier) | 0.100 (0.021) | no verdict |

| fnardl analytical decision (Fourier) | 0.475 (0.035) | no verdict |

The table shows the run with engine 1.1.0. A run with engine 1.0.0 on the same data seeds gave identical fqardl rates and, for fnardl, Fov 0.060 (0.017), t 0.120 (0.023), Find 0.105 (0.022), decision 0.035 (0.013); an independent review run gave for fnardl a decision rate of 0.055 (0.016) and t and Find rates of 0.120 (0.023). Across these runs the combined decisions are close to the nominal level (0.030 to 0.055). The individual t tests and the fnardl Find test remain above 5 percent (0.100 to 0.120) with the frequency and lags re-selected in every replication; read them through the combined decision.

Unchanged

  • QARDL point estimates, quantile standard errors and covariances, long-run and short-run multipliers, the quantile Wald bounds F and t statistics, quantile_wald_test(), the fnardl and mtnardl coefficients, multipliers and asymmetry tests, the fnardl and mtnardl t statistics, the Fourier frequency and lag selection, and the Fourier unit root tests are identical to 1.0.6 (checked on five simulated data sets).

From NEWS.md in the release

Install

Health

CRAN checks
13OK
Slowest check: 2.3 min · r-oldrel-windows-x86_64
Status changes
  • OK13 OK2026-08-05
  • NOTE12 OK, 1 NOTE2026-08-01
  • OK13 OK2026-06-09
  • NOTE12 OK, 1 NOTE2026-06-08
  • OK5 OK2026-03-18
Advisories

none known

Documentation

In release 1.1.0
READMEYes · 640 wordsVignettesNoNEWSYes · 67% structured · mentions 1.1.0Citation fileNoWebsitenot declared in DESCRIPTION
Help pages
57 (26 internal)includes a package overview page
Examples that run
33%2 run in a plain check · 4 only when donttest examples are enabled (R CMD check --as-cran)
Exported functions with examples
16%
Documented parameters
100%
Return-value docs
100%
Help pages citing references
16%

Downloads

3.1K
CRAN downloads in the past year
Rank #9,513 · ~8/day · ~258/mo
Daily download trend is not available in this view yet.
46030 days
1K90 days
3.1K1 year
Compare downloads with other packages →
Also on60 r2u3 autocran

Repository

1Stars
0Forks
1Open issues
0Open PRs
2Releases
12Commits
2Commit identities
12 commits · Last activity 2026-10-03 · 0% stars, 30d
Responsiveness
How these are sampled
PRs merged (all time)
100%
Median days to close, 50 most recently updated closed issues
not measured
Median days to close, 50 most recently updated closed PRs
8

Stars over time

2026-03-18 · 12026-07-07 · 1
PracticesBeta

2 development-tooling and community-health practices detected across 2 families in the upstream repository

Checks run against github.com/muhammedalkhalaf/fqardl on 2026-10-21.

Governance and community (1)

The repository owner accepts GitHub Sponsors

CRAN release process (1)
cran-comments.md
How this is detected·Detection ruleset v4 (2026-10-20)
AI coding toolsBeta

This repository shows signs of AI coding tools.

  • Claude Codefirst seen 2026-09-27
    Commits: at least 5 crediting it in the message
Models named in its commits
  • Claude Opus 5.53 commits · Sep to Oct 2026
  • Claude Fable 5.12 commits · Sep 2026
Counts are commits, not lines of code. Commits by a tool's accounts count once across all of its accounts. Commits crediting it are the largest count among its credit lines, a minimum.How this is detected·Detection ruleset v4 (updated 2026-09-27)

Dependencies

Declared dependencies
9 external dependencies (excludes base and recommended)

Installing fqardl adds 33 packages (17 with compiled code, 30 MB of source tarballs). Heaviest: stringi 11 MB, ggplot2 6.0 MB, isoband 1.5 MB.

Depends (1)
R >= 3.5.0
LinkingTo (0)
none
Enhances (0)
none
Reverse dependencies
0direct
0indirect

Nothing depends on this yet.

Datasets

People & History

People (1)
Author, Maintainer since 1.0.2 (2026), Copyright holder
Listed in earlier versions (1)
no longer listed · 1.0.2 to 1.0.4
Releases (5)

Pick two releases to compare their code metrics.

  • 1.1.0Latest
    record
    2026-10-10 · current release · diff ↗ ·
    6 days in CRAN's queue
    Listed in CRAN's incoming queue from 2026-10-03 21:57 to 2026-10-10 03:36 UTC, in 28 readings.
  • 1.0.6
    record
    2026-09-30 · diff ↗
  • 1.0.5
    record
    2026-09-28 · diff ↗
  • 1.0.4
    record
    2026-08-23 · diff ↗
  • R
    R 4.6.0 released · 2026-04-24
  • 1.0.2
    record
    2026-03-17
  • R
    R 4.5.0 released · 2025-04-11
Across CRAN, the median accepted release of the past year spent 23 hours in the queue, 90% under 11 days.How queue time is measured

Package metadata

First published
2026-03-17
Total releases
5 / 1 yrs
License
GPL-3 OSI
Minimum R
≥ 3.5.0
Bundled data
6.9 KB / 2 files
Download size
94 KB

Cite

Cite this package

Run in R for the authors' preferred citation:

citation("fqardl")
Alkhalaf, M. (2026). fqardl: Fourier ARDL Methods: Quantile, Nonlinear, Multi-Threshold & Unit Root Tests (Version 1.1.0) [Computer software]. https://doi.org/10.32614/CRAN.package.fqardl

This package has no citation file, so citation() returns this entry built from DESCRIPTION.

Cite the R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA

Balamuta, J. J. (2026). R Observatory: Metrics for fqardl version 1.1.0 [Data set]. HJJB, LLC. Data release v2026-10-23. https://doi.org/10.5281/zenodo.21843040

From data release v2026-10-23, which the citation names so these numbers can be found later. More on citing and the projects behind them.

Report a problem with this page →

Privacy choices

These apply to this browser and are stored on this device only. Nothing about your choice is sent to us.

Read the privacy policy