22  GARCH(1,1) moments

Setup
library(tidyverse)
# **********************************************************************
#                     Simulate GARCH (1,1) 
# **********************************************************************
# Simulate GARCH process and variance 
simulate_GARCH11 <- function(B = 100, n = 1000, sigma2_0, omega, alpha, beta, mu, sd, p){
  scenarios <- list()
  for(b in 1:B){
    Bt <- rbinom(n, 1, p[1])
    ut <- rnorm(n, mu[1], sd[1])*Bt + rnorm(n, mu[2], sd[2])*(1-Bt)
    yt <- c(sigma2_0 * ut)
    sigma2_t <- c(sigma2_0)
    for(i in 2:n){
      sigma2_t[i] <- omega + alpha * (yt[i-1] - sqrt(sigma2_t[i-1])*sum(mu*p))^2 + beta * sigma2_t[i-1]
      yt[i] <- sqrt(sigma2_t[i]) * ut[i]
    }
    scenarios[[b]] <- dplyr::tibble(t = 1:n, j = b, x = yt, sigma2 = sigma2_t)
  }
  return(scenarios)
}
# **********************************************************************
#                     Simulate GARCH (1,1) Moments
# **********************************************************************
# Simulate GARCH and compute its moments
simulate_GARCH_moments <- function(B = 100, n = 1000, sigma2_0, omega, alpha, beta, mu, sd, p){
  m1 <- m2 <- m3 <- m4 <- m32 <- m12 <- v <- v12 <- c()
  for(b in 1:B){
    Bt <- rbinom(n, 1, p[1])
    ut <- rnorm(n, mu[1], sd[1])*Bt + rnorm(n, mu[2], sd[2])*(1-Bt)
    sigma2_t <- c(sigma2_0)
    for(i in 2:n){
      sigma2_t[i] <- omega + alpha * ut[i-1]^2 + beta * sigma2_t[i-1]
      ut[i] <- sqrt(sigma2_t[i]) * ut[i]
    }
    m1[b] <- mean(sigma2_t)
    m12[b] <- mean(sigma2_t^(1/2))
    m2[b] <- mean(sigma2_t^2)
    m32[b] <- mean(sigma2_t^(3/2))
    m3[b] <- mean(sigma2_t^3) 
    m4[b] <- mean(sigma2_t^4)
    v[b] <- var(sigma2_t)
    v12[b] <- var(sigma2_t^(1/2)) 
  }
  dplyr::tibble(m1 = m1, m2 = m2, m3 = m3, m4 = m4, m32 = m32, m12 = m12, v = v, v12 = v12) %>%
    dplyr::summarise_all(mean)
}
# **********************************************************************
#                              Inputs
# **********************************************************************
# Forecast horizon
h <- 30000
B <- 500
n <- h
# GARCH parameters
alpha <- 0.08
beta <- 0.35
omega <- 1.2*(1 - alpha - beta)
# Mixture moments
mu <- c(-0.6, 0.4)
sd <- c(0.8, 1.2)
p <- c(0.4, 0.6)
# Moments of a Gaussian Mixture 
e_x2 = sum((mu^2 + sd^2)*p)
e_x4 = sum((3 * sd^4 + 6 * mu^2 * sd^2 + mu^4) * p)
# Initial values for variance 
sigma2_t <- 1.2
sigma4_t <- sigma2_t^2 
# **********************************************************************
# Simulate GARCH and compute moments
mom <- simulate_GARCH_moments(B = B, n = n, sigma2_t, omega, alpha, beta, mu, sd, p)

Let’s consider a very general setup for GARCH(1,1) process where we do not assume that the GARCH residuals

  1. Has expected value equal to zero, i.e. E{ut}=0.
  2. Has NOT necessary a second moment that is constant and equal to one, i.e. E{ut2} possibly time dependent (deterministic).
  3. Has NOT necessary a fourth moment that is constant and equal to 3, i.e. E{ut4} possibly time dependent (deterministic).

The process we refer to has the form of a standard GARCH(1,1), i.e.  Yt=σtutσt2=ω+α1ut12+β1σt12 where utWN(μt,σt).

22.1 First moment σt2

22.1.1 Short-term

Given the information at time t1, the expected value of the GARCH variance after h-steps can be expanded as: (22.1)E{σt+h2Ft1}=ω(1+j=1h1i=1jλt+hi)+σt2j=1hλt+hj, with h1 and where in general (22.2)λt+hi=α1E{ut+hi2}+β1. The iteration between two consecutive times reads E{σt+hs2Ft1}=ω+λt+hs1E{σt+hs12Ft1}.

