Volatility Processes

A volatility process is added to a mean model to capture time-varying volatility.

ConstantVariance()

Constant volatility process.

GARCH([p, o, q, power])

GARCH and related model estimation.

FIGARCH([p, q, power, truncation])

FIGARCH model.

EGARCH([p, o, q])

EGARCH model estimation.

HARCH([lags])

Heterogeneous ARCH process.

MIDASHyperbolic([m, asym])

MIDAS Hyperbolic ARCH process.

ARCH([p])

ARCH process.

APARCH([p, o, q, delta, common_asym])

Asymmetric Power ARCH (APARCH) volatility process.

FIAPARCH([p, o, q, delta, truncation])

Fractionally Integrated Asymmetric Power ARCH (FIAPARCH) volatility process.

Fractionally Integrated Asymmetric Power ARCH

FIAPARCH is a fractionally integrated asymmetric power ARCH process. It extends FIGARCH, which has long memory in the volatility, with the asymmetry and the power of APARCH. The conditional volatility evolves according to

\[\sigma_t^{\delta} = \omega + \left[1-\beta L - (1-\phi L)(1-L)^d\right] (|\epsilon_t| - \gamma \epsilon_t)^{\delta} + \beta \sigma_{t-1}^{\delta}\]

where \(L\) is the lag operator and \(d\) is the fractional differencing parameter. The shocks enter through \(|\epsilon_t| - \gamma \epsilon_t\), so that \(\gamma>0\) produces a larger response to negative shocks than to positive shocks of the same size, and the power \(\delta\) determines the scale on which the volatility is modeled. As in the FIGARCH, the process is estimated using its ARCH(\(\infty\)) representation

\[\sigma_t^{\delta} = (1-\beta)^{-1}\omega + \sum_{i=1}^{\infty} \lambda_i (|\epsilon_{t-i}| - \gamma \epsilon_{t-i})^{\delta}\]

with weights \(\lambda_i\) that are the same as in the FIGARCH, truncated after truncation terms (1000 by default).

The orders p, o and q can be 0 or 1. They select, respectively, the parameters \(\phi\), \(\gamma\) and \(\beta\), and the parameters are ordered omega, phi, d, beta, gamma and delta, omitting the ones that are not in the model. The power \(\delta\) is estimated, with values between 0.05 and 4, unless delta is provided, which fixes it to a value in the same range. Fixing \(\delta\) makes estimation considerably faster. The process is named "FI Power ARCH" when o=0, since it then has no asymmetry.

In [1]: import arch.data.nasdaq

In [2]: from arch.univariate import ConstantMean, FIAPARCH

In [3]: nasdaq = arch.data.nasdaq.load()

In [4]: returns = 100 * nasdaq["Adj Close"].pct_change().dropna()

In [5]: am = ConstantMean(returns, volatility=FIAPARCH(delta=1.0, truncation=250))

In [6]: res = am.fit(disp="off")

In [7]: res.params
Out[7]: 
mu       0.035159
omega    0.136684
phi      0.195450
d        0.485489
beta     0.605320
gamma    0.729973
Name: params, dtype: float64

The process can also be selected using vol="fiaparch" in arch_model(), which estimates \(\delta\) and uses the default truncation. Analytic forecasts are only available for a horizon of 1. Longer horizons require method="simulation" or method="bootstrap".

In [8]: import numpy as np

In [9]: forecasts = res.forecast(
   ...:     horizon=3,
   ...:     method="simulation",
   ...:     simulations=500,
   ...:     random_state=np.random.RandomState(0),
   ...: )
   ...: 

In [10]: forecasts.variance
Out[10]: 
                h.1       h.2       h.3
Date                                   
2018-12-31  3.64695  3.274433  3.059001

Parameterless Variance Processes

Some volatility processes use fixed parameters and so have no parameters that are estimable.

EWMAVariance([lam])

Exponentially Weighted Moving-Average (RiskMetrics) Variance process.

RiskMetrics2006([tau0, tau1, kmax, rho])

RiskMetrics 2006 Variance process.

FixedVariance

The FixedVariance class is a special-purpose volatility process that allows the so-called zig-zag algorithm to be used. See the example for usage.

FixedVariance(variance[, unit_scale])

Fixed volatility process.

Writing New Volatility Processes

All volatility processes must inherit from VolatilityProcess and provide all public methods.

VolatilityProcess()

Abstract base class for ARCH models.

They may optionally expose a VolatilityUpdater class that can be used in ARCHInMean estimation.

VolatilityUpdater

Base class that all volatility updaters must inherit from.