class statsmodels.tsa.vector_ar.vecm.VECM(endog, exog=None, exog_coint=None, dates=None, freq=None, missing='none', k_ar_diff=1, coint_rank=1, deterministic='nc', seasons=0, first_season=0)[source]

Class representing a Vector Error Correction Model (VECM).

A VECM(\(k_{ar}-1\)) has the following form

\[\Delta y_t = \Pi y_{t-1} + \Gamma_1 \Delta y_{t-1} + \ldots + \Gamma_{k_{ar}-1} \Delta y_{t-k_{ar}+1} + u_t\]


\[\Pi = \alpha \beta'\]

as described in chapter 7 of [1].

  • endog (array-like (nobs_tot x neqs)) – 2-d endogenous response variable.
  • exog (ndarray (nobs_tot x neqs) or None) – Deterministic terms outside the cointegration relation.
  • exog_coint (ndarray (nobs_tot x neqs) or None) – Deterministic terms inside the cointegration relation.
  • dates (array-like of datetime, optional) – See statsmodels.tsa.base.tsa_model.TimeSeriesModel for more information.
  • freq (str, optional) – See statsmodels.tsa.base.tsa_model.TimeSeriesModel for more information.
  • missing (str, optional) – See statsmodels.base.model.Model for more information.
  • k_ar_diff (int) – Number of lagged differences in the model. Equals \(k_{ar} - 1\) in the formula above.
  • coint_rank (int) – Cointegration rank, equals the rank of the matrix \(\Pi\) and the number of columns of \(\alpha\) and \(\beta\).
  • deterministic (str {"nc", "co", "ci", "lo", "li"}) –
    • "nc" - no deterministic terms
    • "co" - constant outside the cointegration relation
    • "ci" - constant within the cointegration relation
    • "lo" - linear trend outside the cointegration relation
    • "li" - linear trend within the cointegration relation

    Combinations of these are possible (e.g. "cili" or "colo" for linear trend with intercept). When using a constant term you have to choose whether you want to restrict it to the cointegration relation (i.e. "ci") or leave it unrestricted (i.e. "co"). Don’t use both "ci" and "co". The same applies for "li" and "lo" when using a linear term. See the Notes-section for more information.

  • seasons (int, default: 0) – Number of periods in a seasonal cycle. 0 means no seasons.
  • first_season (int, default: 0) – Season of the first observation.


A VECM(\(k_{ar} - 1\)) with deterministic terms has the form

\[\begin{split}\Delta y_t = \alpha \begin{pmatrix}\beta' & \eta'\end{pmatrix} \begin{pmatrix}y_{t-1}\\D^{co}_{t-1}\end{pmatrix} + \Gamma_1 \Delta y_{t-1} + \dots + \Gamma_{k_{ar}-1} \Delta y_{t-k_{ar}+1} + C D_t + u_t.\end{split}\]

In \(D^{co}_{t-1}\) we have the deterministic terms which are inside the cointegration relation (or restricted to the cointegration relation). \(\eta\) is the corresponding estimator. To pass a deterministic term inside the cointegration relation, we can use the exog_coint argument. For the two special cases of an intercept and a linear trend there exists a simpler way to declare these terms: we can pass "ci" and "li" respectively to the deterministic argument. So for an intercept inside the cointegration relation we can either pass "ci" as deterministic or np.ones(len(data)) as exog_coint if data is passed as the endog argument. This ensures that \(D_{t-1}^{co} = 1\) for all \(t\).

We can also use deterministic terms outside the cointegration relation. These are defined in \(D_t\) in the formula above with the corresponding estimators in the matrix \(C\). We specify such terms by passing them to the exog argument. For an intercept and/or linear trend we again have the possibility to use deterministic alternatively. For an intercept we pass "co" and for a linear trend we pass "lo" where the o stands for outside.

The following table shows the five cases considered in [2]. The last column indicates which string to pass to the deterministic argument for each of these cases.

Case Intercept Slope of the linear trend deterministic
I 0 0 "nc"
II \(- \alpha \beta^T \mu\) 0 "ci"
III \(\neq 0\) 0 "co"
IV \(\neq 0\) \(- \alpha \beta^T \gamma\) "coli"
V \(\neq 0\) \(\neq 0\) "colo"


[1]Lütkepohl, H. 2005. New Introduction to Multiple Time Series Analysis. Springer.
[2]Johansen, S. 1995. Likelihood-Based Inference in Cointegrated * *Vector Autoregressive Models. Oxford University Press.


fit([method]) Estimates the parameters of a VECM.
from_formula(formula, data[, subset, drop_cols]) Create a Model from a formula and dataframe.
hessian(params) The Hessian matrix of the model
information(params) Fisher information matrix of model
initialize() Initialize (possibly re-initialize) a Model instance.
loglike(params) Log-likelihood of model.
predict(params[, exog]) After a model has been fit predict returns the fitted values.
score(params) Score vector of model.


endog_names Names of endogenous variables