Proof. Let’s start by taking the conditional expectation of the GARCH(1,1) variance at time t given the information up to t1. In this case it is fully known at time t given the information in t1, i.e. E{σt2Ft1}=ω+α1yt12+β1σt12. Then, let’s iterate the expectation at time t+1, i.e. E{σt+12Ft1}=ω+α1E{yt2}+β1E{σt2Ft1}, and let’s substitute the expression for the squared residuals yt2=σt2ut2. Since σt2 at time t1 is known we have: E{σt+12Ft1}=ω+(α1E{ut2}+β1)E{σt2Ft1}=ω+λtσt2, where λt=α1E{ut2}+β1. Iterating the expectation at time t+2 E{σt+22Ft1}=ω+λt+1E{σt+12Ft1}=ω+λt+1(ω+λtσt2)=ω(1+λt+1)+λt+1λtσt2 Then, at time t+3 E{σt+32Ft1}=ω+λt+2E{σt+22Ft1}=ω+λt+2(ω(1+λt+1)+λt+1λtσt2)=ω(1+λt+2+λt+2λt+1)+λt+2λt+1λtσt2 In general, after h-steps one can write the expansion E{σt+h2Ft1}=ω(1+j=1h1i=1jλt+hi)+σt2j=1hλt+hj with the convention that an empty product is 1.

Example 22.1 Expanding the expression in with h=1 one obtain E{σt+12Ft1}=ω(1+j=10i=1jλt+1i)+σt2j=11λt+1j==ω+σt2λt with h=2 E{σt+22Ft1}=ω(1+j=11i=1jλt+2i)+σt2j=12λt+2j==ω(1+λt+1)+σt2(λt+1λt) with h=3 E{σt+32Ft1}=ω(1+j=12i=1jλt+3i)+σt2j=13λt+3j==ω(1+λt+2+λt+1λt+2)+σt2(λt+2λt+1λt) and so on.

Functions expectation of GARCH variance.
#' Formula for conditional first moment of GARCH variance
#' 
#' @param h integer, number of steps ahead. 
#' @param omega numeric, intercept of the model. 
#' @param alpha numeric, arch parameter of the model. 
#' @param beta numeric, garch parameter of the model. 
#' @param e_x2 numeric, second moment of ut. 
#' @param e_x4 numeric, fourth moment of ut. 
#' @param sigma2_t numeric, last value of the variance at time t-1. 
# Conditional first moment GARCH variance (exact)
e_sigma2_h_mix <- function(h, omega, alpha, beta, e_x2 = 1, sigma2_t){
  sigma2_h <- c(sigma2_t)
  # Second moment
  m2 <- e_x2
  if (length(e_x2) == 1 & h > 1){
    m2 <- rep(e_x2, h)
  }
  # Derived quantities
  lambda <- alpha * m2 + beta
  lambda_prod <- c(1, lambda[h:1][-1])
  #lambda_prod <- cumprod(lambda_prod)
  sigma2_h <- c(sigma2_t, omega * cumsum(cumprod(lambda_prod)) + sigma2_t * cumprod(lambda))
  names(sigma2_h) <- paste0("t+", 0:h)
  return(sigma2_h)
}
#' Iteration for conditional first moment of GARCH variance
#' 
#' @param h integer, number of steps ahead. 
#' @param omega numeric, intercept of the model. 
#' @param alpha numeric, arch parameter of the model. 
#' @param beta numeric, garch parameter of the model. 
#' @param e_x2 numeric, second moment of ut. 
#' @param e_x4 numeric, fourth moment of ut. 
#' @param sigma2_t numeric, last value of the variance at time t-1. 
e_sigma2_h_iter <- function(h, omega, alpha, beta, e_x2 = 1, sigma2_t){
  # Manual iteration 
  sigma2_h <- c(sigma2_t)
  # Second moment
  m2 <- e_x2
  if (length(e_x2) == 1 & h > 1){
    m2 <- rep(e_x2, h)
  }
  for(i in 1:h){
    sigma2_h[i+1] <- omega + (alpha * m2[i] + beta) * sigma2_h[i]
  }
  names(sigma2_h) <- paste0("t+", 0:h)
  return(sigma2_h)
}
Moment Step Formula Iteration Difference. (%)
E{σt+02Ft1} 0 1.200 1.200 0%
E{σt+12Ft1} 1 1.235 1.235 0%
E{σt+22Ft1} 2 1.250 1.250 0%
E{σt+32Ft1} 3 1.258 1.258 0%
E{σt+42Ft1} 4 1.261 1.261 0%
E{σt+52Ft1} 5 1.263 1.263 0%
E{σt+62Ft1} 6 1.263 1.263 0%
E{σt+72Ft1} 7 1.264 1.264 0%
E{σt+82Ft1} 8 1.264 1.264 0%
E{σt+92Ft1} 9 1.264 1.264 0%
E{σt+102Ft1} 10 1.264 1.264 0%
Table 22.1: Forecasted expectation of GARCH(1,1) variance with iteration and with formula.

22.1.2 Long-term

If E{ut2} is constant for all t then, λ=α1E{ut2}+β1, became a constant and the formula simplifies to
(22.3)E{σt+h2Ft1}=σ2+λh(σt2σ2), where σ2 denotes the long-term expected GARCH variance as h, i.e.  (22.4)limhE{σt+h2Ft1}=ω1λ=σ2. It follows that, under the standard assumption that utWN(0,1), then one obtain the classic expression (22.5)E{σt+h2Ft1}=σ2+(α1+β1)h(σt2σ2) where σ2 denotes the unconditional expectation as with E{ut2}=1.

