fEGarch {fEGarch}R Documentation

Fitting Function for Models of the Broader EGARCH Family

Description

Use quasi-maximum-likelihood estimation to fit a model from the broader EGARCH family to some observed time series.

Usage

fEGarch(
  spec = egarch_spec(),
  rt,
  drange = c(0, 1),
  meanspec = mean_spec(),
  Drange = c(0, 1),
  nonparspec = locpol_spec(),
  use_nonpar = FALSE,
  n_test = 0,
  start_pars = NULL,
  LB = NULL,
  UB = NULL,
  control = list(),
  control_nonpar = list(),
  mean_after_nonpar = FALSE,
  parallel = TRUE,
  ncores = max(1, future::availableCores() - 1),
  trunc = "none",
  presample = 50,
  Prange = c(1, 5)
)

Arguments

spec

an S4 object of class "egarch_type_spec" or "loggarch_type_spec" as returned by the various spec functions of this package, for example fEGarch_spec or its wrappers like megarch_spec or mloggarch_spec, among others.

rt

the input time series to fit the model to ordered from past to present; can also be a "zoo" class object or a "ts" class object.

drange

a two-element numeric vector that indicates the boundaries of the interval over which to search for the fractional differencing parameter d in a long-memory GARCH-type model in the conditional volatility model part; by default, d being searched for on the interval from 0 to 1; note that specific settings in the arguments LB and UB overwrite this argument.

meanspec

an object of class "mean_spec"; indicates the specifications for the model in the conditional mean.

Drange

a two-element numeric vector that indicates the boundaries of the interval over which to search for the fractional differencing parameter d in a long-memory ARMA-type model in the conditional mean model part; by default, D being searched for on the interval from 0 to 1; note that specific settings in the arguments LB and UB overwrite this argument.

nonparspec

an object of class "locpol_spec" returned by locpol_spec; defines the settings of the nonparametric smoothing technique for use_nonpar = TRUE.

use_nonpar

a logical indicating whether or not to implement a semiparametric extension of the volatility model defined through spec; see "Details" for more information.

n_test

a single numerical value indicating, how many observations at the end of rt not to include in the fitting process and to reserve for backtesting.

start_pars

a vector with starting parameters for the optimization; must be of the same length as the output vector of parameters; the default NULL uses internally saved default sets of starting values; see "Details" for the order of elements.

LB

a vector with lower boundaries for parameters; must be of the same length as the output vector of parameters; the default NULL uses internally saved default sets of lower boundary values; see "Details" for the order of elements.

UB

a vector with upper boundaries for parameters; must be of the same length as the output vector of parameters; the default NULL uses internally saved default sets of upper boundary values; see "Details" for the order of elements.

control

a list that is passed to control of the function solnp of the package Rsolnp.

control_nonpar

a list containing changes to the arguments for the hyperparameter estimation algorithm in the nonparametric scale function estimation for use_nonpar = TRUE; see "Details" for more information.

mean_after_nonpar

only for use_nonpar = TRUE; considers the unconditional mean of the parametric model part in the QMLE step in a semiparametric model; by default, a zero-mean model is considered for the parametric part in a semiparametric model.

parallel

only relevant for a (skewed) average Laplace (AL) distribution, i.e. if cond_dist in spec is set to cond_dist = "ald" or cond_dist = "sald"; parallel is a logical value indicating whether or not the slices for the positive integer-valued parameter of the SM distribution should be fitted in parallel for a speed boost.

ncores

only relevant for a (skewed) average Laplace (AL) distribution, i.e. if cond_dist in spec is set to cond_dist = "ald" or cond_dist = "sald", and if simultaneously parallel = TRUE; ncores is a single numeric value indicating the number of cores to use for parallel computations.

trunc

a positive integer indicating the finite truncation length of the infinite-order polynomials of the infinite-order representations of the long-memory model parts; the character "none" is an optional input that specifies that truncation should always be applied back to the first (presample) observation time point, i.e. that maximum length filters should be applied at all times.

presample

the presample length for initialization (for extended EGARCH- / Log-GARCH-type models only relevant for the FARIMA-part, as series in log-transformed conditional variance are initialized by zero).

Prange

a two-element vector that indicates the search boundaries for the parameter P in a (skewed) average Laplace distribution.

Details

