Verifying the variances.

Introduction

Combining the type and parallel options of alphaci yields a total of \(6\) different asymptotic variance estimates. In this file we informally verify the computations of these estimates.

Distribution Parallel
Normal Yes
Normal No
Elliptical Yes
Elliptical No
Arbitrary Yes
Arbitrary No

In our setup we have \(n = 1,000,000\), which should suffice. We use \(k = 5\) across the board.

library("future.apply")
plan(multisession)
avar <- alphaci:::avar
avar_std <- alphaci:::avar_std
set.seed(313)
k <- 5
n <- 10 ** 6
print_table <- function(x) {
  table <- rbind(
  c("normal" = avar(x, sigma_mat, type = "normal", parallel = FALSE),
    "adf" = avar(x, sigma_mat, type = "adf", parallel = FALSE),
    "elliptical" = avar(x, sigma_mat, type = "elliptical", parallel = FALSE),
    "normal_par" = avar(x, sigma_mat, type = "normal", parallel = TRUE),
    "adf_par" = avar(x, sigma_mat, type = "adf", parallel = TRUE),
    "elliptical_par" = avar(x, sigma_mat, type = "elliptical", parallel = TRUE)),
  c("normal" = avar_std(x, sigma_mat, type = "normal", parallel = FALSE),
    "adf" = avar_std(x, sigma_mat, type = "adf", parallel = FALSE),
    "elliptical" = avar_std(x, sigma_mat, type = "elliptical", parallel = FALSE),
    "normal_par" = avar_std(x, sigma_mat, type = "normal", parallel = TRUE),
    "adf_par" = avar_std(x, sigma_mat, type = "adf", parallel = TRUE),
    "elliptical_par" = avar_std(x, sigma_mat, type = "elliptical", parallel = TRUE))
  )
  rownames(table) <- c("alpha", "alpha_std")
  knitr::kable(round(table, 3))
}

Normality

First we simulate from a normal model that isn’t parallel. Then the normal model should not be equal to the normal parallel method. Moreover, the adf method should be approximately equal to the normal method, but the adpf paralell model should not be equal to the adf model. The table below confirms these points.

lambda <- 1/(5:1)^2
sigma <- 1/(1:5)^2
x <- alphaci:::simulate_congeneric(n, k, sigma, lambda)
sigma_mat <- cov(x)
print_table(x)
normal adf elliptical normal_par adf_par elliptical_par
alpha 0.666 0.665 0.665 0.865 0.019 0.865
alpha_std 0.187 0.187 0.187 0.233 0.153 0.233

If the normal parallel model is true, all of the methods should yield approximately the same result. Again, this is the case.

lambda <- 1
sigma <- 2
x <- alphaci:::simulate_congeneric(n, k, sigma, lambda)
sigma_mat <- cov(x)
print_table(x)
normal adf elliptical normal_par adf_par elliptical_par
alpha 0.495 0.494 0.495 0.495 0.494 0.495
alpha_std 0.495 0.494 0.495 0.495 0.494 0.495

Ellipticity

We simulate from an elliptical model, the multivariate Laplace, that is neither parallel nor normal. Then the elliptical model should not be equal to the elliptical parallel method, the normal models should not equal the elliptical models. Moreover, the adf method should be approximately equal to the elliptical method, but the adpf paralell model should not be equal to the adf model. The table below confirms these points.

lambda <- 1/(5:1)^2
sigma <- 1/(1:5)^2
mat <- lambda %*% t(lambda) + diag(sigma)
x <- LaplacesDemon::rmvl(n, mu = 0, Sigma = mat)
sigma_mat <- cov(x)
print_table(x)
normal adf elliptical normal_par adf_par elliptical_par
alpha 0.851 1.700 1.696 1.005 0.335 2.002
alpha_std 0.611 1.219 1.218 0.679 0.983 1.352

Finally, we check the eliptical parallel model. The adfs and elliptical should be equal, but not equal to the normal. The table below confirms this.

lambda <- 1
sigma <- 2
mat <- rep(1, k) %*% t(rep(1, k)) * lambda^2 + diag(sigma, nrow = k)
x <- LaplacesDemon::rmvl(n, mu = 0, Sigma = mat)
sigma_mat <- cov(x)
print_table(x)
normal adf elliptical normal_par adf_par elliptical_par
alpha 0.205 0.405 0.408 0.205 0.405 0.408
alpha_std 0.205 0.405 0.408 0.205 0.405 0.408