Proof. Let’s verify the formula in for constant λt () for all t, i.e.  λ=α1E{ut2}+β1 In this case the iterative formula () simplifies, i.e.  E{σt+h2Ft1}=ω(1+j=1h1i=1jλ)+σt2j=1hλ==ωj=0h1λj+σt2λh==ω(1λh1λ)+σt2λh=ω1λ+λh(σt2ω1λ) Taking the limit as h gives the long term stationary variance, i.e. limhE{σt+h2Ft1}=ω1λ=σ2λ<1 Hence, the general expression became E{σt+h2Ft1}=σ2+λh(σt2σ2)

Example 22.2  

Unconditional expected value of GARCH(1,1) variance
# Unconditional first moment GARCH variance (exact)
e_sigma2_inf <- function(omega, alpha, beta, e_x2 = 1){
  # Derived quantities
  lambda <- alpha * e_x2 + beta
  # Expectation 
  omega / (1 - lambda)
}
Moment Formula MonteCarlo Difference (%)
σ2 1.264 1.264 -0.0051%
Table 22.2: Forecasted long-term expectation of GARCH(1,1) variance with formula and by Monte Carlo simulations.

22.2 Second moment σt2

22.2.1 Short term

The second moment admits an iterative formula, i.e.  (22.6)E{σt+h4Ft1}=i=1hbt+hij=1i1γt+hj+σt4j=1hγt+hj where
(22.7)γt+hj=α12E{ut+hj4}+β1(2α1E{ut+hj2}+β1) while (22.8)bt+hi=ω(ω+2λt+hiE{σt+hi2Ft1}) with λt+hi as in .

Proof. Starting from σt+14=(ω+α1et2+β1σt2)2 and substitute the definition of et2=σt2ut2, i.e. σt+14=(ω+(α1ut2+β1)σt2)2==ω2+2ω(α1ut2+β1)σt2+(α1ut2+β1)2σt4 Then, let’s take the conditional expectation on both sides: E{σt+14Ft}=ω2+E{(α1ut2+β1)2}E{σt4Ft}+2ω(α1E{ut2}+β1)E{σt2Ft}==ω2+E{(α1ut2+β1)2}E{σt4Ft}+2ωλtE{σt2Ft} where λt=α1E{ut2}+β1. Then note that: E{(α1ut2+β1)2}=E{α12ut4+β12+2α1β1ut2}==α12E{ut4}+β1(2α1E{ut2}+β1)=γt Hence, we can write the expectation in terms of the previous expectation. E{σt+14Ft}=ω2+γtE{σt4Ft}+2ωλtE{σt2Ft}==ω(ω+2λtE{σt2Ft})+γtE{σt4Ft}==bt+γtE{σt4Ft} where bt=ω(ω+2λtE{σt2Ft}). Iterating at time t+2: E{σt+24Ft}=bt+1+γt+1E{σt+14Ft}==bt+1+γt+1bt+γt+1γtE{σt4Ft} At time t+3 E{σt+34Ft}=bt+2+γt+2E{σt+24Ft}==bt+2+γt+2bt+1+γt+2γt+1bt+γt+2γt+1γtE{σt4Ft} Hence, in general E{σt+h4Ft}=i=1hbt+hij=1i1γt+hj+σt4j=1hγt+hj where we denote as
γt=α12E{ut4}+β1(2α1E{ut2}+β1)λt=α1E{ut2}+β1bt=ω2+2λtωE{σt2Ft}

Example 22.3 With h=1 E{σt+14Ft}=i=11bt+1ij=1i1γt+1j+σt4j=11γt+1j==bt+γtσt4 With h=2 E{σt+24Ft}=i=12bt+2ij=1i1γt+2j+σt4j=12γt+2j==bt+1j=10γt+2j+btj=11γt+2j+σt4γt+1γt==bt+1+btγt+1+σt4γt+1γt With h=3 E{σt+34Ft}=i=13bt+3ij=1i1γt+3j+σt4j=13γt+3j==bt+2j=10γt+3j+bt+1j=11γt+3j+btj=12γt+3j+σt4γt+2γt+1γt==bt+2+bt+1γt+2+btγt+2γt+1+σt4γt+2γt+1γt and so on.

Iterative formula for second moment of GARCH variance.
# GARCH second moment iteration
e_sigma4_h_iter <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_0){
  sigma4_iter <- numeric(h + 1)
  sigma4_iter[1] <- sigma4_0
  # Iterative formula for E[sigma^2]
  sigma2_iter <- numeric(h + 1)
  sigma2_iter[1] <- sqrt(sigma4_0)
  for(i in 1:h){
    lambda <- alpha * e_x2 + beta
    gamma <- alpha^2 * e_x4 + beta * (2 * alpha * e_x2 + beta)
    sigma2_iter[i+1] <- omega + lambda * sigma2_iter[i]
    b_t <- omega^2 + 2 * omega * lambda * sigma2_iter[i]
    sigma4_iter[i+1] <- b_t + gamma * sigma4_iter[i]
  }
  sigma4_iter
}

