arch.univariate.NGARCH

class arch.univariate.NGARCH(p: int = 1, o: int = 1, q: int = 1)[source]

Nonlinear asymmetric GARCH (NGARCH) volatility process.

The process of Engle and Ng [1], which is called NAGARCH in the rugarch package for R.

Parameters:
p: int = 1

Order of the symmetric innovation. Must satisfy p>=o and be positive.

o: int = 1

Number of innovations that have a shift (an asymmetry parameter). Must satisfy o<=p and be non-negative. The first o of the p innovations are shifted.

q: int = 1

Order of the lagged conditional variance. Must be non-negative.

Raises:
  • TypeError – If p, o or q is not an integer.

  • ValueError – If p is smaller than 1, o or q is negative, or o is larger than p.

Notes

In this class of processes, the variance dynamics are

\[\sigma_{t}^{2}=\omega +\sum_{i=1}^{p}\alpha_{i} \left(\epsilon_{t-i}-\theta_{i}I_{[o\geq i]}\sigma_{t-i}\right)^{2} +\sum_{j=1}^{q}\beta_{j}\sigma_{t-j}^{2}\]

which is \(\sigma_{t-i}^2 (e_{t-i}-\theta_{i})^2\) in terms of the standardized shock \(e_{t}=\epsilon_{t}/\sigma_{t}\). The parameters are named omega, alpha[i], theta[i] and beta[j].

The shift \(\theta\) is the position of the minimum of the news impact curve in units of the lagged volatility. The sign convention is that of the rugarch package and of most textbooks: a positive \(\theta\) is the leverage effect, since a negative shock then raises the variance more than a positive shock of the same size. Engle and Ng [1] write the shift as \((\epsilon_{t-1}+\gamma\sigma_{t-1})^2\) and expect \(\gamma<0\), so that \(\theta=-\gamma\).

The name NGARCH is also used for the nonlinear ARCH model of Higgins and Bera [2], which is a different model and is not available here.

The expected value of \((e_{t}-\theta)^2\) is \(1+\theta^2\) for any standardized distribution, since \(e_t\) has mean 0 and variance 1. The process is covariance stationary if the persistence

\[\phi=\sum_{i=1}^{p}\alpha_{i}\left(1+\theta_{i}^{2}\right) +\sum_{j=1}^{q}\beta_{j}\]

is smaller than 1, and then the unconditional variance of \(\epsilon_t\) is \(\omega/(1-\phi)\). Analytic forecasts are exact at every horizon. When \(p=q=1\), they satisfy \(f_h=\omega+\phi f_{h-1}\).

Estimation uses the linear constraints \(\omega,\alpha_i,\beta_j\geq 0\) and \(\sum\alpha_i+\sum\beta_j<1\), as for APARCH, and bounds of -5 and 5 for \(\theta\). The stationarity condition \(\phi<1\) is not imposed during estimation, since it is not linear in the parameters, and a model with \(\theta\neq 0\) can be estimated with a persistence of 1 or more. fit then issues a ValueWarning.

With o=0 there is no shift and the process is a GARCH process, so GARCH should be used instead. A ValueWarning is issued in this case.

Before the start of the sample, the variance and the squared residual are both replaced by the backcast of the variance, so that each shock term is \(\alpha_i(1+\theta_i^2)\) times the backcast.

References

Examples

>>> from arch.univariate import NGARCH

Standard NGARCH(1,1)

>>> ngarch = NGARCH(p=1, o=1, q=1)

Two lags of the shock, with a shift on the first lag only

>>> ngarch = NGARCH(p=2, o=1, q=1)

Methods

backcast(resids)

Construct values for backcasting to start the recursion.

backcast_transform(backcast)

Transform user-provided backcast values.

bounds(resids)

Return bounds for parameters.

compute_variance(parameters, resids, sigma2, ...)

Compute the variance for the ARCH model.

constraints()

Construct parameter constraints arrays for parameter estimation.

forecast(parameters, resids, backcast, ...)

Forecast volatility from the model.

parameter_names()

Return the names of the model parameters.

simulate(parameters, nobs, rng[, burn, ...])

Simulate data from the model.

starting_values(resids)

Return starting values for the ARCH model.

update(index, parameters, resids, sigma2, ...)

Compute the variance for a single observation.

variance_bounds(resids[, power])

Construct loose bounds for conditional variances.

Properties

name

The name of the volatility process.

num_params

The number of parameters in the model.

start

Index to use to start variance subarray selection.

stop

Index to use to stop variance subarray selection.

updateable

Flag indicating that the volatility process supports update.

volatility_updater

Get the volatility updater associated with the volatility process.