Docs / nablatensor-quant / com.nablatensor.quant.estimate

record

Garch11

A GARCH(1,1) conditional-variance model,

sigma2_t = omega + alpha r_{t-1}^2 + beta sigma2_{t-1}

fitted by Gaussian maximum likelihood. The negative log-likelihood is recorded once and every optimiser iteration reads the exact score vector from a single adjoint sweep — the same machinery a SABR or Heston calibration uses, applied to a time series instead of an option surface.

Stationarity (omega > 0, alpha, beta >= 0, alpha + beta < 1) is enforced by fitting in the reparameterised coordinates (omega, persistence = alpha + beta, share = alpha / (alpha + beta)) with plain box bounds, so no general inequality constraint is needed. Asymptotic standard errors come from the inverse of the finite-difference Hessian of the log-likelihood at the optimum, in the natural (omega, alpha, beta) coordinates.

Record components

omega
double
alpha
double
beta
double

Methods

double longRunVariance()

Unconditional (long-run) variance omega / (1 - alpha - beta).

double[] conditionalVariance(double[] returns)

The conditional-variance path, seeded with the long-run variance. variance[t] is the estimate before returns[t] is seen.

static double negLogLikelihood(double omega, double alpha, double beta, double[] returns, double var0)

Gaussian negative log-likelihood (up to a constant), plain double.

static Fit fit(double[] returns)

Fit (omega, alpha, beta) to returns (assumed zero-mean) by maximum likelihood.

Map<String, Double> asMap()

Named parameter map, for reporting.