# GARCH second moment with formula
e_sigma4_h_mix <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_0){
  # Step 1: initialize vectors
  sigma2_iter <- numeric(h + 1)
  sigma4_mix  <- numeric(h + 1)
  sigma2_iter[1] <- sqrt(sigma4_0)        # E[sigma_t^2]
  sigma4_mix[1]  <- sigma4_0              # E[sigma_t^4]

  # Step 2: Compute lambda and gamma constants
  lambda <- alpha * e_x2 + beta
  gamma  <- alpha^2 * e_x4 + beta * (2 * alpha * e_x2 + beta)

  # Step 3: Forward recursion to get all E[sigma^2_{t+h}]
  for(i in 1:h){
    sigma2_iter[i + 1] <- omega + lambda * sigma2_iter[i]
  }

  # Step 4: Compute each E[sigma^4_{t+h}]
  for(k in 1:h){
    # Prepare sum for b_t terms
    b_sum <- 0
    for(i in 1:k){
      idx <- k - i + 1  # corresponds to time t + (k - i)
      b_t <- omega^2 + 2 * omega * lambda * sigma2_iter[idx]
      b_sum <- b_sum + b_t * gamma^(i - 1)
    }
    sigma4_mix[k + 1] <- b_sum + sigma4_0 * gamma^k
  }

  names(sigma4_mix) <- paste0("t+", 0:h)
  return(sigma4_mix)
}
Moment step Formula Iteration Difference
E{σt+04Ft1} 0 1.440000 1.440000 0%
E{σt+14Ft1} 1 1.559380 1.559380 0%
E{σt+24Ft1} 2 1.609123 1.609123 0%
E{σt+34Ft1} 3 1.630762 1.630762 0%
E{σt+44Ft1} 4 1.640413 1.640413 0%
E{σt+54Ft1} 5 1.644775 1.644775 0%
E{σt+64Ft1} 6 1.646762 1.646762 0%
E{σt+74Ft1} 7 1.647669 1.647669 0%
E{σt+84Ft1} 8 1.648085 1.648085 0%
E{σt+94Ft1} 9 1.648275 1.648275 0%
E{σt+104Ft1} 10 1.648363 1.648363 0%
Table 22.3: Forecasted second moment of GARCH(1,1) variance with iteration and with formula.

22.2.2 Long-term

If E{ut2} and E{ut3} are constant for all t then the formula simplifies to
(22.9)E{σt+h4Ft1}=(ω2+2ωλσ2)(1γh1γ)+2ωσ2λh(λ(λh(1+γ)h)λh(λ1γ))+σt4γh where σ2 denotes the long-term expected GARCH variance as h, i.e.  (22.10)σ4=limhE{σt+h4Ft1}=ω2(1+α1E{ut2}+β1)(1α1E{ut2}β1)(1α12E{ut4}2α1β1E{ut2}β12). It follows that, under normality utN(0,1) we have that E{ut2}=1 and E{ut4}=3. Substituting, one obtain the same result as in Bollerslev (), i.e. σ4=ω2(1+α1+β1)(1α1β1)(13α122α1β1β12).

Proof. Under the assumption of constant second and fourth moments of ut one can simplify the expressions, i.e.
γ=α12E{ut4}+β1(2α1E{ut2}+β1)bt+hi=ω(ω+2λE{σt+hi2Ft1})λ=α1E{ut2}+β1 Recalling the expression of the expectation of the GARCH variance with constant moments in one can write bt+hi=ω2+2ωλσ2+2ωλhi1σ2 Substituting the above expression into one obtain E{σt+h4Ft1}=i=1h(ω2+2ωλσ2+2ωλhi1σ2)γi1+σt4γh=(ω2+2ωλσ2)i=1hγi1+2ωσ2λhi=1h(1λ)i1γi1+σt4γh==(ω2+2ωλσ2)i=0h1γi+2ωσ2λhi=0h1(1+γλ)i+σt4γh Notably i=0h1γi=1γh1γ and i=0h1(1+γλ)i=1(1+γ)hλh11+γλ=λ(λh(1+γ)h)λh(λ1γ) Hence, E{σt+h4Ft1}=(ω2+2ωλσ2)(1γh1γ)+2ωσ2λh(λ(λh(1+γ)h)λh(λ1γ))+σt4γh Taking the limit as hinfty, the second and third terms converges to zero if λ<1, therefore limhE{σt+h4Ft1}=ω2+2ωλσ21γ More explicitly, limhE{σt+h4Ft1}=ω2(1+2λ1λ)1α12E{ut4}2α1β1E{ut2}β12==ω2(1+λ)(1λ)(1α12E{ut4}2α1β1E{ut2}β12)==ω2(1+α1E{ut2}+β1)(1α1E{ut2}β1)(1α12E{ut4}2α1β1E{ut2}β12)

Long-term formula for second moment of GARCH variance.
# Unconditional second moment GARCH variance (exact)
e_sigma4_inf <- function(omega, alpha, beta, e_x2 = 1, e_x4 = 3){
  # Expectation 
  e_sigma2 <- e_sigma2_inf(omega, alpha, beta, e_x2)
  # Derived quantities
  lambda <- alpha * e_x2 + beta
  gamma <- alpha^2 * e_x4 + 2 * alpha * beta + beta^2
  # Second moment  
  e_sigma2 * omega * (1 + lambda) / (1 - gamma)
}

