All the tests were done on an Arch Linux x86_64 machine with an Intel(R) Core(TM) i7 CPU (1.90GHz).
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
,
and simulate the parameter value and
matrices using rnorm()
. In order to ensure convergence with
a large
,
we set a large threshold value using el_control()
.
library(ggplot2)
library(microbenchmark)
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
#> n1e2 447.765 479.5535 587.5175 496.9715 557.4085 5244.464
#> n1e3 1174.409 1404.9330 2380.0707 1493.8845 1703.8805 70913.487
#> n1e4 10670.295 13208.4110 14597.3124 14988.4280 15842.7155 20972.755
#> n1e5 167814.065 205348.5600 238347.1048 228291.6180 277206.9785 327150.500
#> neval cld
#> 100 a
#> 100 a
#> 100 b
#> 100 c
autoplot(result)
Increasing the number of parameters
This time we fix the number of observations at , 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
#> p5 723.859 775.0695 814.9904 800.728 850.2345 1207.070
#> p25 2896.979 2955.4480 3101.5832 3015.425 3051.4720 7878.714
#> p100 23360.606 25901.6760 28450.8048 26801.859 31062.2935 51156.347
#> p400 269599.005 292393.8260 326972.4845 314499.289 342746.1685 571642.475
#> neval cld
#> 100 a
#> 100 a
#> 100 b
#> 100 c
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.