In time series analysis, it is often necessary to model both conditional mean and conditional variance simultaneously, which is so-called composite modeling. For instance, while the conditional mean is an AR(1) model, the conditional variance can be a GARCH(1, 1) model.

In SAS/ETS module, it is convenient to build such composite models with AUTOREG procedure if the conditional mean specification is as simple as shown below.

data garch1; lu = 0; lh = 0; do i = 1 to 5000; x = ranuni(1); h = 0.3 + 0.4 * lu ** 2 + 0.5 * lh; u = sqrt(h) * rannor(1); y = 1 + 3 * x + u; lu = u; lh = h; output; end; run; proc autoreg data = _last_; model y = x / garch = (p = 1, q = 1); run; /* Standard Approx Variable DF Estimate Error t Value Pr > |t| Intercept 1 1.0125 0.0316 32.07 <.0001 x 1 2.9332 0.0536 54.72 <.0001 ARCH0 1 0.2886 0.0256 11.28 <.0001 ARCH1 1 0.3881 0.0239 16.22 <.0001 GARCH1 1 0.5040 0.0239 21.10 <.0001 */

However, when the conditional mean has a more complex structure, then MODEL instead of AUTOREG procedure should be used. Below is an perfect example showing the flexibility of MODEL procedure. In the demonstration, the conditional mean is an ARMA(1, 1) model and the conditional variance is a GARCH(1, 1) model.

data garch2; lu = 0; lh = 0; ly = 0; do i = 1 to 5000; x = ranuni(1); h = 0.3 + 0.4 * lu ** 2 + 0.5 * lh; u = sqrt(h) * rannor(1); y = 1 + 3 * x + 0.6 * (ly - 1) + u - 0.7 * lu; lu = u; lh = h; ly = y; output; end; run; proc model data = _last_; parms mu x_beta ar1 ma1 arch0 arch1 garch1; y = mu + x_beta * x + ar1 * zlag1(y - mu) + ma1 * zlag1(resid.y); h.y = arch0 + arch1 * xlag(resid.y ** 2, mse.y) + garch1 * xlag(h.y, mse.y); fit y / method = marquardt fiml; run; /* Approx Approx Parameter Estimate Std Err t Value Pr > |t| mu 0.953905 0.0673 14.18 <.0001 x_beta 2.92509 0.0485 60.30 <.0001 ar1 0.613025 0.00819 74.89 <.0001 ma1 0.700154 0.0126 55.49 <.0001 arch0 0.288948 0.0257 11.26 <.0001 arch1 0.387436 0.0238 16.28 <.0001 garch1 0.504588 0.0237 21.26 <.0001 */