# Unconditional second moment GARCH variance (exact)
e_sigma4_inf <- function(omega, alpha, beta, e_x2 = 1, e_x4 = 3){
  #1.352* omega^2 * (1 + alpha + beta) / ((1-alpha-beta) * (1 - beta^2 - 2*alpha*beta - e_x4 * alpha^2)) 
   #e_sigma2 * omega * (1 + alpha*e_x2 + beta) / ((1 - beta^2 - 2*alpha*beta*e_x2 - e_x4 * alpha^2)) 
  # Expectation 
  e_sigma2 <- e_sigma2_inf(omega, alpha, beta, e_x2)
  # Derived quantities
  lambda <- alpha * e_x2 + beta
  gamma <- alpha^2 * e_x4 + 2 * e_x2 * alpha * beta + beta^2
  # Second moment  
  e_sigma2 * omega * (1 + lambda) / (1 - gamma)
}
Moment Formula MonteCarlo Difference
σ4 1.648437 1.6486 -0.0099%
Table 22.4: Forecasted long-term second moment of GARCH(1,1) variance with formula and by Monte Carlo simulations.

22.3 Variance σt2

The conditional variance of σt2 with h1 reads V{σt+h2Ft1}=E{σt+h4Ft1}(E{σt+h2Ft1})2. Instead the long-term variance of σt2 reads explicitly V{σt2}=σ4(σ2)2.

Example 22.4  