For details on the models in the conditional variance, see fEGarch_spec. For details on the models in the conditional mean, see mean_spec. The combined model defined through mean_spec and fEGarch_spec is the specified model. It can be thought of as the model described in mean_spec with \left\{r_t\right\} therein being governed by a model from the EGARCH family (see for example Feng et al., 2025) as described in fEGarch_spec, however with mean of \left\{r_t\right\} fixed to zero.

The specified model is then fitted using quasi maximum likelihood estimation, where pre-sample values of g\left(\eta_{t-1}\right) are filled in through its theoretical expectation of zero, which is analogous to not setting pre-sample values in the long-memory case. In addition, in short-memory models, pre-sample values of ln(\sigma_t^2) are roughly approximated through \ln\left(\hat{\sigma}_{t}^{2}\right), where \hat{\sigma}_{t}^{2} is the sample variance of the observations.

See the references section for sources on the EGARCH (Nelson, 1991), FIEGARCH (Bollerslev and Mikkelsen, 1996), Log-GARCH (Geweke, 1986; Pantula, 1986; Milhoj, 1987) and FILog-GARCH (Feng et al., 2020) models. For information on the FIMLog-GARCH, see Feng et al. (2023).

In the current package version, standard errors of parameter estimates are computed from the Hessian at the optimum of the log-likelihood using hessian. To ensure numerical stability and applicability to a huge variety of differently scaled data, parametric models are first fitted to data that is scaled to have sample variance 1. Parameter estimates and other quantities are then either retransformed or recalculated afterwards for the original data.

For a conditional average Laplace distribution, an optimal model for each distribution parameter P from 1 to 5 is estimated (assuming that P is then fixed to the corresponding value). Afterwards, P is then estimated by selecting the estimated model among the five fitted models that has the largest log-likelihood. The five models are, by default, fitted simultaneously using parallel programming techniques (see also the arguments parallel and ncores, which are only relevant for a conditional average Laplace distribution). After the optimal model (including the estimate of P called \hat{P}) has been determined, P=\hat{P} is seen as fixed to obtain the standard errors via the Hessian matrix for the estimates of the continuous parameters. A standard error for \hat{P} is therefore not obtained and the ones obtained for the remaining estimates do not account for \hat{P}.

As an alternative, a semiparametric extension of the pure models in the conditional variance can be implemented. If use_nonpar = TRUE, meanspec is omitted and before fitting a zero-mean model in the conditional volatility following spec, a smooth scale function, i.e. a function representing the unconditional standard deviation over time, is being estimated following the specifications in nonparspec and control_nonpar. This preliminary step stabilizes the input series rt, as long-term changes in the unconditional variance are being estimated and removed before the parametric step using either tsmooth or tsmoothlm depending on whether spec specifies a model with short memory or with long memory. control_nonpar can be adjusted following the arguments of tsmooth for short-memory specifications of spec, on the other hand changes to arguments of tsmoothlm can be passed to it for long-memory specifications. These arguments specify settings for the automated bandwidth selection algorithms implemented by these two functions. By default, we use the settings Mcf = "NP", InfR = "Opt", bStart = 0.15, bvc = "Y", cb = 0.05, and method = "lpr" within the call to tsmooth, as well as pmin = 0, pmax = 1, qmin = 0, qmax = 1, InfR = "Opt", bStart = 0.15, cb = 0.05, and method = "lpr" for tsmoothlm. locpol_spec passed to nonparspec handles more direct settings of the local polynomial smoother itself. See the documentation for these functions to get a detailed overview of these settings. Assume \{r_t\} to be the observed series, where t = 1, 2, \dots, n, then r_t^{*} = r_t - \bar{r}, with \bar{r} being the arithmetic mean over the observed r_t, is computed and subsequently y_t = \ln\left[\left(r_t^{*}\right)^2\right]. The subtraction of \bar{r} is necessary so that r_t^{*} are all different from zero almost surely. Once y_t are available, its trend m(x_t), with x_t as the rescaled time on the interval [0, 1], is being estimated using either tsmooth or tsmoothlm and denoted here by \hat{m}(x_t). Then from \hat{\xi}_t = y_t - \hat{m}(x_t) obtain \hat{C} = -\ln\left\{\sum_{t=1}^{n}\exp\left(\hat{\xi}_t\right)\right\}, and obtain the estimated scale function as \hat{s}(x_t)=\exp\left[\left(\hat{\mu}(x_t) - \hat{C}\right) / 2\right]. The stabilized / standardized version of the series \left\{r_t\right\} is then \tilde{r}_t = r_t^{*} / \hat{s}(x_t), to which a purely parametric volatility model following spec is then fitted. The estimated volatility at a given time point is then the product of the estimate of the corresponding scale function value and of the estimated conditional standard deviation (following the parametric model part) for that same time point. See for example Feng et al. (2022) or Letmathe et al. (2023) for more information on the semiparametric extension of volatility models. Moreover, if bwidth in the object passed to nonparspec is not at its default NULL but instead a numeric value between 0 and 0.5, the automated bandwidth selection is skipped and the provided bandwidth in bwidth is used.

