All the tests were done on an Arch Linux x86_64 machine with an Intel(R) Core(TM) i7 CPU (1.90GHz).
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.
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().
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 neval
#> n1e2 470.708 506.725 564.9108 526.3865 572.122 3180.051 100
#> n1e3 1154.763 1357.882 1511.7186 1439.5350 1569.151 4372.745 100
#> n1e4 10191.617 11545.827 14442.0766 14080.5745 14963.346 98454.042 100
#> n1e5 158987.293 176917.256 203581.4294 195332.6805 237487.382 291056.606 100
#> cld
#> a
#> a
#> b
#> c
autoplot(result)
#> Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
#> ℹ Please use tidy evaluation idioms with `aes()`.
#> ℹ See also `vignette("ggplot2-in-packages")` for more information.
#> ℹ The deprecated feature was likely used in the microbenchmark package.
#> Please report the issue at
#> <https://github.com/joshuaulrich/microbenchmark/issues/>.
#> This warning is displayed once per session.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.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 693.854 734.765 834.9089 762.8125 814.058 3913.218 100
#> p25 2583.888 2626.153 2741.5187 2657.8970 2729.490 5694.089 100
#> p100 20323.522 22632.949 24460.4034 22824.0805 27275.087 41360.936 100
#> p400 236993.050 260930.532 294648.2106 282801.6855 317789.500 424759.013 100
#> cld
#> a
#> a
#> b
#> 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.