--- title: "Performance" author: Eunseop Kim output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Performance} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include=FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", dpi = 300, fig.width = 7, fig.height = 5, fig.align = "center", out.width = "100%" ) ``` ```{r, echo=FALSE} library(melt, warn.conflicts = FALSE) ``` 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 \(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()`. ```{r} 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: ```{r message=FALSE} result 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. ```{r} 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 ) ) ``` ```{r message=FALSE} 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.