Iterative formula for variance of GARCH variance.
# Iterative GARCH variance formula
v_sigma2_h_mix <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_t){
  # Second moment GARCH variance
  e_sigma4 <- e_sigma4_h_mix(h, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  # Expectation GARCH variance
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  # Variance
  e_sigma4 - e_sigma2^2
}
# Iterative GARCH variance formula
v_sigma2_h_iter <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_t){
  # Second moment GARCH variance
  e_sigma4 <- e_sigma4_h_iter(h, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  # Expectation GARCH variance
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  # Variance
  e_sigma4 - e_sigma2^2
}
Long-term variance of GARCH variance.
# Unconditional variance GARCH std.dev (approximated)
v_sigma2_inf <- function(omega, alpha, beta, e_x2 = 1, e_x4 = 3){
  # Expectation GARCH variance 
  e_sigma2 <- e_sigma4_inf(omega, alpha, beta, e_x2, e_x4)
  # Expectation GARCH std. dev 
  e_sigma <- e_sigma2_inf(omega, alpha, beta, e_x2)
  # Variance 
  e_sigma2 - e_sigma^2
}
Moment step Formula Iteration Difference
V{σt+12Ft1} 1 0.0352420 0.0352420 0%
V{σt+22Ft1} 2 0.0455820 0.0455820 0%
V{σt+32Ft1} 3 0.0489759 0.0489759 0%
V{σt+42Ft1} 4 0.0502199 0.0502199 0%
V{σt+52Ft1} 5 0.0507180 0.0507180 0%
V{σt+62Ft1} 6 0.0509296 0.0509296 0%
V{σt+72Ft1} 7 0.0510227 0.0510227 0%
V{σt+82Ft1} 8 0.0510646 0.0510646 0%
V{σt+92Ft1} 9 0.0510835 0.0510835 0%
V{σt+102Ft1} 10 0.0510922 0.0510922 0%
Table 22.5: Forecasted variance of GARCH(1,1) variance with iteration and with formula.
Moment Formula MonteCarlo Difference
V{σ2} 0.0510995 0.0510973 0.0043%
Table 22.6: Forecasted long-term variance of GARCH(1,1) variance with formula and by Monte Carlo simulations.

22.4 First moment σt

22.4.1 Short term

The expected value of the GARCH std. deviation can be approximated as σt+h=(σt+h2)1/2 with a Taylor expansion E{σt+hFt1}E{σt+h2Ft1}+18V{σt+h2Ft1}E{σt+h2Ft1}32.

Proof. Let’s X be a non-negative random variable, and let’s say one want to approximate: E{X}. Let f(x)=x and expand f(x) around the point μ=E{X}, i.e. Xμ+12μ1/2(Xμ)18μ3/2(Xμ)2, and take the expectation E{X}μ+12μ1/2(E{X}μ)18μ3/2E{(Xμ)2}, where E{X}μ=0 and E{(Xμ)2}=V{X}. Applying this result to the random variable σt+h2 with 1<h and let’s approximate around the expected value with a Taylor expansion, i.e.  σt+h=σt+h2E{σt+h2Ft}+12(σt+h2E{σt+h2Ft})E{σt+h2Ft}18(σt+h2E{σt+h2Ft})2E{σt+h2Ft}3, Taking the expectation gives the result. E{σt+hFt}E{σt+h2Ft}18V{σt+h2Ft}E{σt+h2Ft}3.

Example 22.5  

Iterative formula for expectation of GARCH std. deviation.
# Conditional first moment GARCH std. dev (approximated)
e_sigma12_h_mix <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_t){
  # Expectation GARCH variance
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  # Variance GARCH variance
  v_sigma2 <- v_sigma2_h_mix(h, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  # Moment to power 1/2 (Approximated)
  e_sigma2^(1/2) - (1/8) * v_sigma2 / sqrt(e_sigma2)^3
}
# Conditional first moment GARCH std. dev (approximated)
e_sigma12_h_iter <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_t){
  # Expectation GARCH variance
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  # Variance GARCH variance
  v_sigma2 <- v_sigma2_h_iter(h, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  # Moment to power 1/2 (Approximated)
  e_sigma2^(1/2) - (1/8) * v_sigma2 / sqrt(e_sigma2)^3
}
Moment step Formula Iteration Difference
E{σt+0Ft1} 0 1.095445 1.095445 0%
E{σt+1Ft1} 1 1.107896 1.107896 0%
E{σt+2Ft1} 2 1.114145 1.114145 0%
E{σt+3Ft1} 3 1.117128 1.117128 0%
E{σt+4Ft1} 4 1.118522 1.118522 0%
E{σt+5Ft1} 5 1.119168 1.119168 0%
E{σt+6Ft1} 6 1.119466 1.119466 0%
E{σt+7Ft1} 7 1.119603 1.119603 0%
E{σt+8Ft1} 8 1.119666 1.119666 0%
E{σt+9Ft1} 9 1.119694 1.119694 0%
E{σt+10Ft1} 10 1.119708 1.119708 0%
Table 22.7: Forecasted expectation of GARCH(1,1) std. deviation with iteration and with formula.

22.4.2 Long term

The unconditional expected GARCH(1,1) std. deviation σσ2+18V{σ2}(σ2)32.

Example 22.6  

Long-term expectation of GARCH std. deviation.
# Unconditional first moment GARCH std. dev (approximated)
e_sigma12_inf <- function(omega, alpha, beta, e_x2 = 1, e_x4 = 3){
  # Expectation GARCH variance 
  e_sigma2 <- e_sigma2_inf(omega, alpha, beta, e_x2)
  # Variance GARCH variance 
  v_sigma2 <- v_sigma2_inf(omega, alpha, beta, e_x2, e_x4)
  # Moment to power 1/2 (Approximated) 
  e_sigma2^(1/2) - (1/8) * v_sigma2 / sqrt(e_sigma2)^3
}
Moment Formula MonteCarlo Difference
σ 1.119719 1.120499 -0.0697%
Table 22.8: Long-term expectation of GARCH(1,1) std. deviation with approximated formula and by Monte Carlo simulations.

22.5 Variance σt

22.5.1 Short term

The variance of the GARCH std. deviation can be approximated V{σt+hFt1}E{σt+h2Ft1}E{σt+hFt1}2.

Example 22.7  

Iterative formula for variance of GARCH std. deviation.
# Iterative GARCH variance formula (approximated)
v_sigma_h_mix <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_t){
  # Expectation GARCH variance
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  # Expectation GARCH std. dev
  e_sigma <- e_sigma12_h_mix(h, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  # Variance
  e_sigma2 - e_sigma^2
}
# Iterative GARCH variance formula (approximated)
v_sigma_h_iter <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_t){
  # Expectation GARCH variance
  e_sigma2 <- e_sigma2_h_iter(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  # Expectation GARCH std. dev
  e_sigma <- e_sigma12_h_iter(h, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  # Variance
  e_sigma2 - e_sigma^2
}
Moment step Formula Iteration Difference
V{σt+1Ft1} 1 0.0071262 0.0071262 0%
V{σt+2Ft1} 2 0.0090968 0.0090968 0%
V{σt+3Ft1} 3 0.0097164 0.0097164 0%
V{σt+4Ft1} 4 0.0099365 0.0099365 0%
V{σt+5Ft1} 5 0.0100227 0.0100227 0%
V{σt+6Ft1} 6 0.0100589 0.0100589 0%
V{σt+7Ft1} 7 0.0100747 0.0100747 0%
V{σt+8Ft1} 8 0.0100817 0.0100817 0%
V{σt+9Ft1} 9 0.0100849 0.0100849 0%
V{σt+10Ft1} 10 0.0100864 0.0100864 0%
Table 22.9: Forecasted variance of GARCH(1,1) std. deviation with iteration and with formula.

22.5.2 Long term

The long-term variance of the GARCH std. deviation can be approximated as V{σ}σ2(σ)2.

Example 22.8  

Long-term variance of GARCH std. deviation.
# Unconditional variance GARCH std.dev (approximated)
v_sigma_inf <- function(omega, alpha, beta, e_x2 = 1, e_x4 = 3){
  # Expectation GARCH variance 
  v_sigma2 <- v_sigma2_inf(omega, alpha, beta, e_x2, e_x4)
  # Expectation GARCH std. dev 
  e_sigma2 <- e_sigma2_inf(omega, alpha, beta, e_x2)
  # Variance 
  v_sigma2 / (4 * e_sigma2^2)
}
Moment Formula MonteCarlo Difference
V{σ} 0.0079976 0.0084045 -5.0874%
Table 22.10: Long-term variance of GARCH(1,1) std. deviation with approximated formula and by Monte Carlo simulations.

22.6 Third moment σt

22.6.1 Short term

The expected value of σt+h3 can be approximated with a Taylor expansion, i.e. σt+h3=(σt+h2)3/2. Then, we can approximate
E{σt3Ft1}E{σt+h2Ft1}32+38V{σt+h2Ft1}E{σt+h2Ft1}.

Example 22.9  

Iterative formula for third moment of GARCH std. deviation.
# Conditional third moment GARCH std. dev (approximated)
e_sigma32_h_mix <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_0){
  # Expectation variance
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_0))
  # Variance variance
  v_sigma2 <- v_sigma2_h_mix(h, omega, alpha, beta, e_x2, e_x4, sigma4_0)
  # Moment to power 3/2 (Approximated)
  e_sigma2^(3/2) + (3/8) * v_sigma2 / sqrt(e_sigma2)
}

