### Proc Arima

Analysis of time series data in the time domain is done with this procedure. Box-Jenkins methodology (the fitting of ARIMA models to time series data) and also transfer function (input type) models can be used. Frequency domain analysis of time series can be done using Proc Spectra.

The framework for the analysis is that the observed time series X(t) is stationary and satisfies an ARMA equation of the form

``````X(t) -phi(1) X(t-1) - ... -phi(p) X(t-p)=
Z(t) -theta(1)Z(t-1)-...-theta(q) Z(t-q)
``````

where `Z(t)` is a white noise process. The constants `phi(1)`,..., `phi(p)` are called the autoregressive coefficients and the number `p` is called the order of the autoregressive component. The constants `theta(1)`,..., `theta(q)` are called the moving average coefficients and the number `q` is called the order of the moving average component. It is possible for either `p` or `q` to be zero.

Use of proc arima to fit ARMA models consists of 3 steps. The first step is model identification, in which the observed series is transformed to be stationary. The only transformation available within proc arima is differencing. The second step is model estimation, in which the orders p and q are selected and the corresponding parameters are estimated. The third step is forecasting, in which the estimated model is used to forecast future values of the observable time series.

As an example, the data file milk.dat containing data on milk production taken from Cryer will be analyzed. Here are the commands that could be used for each of the 3 steps.

``````proc arima data=milk;
identify var=milk(12)
nlag=30
center
outcov=milkcov
noprint;
run;
estimate p=1 q=3
nodf
noconstant
method=ml
plot;
run;
forecast
out=predict
printall;
run;
``````

OPTIONS FOR THE IDENTIFY STATEMENT:

The `var=` statement is required and specifies the variable(s) in the data set to be analyzed. The optional numbers in parenthesis specify the LAG at which differences are to be computed. A statement `var=milk` would analyze the milk series without any differencing; `var=milk(1)` would analyze the first difference of milk; `var=milk(1,1)` the second difference of milk.

The `var=` statement produces 3 plots for the specified variable: the sample autocorrelation function, the sample inverse autocorrelation function, and the sample partial autocorrelation function. These crude plots and tables of their values are printed in the output window. Higher quality plots can be produced through the use of other options (detailed below) and proc gplot.

The `nlag=` option causes the 3 plots to print values up to lag 30. If not specified, the default is `nlag=24` or 25% of the number of observations, whichever is less.

The `center` option subtracts the average of the series specified by the `var=` statement. The average is added back in automatically during the forecast step.

The `outcov=` option places the values of the sample correlation functions into a SAS data set. These values can be used to produce high quality plots of these functions using proc gplot. The variables output are: `LAG`, `VAR` (name of the varible specified in the `var=` option), `CROSSVAR` (name of the variable specified in the `crosscorr=` option), `N` (number of observations used to compute the current value of the covariance or crosscovariance), `COV` (value of the cross covariances), `CORR` (value of the sample autocorrelation function), `STDERR` (standard error of the autocorrelations), `INVCORR` (values of the sample inverse autocorrelation function), and `PARTCORR` (values of the sample partial autocorrelation function).

The `noprint` option suppresses the output of the low quality graphs normally created by the `var=` statement. This option is used primarily with the `outcov=` option.

OPTIONS FOR THE ESTIMATE STATEMENT:

The `p=1 q=3` options specify the auto-regressive and moving average orders to be fit. Other forms of these specifications are: `q=(3)` to specify that ONLY the parameter `theta(3)` is allowed to be non-zero; `p=(12)(3)` for a seasonal model `(1-phi(12)B**12)(1-phi(3)B**3)` where `B` is the backshift operator; `p=(3,12)` for a model in which only `phi(3)` and `phi(12)` are allowed to be non-zero.

The `nodf` option uses the sample size rather than the degrees of freedom as the divisor when estimating the white noise variance.

The `method` option selects the estimation method for the parameters. The choices are `ml` for maximum (Gaussian) likelihood estimation, `uls` for unconditional least squares, and `cls` for conditional least squares.

The `plot` option produces the same 3 plots as in the identify statement for the RESIDUALS after the model parameters are estimated. This is another useful check on whiteness of the residuals.

OPTIONS FOR THE FORECAST STATEMENT:

The `lead` option specifies the number of time intervals into the future for which forecasts are to be made.

By using the `out=` and `printall` options in the forecast statement, a SAS dataset will be created which will contain the values of the original series and the predicted values of the series using the model at all times. This can be useful for an analysis of the past performance of the model.

In practice, several different estimate statements are tried sequentially to see which model best fits the data. Proc arima is interactive, in the sense these sequential attempts can be made without restarting the procedure. Simply submit the successive estimate statements; the original identify statement will be retained.

Transfer function models can be fit by using the `crosscorr` option of the identify statement and the `input` option of the estimate statement. The mechanics of this procedure are illustrated for a dataset `fake` which contains two time series which are related by a transfer function model. In this case, `Y` depends on `X`. First, the process `X` is modeled using the identify and estimate statements. Then `Y` is identified and the cross-correlation between the prewhitened processes `X` and `Y` is estimated. The program might look like this.

``````proc arima data=fake;
identify var=x
center
nlag=40;
estimate p=1 q=1
noconstant
nodf
method=ml
plot;
identify var=y
center
nlag=40
crosscorr=(x);
run;
``````

From the cross correlation information, the lags at which the input process `X` influences `Y` can be tentatively identified. Note that only causal models are allowed; non-zero cross correlations at negative lags cannot be modeled in proc arima. For illustration, say the non-zero lags are 2 and 4. The process `Y` might be estimated as follows.

``````estimate input=( 2\$(2) x )
p=1 q=3
noconstant
nodf
method=ml
plot;
run;
``````

The input is of the form `cB**2+ dB**4= B**2( c + dB**2)`. It is this latter form that gives the form of the input statement.

Note that the estimate statement always refers to the most recent identify statement to decide what variable(s) are to be included in the model. Thus differencing and centering are handled automatically (if used) EXCEPT that differencing must be explicitly specified in the crosscorr statement.

For further details see the online help under SAS SYSTEM HELP--MODELING & ANALYSIS TOOLS--ECONOMETRICS & TIME SERIES--ARIMA or the SAS/ETS Guide.