knitr::opts_chunk$set( collapse = TRUE, comment = "#>", dpi = 300, fig.width = 7, fig.height = 5, fig.align = "center", out.width = "100%" )
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.
library(melt) library(microbenchmark) library(ggplot2)
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()
.
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
autoplot(result)
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
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.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.