coint_eq: Cointegrating equation (long-run level relationship)

View source: R/coint_eq.R

coint_eqR Documentation

Cointegrating equation (long-run level relationship)


Creates the cointegrating equation (long-run level relationship) providing an 'ardl', 'uecm' or 'recm' model.


coint_eq(object, case)

## S3 method for class 'recm'
coint_eq(object, ...)

## Default S3 method:
coint_eq(object, case)



An object of class 'ardl', 'uecm' or 'recm'.


An integer from 1-5 or a character string specifying whether the 'intercept' and/or the 'trend' have to participate in the long-run level relationship (cointegrating equation) (see section 'Cases' below). If the input object is of class 'recm', case is not needed as the model is already under a certain case.


Currently unused argument.


coint_eq returns an numeric vector containing the cointegrating equation.


According to Pesaran et al. (2001), we distinguish the long-run relationship (cointegrating equation) (and thus the bounds-test and the Restricted ECMs) between 5 different cases. These differ in terms of whether the 'intercept' and/or the 'trend' are restricted to participate in the long-run relationship or they are unrestricted and so they participate in the short-run relationship.

Case 1:
  • No intercept and no trend.

  • case inputs: 1 or "n" where "n" stands for none.

Case 2:
  • Restricted intercept and no trend.

  • case inputs: 2 or "rc" where "rc" stands for restricted constant.

Case 3:
  • Unrestricted intercept and no trend.

  • case inputs: 3 or "uc" where "uc" stands for unrestricted constant.

Case 4:
  • Unrestricted intercept and restricted trend.

  • case inputs: 4 or "ucrt" where "ucrt" stands for unrestricted constant and restricted trend.

Case 5:
  • Unrestricted intercept and unrestricted trend.

  • case inputs: 5 or "ucut" where "ucut" stands for unrestricted constant and unrestricted trend.

Note that you can't restrict (or leave unrestricted) a parameter that doesn't exist in the input model. For example, you can't compute recm(object, case=3) if the object is an ARDL (or UECM) model with no intercept. The same way, you can't compute bounds_f_test(object, case=5) if the object is an ARDL (or UECM) model with no linear trend.


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


Kleanthis Natsiopoulos,

See Also

ardl uecm recm bounds_f_test bounds_t_test


library(zoo) # for cbind.zoo()

## Estimate the Cointegrating Equation of an ARDL(3,1,3,2) model -------

# From an ARDL model (under case 2, restricted constant)
ardl_3132 <- ardl(LRM ~ LRY + IBO + IDE, data = denmark, order = c(3,1,3,2))
ce2_ardl <- coint_eq(ardl_3132, case = 2)

# From an UECM (under case 2, restricted constant)
uecm_3132 <- uecm(ardl_3132)
ce2_uecm <- coint_eq(uecm_3132, case = 2)

# From a RECM (under case 2, restricted constant)
# Notice that if a RECM has already been estimated under a certain case,
# the 'coint_eq()' can't be under different case, so no 'case' argument needed.
recm_3132 <- recm(uecm_3132, case = 2)
# The RECM is already under case 2, so the 'case' argument is no needed
ce2_recm <- coint_eq(recm_3132)

identical(ce2_ardl, ce2_uecm, ce2_recm)

## Check for a degenerate level relationship ---------------------------

# The bounds F-test under both cases reject the Null Hypothesis of no level relationship.
bounds_f_test(ardl_3132, case = 2)
bounds_f_test(ardl_3132, case = 3)

# The bounds t-test also rejects the NUll Hypothesis of no level relationship.
bounds_t_test(ardl_3132, case = 3)

# But when the constant enters the long-run equation (case 3)
# this becomes a degenerate relationship.
ce3_ardl <- coint_eq(ardl_3132, case = 3)
den <- cbind.zoo(LRM = denmark[,"LRM"], ce2_ardl, ce3_ardl)

if (requireNamespace("xts", quietly = TRUE)) {
den <- xts(den)
plot(den, legend.loc = "right")
plot(den[,-3], legend.loc = "right")

} else {

plot(den, col = c(1,2,3), screens = 1)
legend("right", lty = 1, legend = colnames(den), col = c(1:3))
plot(den[,-3], col = c(1,2), screens = 1)
legend("top", lty = 1, legend = colnames(den[,-3]), col = c(1:2))


ARDL documentation built on June 29, 2022, 9:05 a.m.