The order for manual settings of start_pars, LB and UB is crucial. The correct order is: \mu, \text{ar}_1,\dots,\text{ar}_{p^{*}}, \text{ma}_1,\dots,\text{ma}_{q^{*}},D,\omega_{\sigma}, \phi_1,\dots,\phi_p, \psi_1, \dots, \psi_{q-1}, \kappa, \gamma, d, \text{shape parameter}, \text{skewness parameter} for Type I models (see fEGarch_spec). For Type II models, we have \mu, \text{ar}_1,\dots,\text{ar}_{p^{*}}, \text{ma}_1,\dots,\text{ma}_{q^{*}},D,\omega_{\sigma}, \phi_1,\dots,\phi_p, \psi_1, \dots, \psi_{q}, d, shape parameter, skewness parameter. Depending on the exact model specification, parameters irrelevant for the specification at hand should be dropped in start_pars, LB and UB.

Value

An object of S4-class "fEGarch_fit_egarch" "fEGarch_fit_loggarch" is returned depending on the selected model type in the model specification. It contains the following elements.

pars:

a named numeric vector with the parameter estimates.

se:

a named numeric vector with the obtained standard errors in accordance with the parameter estimates.

vcov_mat:

the variance-covariance matrix of the parameter estimates with named columns and rows.

rt:

the input object rt (or at least the training data, if n_test is greater than zero); if rt was a "zoo" or "ts" object, the formatting is kept.

sigt:

the estimated conditional standard deviations (or for use_nonpar = TRUE the estimated total volatilities, i.e. scale function value times conditional standard deviation); if rt was a "zoo" or "ts" object, the formatting is also applied to sigt.

cmeans:

the estimated conditional means; if rt was a "zoo" or "ts" object, the formatting is also applied to cmeans.

etat:

the obtained residuals; if rt was a "zoo" or "ts" object, the formatting is also applied to etat.

orders:

a two-element numeric vector stating the considered model orders.

cond_dist:

a character value stating the conditional distribution considered in the model fitting.

long_memo:

a logical value stating whether or not long memory was considered in the model fitting.

llhood:

the log-likelihood value obtained at the optimal parameter combination.

inf_criteria:

a named two-element numeric vector with the corresponding AIC (first element) and BIC (second element) of the fitted parametric model part; for purely parametric models, these criteria are valid for the entire model; for semiparametric models, they are only valid for the parametric step and are not valid for the entire model.

powers:

a two-element numeric vector stating the powers considered for the asymmetry term (first element) and the magnitude term (second element); only exists, if a type I model was fitted.

modulus:

a two-element logical vector stating the modulus transformations (TRUE, otherwise FALSE) considered for the asymmetry term (first element) and the magnitude term (second element); only exists, if a type I model was fitted.

meanspec:

the settings for the model in the conditional mean; is an object of class "mean_spec" that is identical to the object passed to the input argument meanspec.

test_obs:

the observations at the end up the input rt reserved for testing following n_test.

scale_fun:

the estimated scale function values, if use_nonpar = TRUE, otherwise NULL; formatting of rt is reused.

nonpar_model:

the estimation object returned by either tsmooth or tsmoothlm for use_nonpar = TRUE.

trunc:

the input argument trunc.

References

Examples

window.zoo <- get("window.zoo", envir = asNamespace("zoo"))
rt <- window.zoo(SP500, end = "2002-12-31")
# Pure conditional volatility model
spec <- fEGarch_spec()
model <- fEGarch(spec, rt)
model
# Simultaneously model conditional mean
spec <- egarch_spec()
model2 <- fEGarch(spec, rt, meanspec = mean_spec(orders = c(1, 1)))
model2



[Package fEGarch version 1.0.1 Index]