All the tests were done on an Arch Linux x86_64 machine with an Intel(R) Core(TM) i7 CPU (1.90GHz). We first load the necessary packages.
Empirical likelihood computation
We show the performance of computing empirical likelihood with el_mean()
. We test the computation speed with simulated data sets in two different settings: 1) the number of observations increases with the number of parameters fixed, and 2) the number of parameters increases with the number of observations fixed.
Increasing the number of observations
We fix the number of parameters at \(p = 10\), and simulate the parameter value and \(n \times p\) matrices using rnorm()
. In order to ensure convergence with a large \(n\), we set a large threshold value using el_control()
.
set.seed(3175775)
p <- 10
par <- rnorm(p, sd = 0.1)
ctrl <- el_control(th = 1e+10)
result <- microbenchmark(
n1e2 = el_mean(matrix(rnorm(100 * p), ncol = p), par = par, control = ctrl),
n1e3 = el_mean(matrix(rnorm(1000 * p), ncol = p), par = par, control = ctrl),
n1e4 = el_mean(matrix(rnorm(10000 * p), ncol = p), par = par, control = ctrl),
n1e5 = el_mean(matrix(rnorm(100000 * p), ncol = p), par = par, control = ctrl)
)
Below are the results:
result
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> n1e2 533.2 589.80 629.985 634.35 666.90 739.9 100
#> n1e3 1501.5 1723.90 1922.635 1857.80 2012.40 5412.7 100
#> n1e4 14058.3 16234.25 19112.986 19934.20 21189.65 24134.5 100
#> n1e5 276587.7 334928.05 395811.926 375773.60 472796.75 533855.2 100
autoplot(result)
Increasing the number of parameters
This time we fix the number of observations at \(n = 1000\), and evaluate empirical likelihood at zero vectors of different sizes.
n <- 1000
result2 <- microbenchmark(
p5 = el_mean(matrix(rnorm(n * 5), ncol = 5),
par = rep(0, 5),
control = ctrl
),
p25 = el_mean(matrix(rnorm(n * 25), ncol = 25),
par = rep(0, 25),
control = ctrl
),
p100 = el_mean(matrix(rnorm(n * 100), ncol = 100),
par = rep(0, 100),
control = ctrl
),
p400 = el_mean(matrix(rnorm(n * 400), ncol = 400),
par = rep(0, 400),
control = ctrl
)
)
result2
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> p5 889.2 973.40 1007.674 1010.65 1046.25 1124.4 100
#> p25 3472.7 3569.30 3645.975 3651.90 3703.45 3950.1 100
#> p100 30530.9 31440.25 37610.813 35058.50 39079.55 65164.9 100
#> p400 370595.5 407161.15 452473.583 417586.80 479732.90 703250.3 100
autoplot(result2)
On average, evaluating empirical likelihood with a 100000×10 or 1000×400 matrix at a parameter value satisfying the convex hull constraint takes less than a second.