# Conditional third moment GARCH std. dev (approximated)
e_sigma32_h_iter <- function(h, omega, alpha, beta, e_x2 = 1, e_x4 = 3, sigma4_0){
  # Expectation variance
  e_sigma2 <- e_sigma2_h_iter(h, omega, alpha, beta, e_x2, sqrt(sigma4_0))
  # Variance variance
  v_sigma2 <- v_sigma2_h_iter(h, omega, alpha, beta, e_x2, e_x4, sigma4_0)
  # Moment to power 3/2 (Approximated)
  e_sigma2^(3/2) + (3/8) * v_sigma2 / sqrt(e_sigma2)
}
Moment step Formula Iteration Difference
E{σt+032Ft1} 0 1.314534 1.314534 0%
E{σt+132Ft1} 1 1.383623 1.383623 0%
E{σt+232Ft1} 2 1.413526 1.413526 0%
E{σt+332Ft1} 3 1.426837 1.426837 0%
E{σt+432Ft1} 4 1.432849 1.432849 0%
E{σt+532Ft1} 5 1.435585 1.435585 0%
E{σt+632Ft1} 6 1.436836 1.436836 0%
E{σt+732Ft1} 7 1.437408 1.437408 0%
E{σt+832Ft1} 8 1.437670 1.437670 0%
E{σt+932Ft1} 9 1.437791 1.437791 0%
E{σt+1032Ft1} 10 1.437846 1.437846 0%
Table 22.11: Forecasted third moment of GARCH(1,1) std. deviation with iteration and with formula.

22.6.2 Long term

With a Taylor approximation, the long term third moment of the GARCH std. deviation reads σ3(σ2)32+38V{σ2}σ2.

Example 22.10  

Long-term third moment of GARCH std. deviation.
# Unconditional third moment GARCH std. dev (approximated)
e_sigma32_inf <- function(omega, alpha, beta, e_x2 = 1, e_x4 = 3){
  # Expectation GARCH variance 
  e_sigma2 <- e_sigma2_inf(omega, alpha, beta, e_x2)
  # Variance GARCH variance 
  v_sigma2 <- v_sigma2_inf(omega, alpha, beta, e_x2, e_x4)
  # Moment to power 3/2 (Approximated)
  e_sigma2^(3/2) + (3/8) * v_sigma2 / sqrt(e_sigma2)
}
Moment Formula MonteCarlo Difference
σ32 1.437893 1.436871 0.071%
Table 22.12: Long-term third moment of GARCH(1,1) std. deviation with approximated formula and by Monte Carlo simulations.

22.7 Covariance

The covariance between two GARCH variances at time t and t+h reads: Cv{σt2σt+h2Ft1}=(i=1hλt+hi)V{σt2Ft1} For a fixed t and general s and h, Cv{σt+s2σt+h2Ft}=(i=1max(s,h)λt+max(s,h)i)V{σmin(s,h)2Ft}

Proof. Leveraging the tower property and conditioning one can write: E{σt2σt+h2Ft1}=E{σt2E{σt+h2Ft}Ft1} From our previous result we have: E{σt2σt+h2}=E{σt2(ωj=0h1i=1jλt+hi+i=1hλt+hiσt2)Ft1} Hence, E{σt2σt+h2Ft1}=(ωj=0h1i=1jλt+hi)E{σt2Ft1}+(i=1hλt+hi)E{σt4Ft1} By definition the covariance: Cv{σt2σt+h2Ft1}=E{σt2σt+h2Ft1}E{σt2}E{σt+h2Ft1}==(ωj=0h1i=1jλt+hi)E{σt2}+(i=1hλt+hi)E{σt4}E{σt2}[ωj=0h1i=1jλt+hi+i=1hλt+hiE{σt2}] and simplify the first and last terms cancel and the one remain with Cv{σt2σt+h2Ft1}=(i=1hλt+hi)E{σt4Ft1}(i=1hλt+hi)E{σt2Ft1}2==(i=1hλt+hi)V{σt2Ft1}

Example 22.11  

