Volatility Processes¶
A volatility process is added to a mean model to capture time-varying volatility.
Constant volatility process. |
|
|
GARCH and related model estimation. |
|
FIGARCH model. |
|
EGARCH model estimation. |
|
Heterogeneous ARCH process. |
|
MIDAS Hyperbolic ARCH process. |
|
ARCH process. |
|
Asymmetric Power ARCH (APARCH) volatility process. |
|
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
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
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.
|
Exponentially Weighted Moving-Average (RiskMetrics) Variance process. |
|
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.
|
Fixed volatility process. |
Writing New Volatility Processes¶
All volatility processes must inherit from VolatilityProcess and provide
all public methods.
Abstract base class for ARCH models. |
They may optionally expose a
VolatilityUpdater class
that can be used in ARCHInMean estimation.
Base class that all volatility updaters must inherit from. |