# Constants and ARIMA models in R

**This post is from my new book Forecasting: principles and practice, available freely online at OTexts.org/fpp/.**

A non-seasonal ARIMA model can be written as \begin{equation}\label{eq:c} (1-\phi_1B - \cdots - \phi_p B^p)(1-B)^d y_t = c + (1 + \theta_1 B + \cdots + \theta_q B^q)e_t \end{equation} or equivalently as \begin{equation}\label{eq:mu} (1-\phi_1B - \cdots - \phi_p B^p)(1-B)^d (y_t - \mu t^d/d!) = (1 + \theta_1 B + \cdots + \theta_q B^q)e_t, \end{equation} where B is the backshift operator, c = \mu(1-\phi_1 - \cdots - \phi_p ) and \mu is the mean of (1-B)^d y_t. R uses the parametrization of the second equation.

Thus, the inclusion of a constant in a non-stationary ARIMA model is equivalent to inducing a polynomial trend of order d in the forecast function. (If the constant is omitted, the forecast function includes a polynomial trend of order d-1.) When d=0, we have the special case that \mu is the mean of y_t.

### Including constants in ARIMA models using R

#### arima()

By default, the `arima()`

command in R sets c=\mu=0 when d>0 and provides an estimate of \mu when d=0. The parameter \mu is called the “intercept” in the R output. It will be close to the sample mean of the time series, but usually not identical to it as the sample mean is not the maximum likelihood estimate when p+q>0.

The `arima()`

command has an argument `include.mean`

which only has an effect when d=0 and is `TRUE`

by default. Setting `include.mean=FALSE`

will force \mu=0.

#### Arima()

The `Arima()`

command from the forecast package provides more flexibility on the inclusion of a constant. It has an argument `include.mean`

which has identical functionality to the corresponding argument for `arima()`

. It also has an argument `include.drift`

which allows \mu\ne0 when d=1. For d>1, no constant is allowed as a quadratic or higher order trend is particularly dangerous when forecasting. The parameter \mu is called the “drift” in the R output when d=1.

There is also an argument `include.constant`

which, if `TRUE`

, will set `include.mean=TRUE`

if d=0 and `include.drift=TRUE`

when d=1. If `include.constant=FALSE`

, both `include.mean`

and `include.drift`

will be set to `FALSE`

. If `include.constant`

is used, the values of `include.mean=TRUE`

and `include.drift=TRUE`

are ignored.

When d=0 and `include.drift=TRUE`

, the fitted model from `Arima()`

is (1-\phi_1B - \cdots - \phi_p B^p) (y_t - a - bt) = (1 + \theta_1 B + \cdots + \theta_q B^q)e_t.
In this case, the R output will label a as the “intercept” and b as the “drift” coefficient.

#### auto.arima()

The `auto.arima()`

function automates the inclusion of a constant. By default, for d=0 or d=1, a constant will be included if it improves the AIC value; for d>1 the constant is always omitted. If `allowdrift=FALSE`

is specified, then the constant is only allowed when d=0.

### Eventual forecast functions

The eventual forecast function (EFF) is the limit of \hat{y}_{t+h|t} as a function of the forecast horizon h as h\rightarrow\infty.

The constant c has an important effect on the long-term forecasts obtained from these models.

If c=0 and d=0, the EFF will go to zero.

If c=0 and d=1, the EFF will go to a non-zero constant determined by the last few observations.

If c=0 and d=2, the EFF will follow a straight line with intercept and slope determined by the last few observations.

If c\ne0 and d=0, the EFF will go to the mean of the data.

If c\ne0 and d=1, the EFF will follow a straight line with slope equal to the mean of the differenced data.

If c\ne0 and d=2, the EFF will follow a quadratic trend.

### Seasonal ARIMA models

If a seasonal model is used, all of the above will hold with d replaced by d+D where D is the order of seasonal differencing and d is the order of non-seasonal differencing.