This package offers a simple method for the generation of random uniform, LHS, Sobol and Halton sequences of n points in d dimension. Basically the package delegates to other packages and offers a unified interface. Additionally, an exact method and an approximate method based on threshold accepting optimization for the calculation of the star discrepancy measure is included.
Here, we generate each one uniform, latin hypercube sample, Halton and Sobol design with n=20 points in k=2 dimensions and calculate its exact disrepancy.
library(dandy)
library(ggplot2)
n = 50
methods = c("uniform", "improvedlhs", "halton", "sobol")
designs = lapply(methods, function(method) {
dandy::design(n = n, k = 5, method = method)
})
# caluclate star discrepancy
discr.exact = sapply(designs, dandy::stardiscrepancy, method = "exact")
discr.approx = sapply(designs, dandy::stardiscrepancy, method = "ta")
# visualize
designs = do.call(rbind, designs)
groups = sprintf("%s (%.4f)", methods, discr.exact)
designs$method = factor(rep(groups, each = n))
pl = ggplot(designs, aes(x = x1, y = x2))
pl = pl + geom_point()
pl = pl + facet_grid(. ~ method)
print(pl)
The package is a one-man project by Jakob Bossek at the moment of writing. However, the package interfaces a neat implementation of approximate star-discrepancy caluclation by Magnus Wahlström.
Gnewuch, Michael, Magnus Wahlström, and Carola Winzen. “A NEW RANDOMIZED ALGORITHM TO APPROXIMATE THE STAR DISCREPANCY BASED ON THRESHOLD ACCEPTING.” SIAM Journal on Numerical Analysis 50, no. 2 (2012): 781-807. www.jstor.org/stable/41582760.
You can contribute by identifing annoying bugs in the issue tracker. This is also the preferred place to ask questions and raise feature requests. Moreover, users can contribute even more by forking the dandy repository, implementing features or bugfixes and raising a pull request.
The package will be available at CRAN when it is done. If you are interested in trying out and playing around with the current github developer version use the devtools package and type the following command in R:
remotes::install_github("jakobbossek/dandy")
Please address questions and missing features about the dandy as weell as annoying bug reports in the issue tracker. Pay attention to explain your problem as good as possible. At its best you provide an example, so I can reproduce your problem quickly. Please avoid sending e-mails.