GARCH covariances bewtween variance
# Covariance 
cov_sigma2_h_mix <- function(h, omega, alpha, beta, e_x2, e_x4, sigma4_t){
  # Second moment
  m2 <- e_x2
  if (length(e_x2) != h){
    m2 = rep(e_x2, h)
  }
  # Fourth moment
  m4 <- e_x4
  if (length(e_x4) != h){
    m4 = rep(e_x4, h)
  }
  lambda <- (alpha * m2 + beta)
  # Variances 
  v_sigma2 <- v_sigma2_h_iter(h, omega, alpha, beta, m2[1], m4[1], sigma4_t)[h:1]
  # Covariances 
  cv_sigma2_h <- v_sigma2 * cumprod(lambda)
  return(cv_sigma2_h)
}
# Simulate multiple ACF 
sim_acf_garch <- function(B, h){
  acf_sigma2 <- 0
  acf_sigma <- 0
  for(i in 1:B){
    sim <- simulate_GARCH11(B = 1, n = 10000, sigma2_t, omega, alpha, beta, mu, sd, p)
    sim <- bind_rows(sim)
    acf_sigma2 <- acf_sigma2 + acf(sim$sigma2, plot = F, lag.max = h+1, type = "cov")$acf[,,1][-1]
    acf_sigma <- acf_sigma + acf(sqrt(sim$sigma2), plot = F, lag.max = h+1, type = "cov")$acf[,,1][-1]
  }
  structure(
    list(
      acf_sigma = acf_sigma/B,
      acf_sigma2 = acf_sigma2/B
    )
  )
}
Moment step Formula MonteCarlo Difference
Cv{σt+02,σt+02Ft1} 0 0.0234411 0.0234789 -0.1614%
Cv{σt+12,σt+12Ft1} 1 0.0107530 0.0107468 0.0569%
Cv{σt+22,σt+22Ft1} 2 0.0049316 0.0049061 0.5168%
Cv{σt+32,σt+32Ft1} 3 0.0022608 0.0022197 1.8173%
Cv{σt+42,σt+42Ft1} 4 0.0010353 0.0009858 4.7902%
Cv{σt+52,σt+52Ft1} 5 0.0004730 0.0004346 8.1299%
Cv{σt+62,σt+62Ft1} 6 0.0002149 0.0001262 41.2696%
Cv{σt+72,σt+72Ft1} 7 0.0000962 0.0000081 91.5452%
Cv{σt+82,σt+82Ft1} 8 0.0000411 -0.0000288 170.2412%
Cv{σt+92,σt+92Ft1} 9 0.0000146 -0.0000174 219.2467%
Cv{σt+102,σt+102Ft1} 10 0.0000000 -0.0000047 Inf%
Table 22.13: Forecasted covariance between GARCH(1,1) variances with formula and by monte Carlo simulations

For the covariance between the GARCH std. deviations, we apply a Taylor approximation around the mean of σt+s and σt+h, using the delta method: Cv{σt+s,σt+hFt}Cv{σt+s2,σt+h2Ft}4E{σt+s2Ft}E{σt+h2Ft}.

Proof. Considering the product of σt+h=σt+h2E{σt+h2Ft}+12(σt+h2E{σt+h2Ft})E{σt+h2Ft}, and applying the covariance between σt+h and σt+s with 1<s<h one obtain the result.

Example 22.12  

GARCH covariances bewtween std.
# Covariance 
cov_sigma_h_mix <- function(h, omega, alpha, beta, e_x2, e_x4, sigma4_t){
  # Covariance 
  cv <- cov_sigma2_h_mix(h+1, omega, alpha, beta, e_x2, e_x4, sigma4_t)
  e_sigma2 <- e_sigma2_h_mix(h, omega, alpha, beta, e_x2, sqrt(sigma4_t))
  cv / (4 * sqrt(sigma4_t) * e_sigma2)
}
Moment step Formula MonteCarlo Difference
Cv{σt+0,σt+0Ft1} 0 0.0040696 0.0039637 2.6029%
Cv{σt+1,σt+1Ft1} 1 0.0018146 0.0018399 -1.3983%
Cv{σt+2,σt+2Ft1} 2 0.0008217 0.0008452 -2.8701%
Cv{σt+3,σt+3Ft1} 3 0.0003745 0.0003835 -2.4081%
Cv{σt+4,σt+4Ft1} 4 0.0001710 0.0001710 0.009%
Cv{σt+5,σt+5Ft1} 5 0.0000781 0.0000754 3.3625%
Cv{σt+6,σt+6Ft1} 6 0.0000354 0.0000227 36.0148%
Cv{σt+7,σt+7Ft1} 7 0.0000159 0.0000022 85.9823%
Cv{σt+8,σt+8Ft1} 8 0.0000068 -0.0000045 166.2259%
Cv{σt+9,σt+9Ft1} 9 0.0000024 -0.0000031 229.793%
Cv{σt+10,σt+10Ft1} 10 0.0000000 -0.0000007 Inf%
Table 22.14: Forecasted covariance between GARCH(1,1) std. deviation with formula and by monte Carlo simulations