Draws a Latin Hypercube Sample from a set of uniform distributions for use in creating a Latin Hypercube Design. This sample is taken in a random manner without regard to optimization.
randomLHS(n, k, preserveDraw)
The number of partitions (simulations or design points)
The number of replications (variables)
Default:FALSE. Ensures that two subsequent draws
with the same
Latin hypercube sampling (LHS) was developed to generate a distribution
of collections of parameter values from a multidimensional distribution.
A square grid containing possible sample points is a Latin square iff there
is only one sample in each row and each column. A Latin hypercube is the
generalisation of this concept to an arbitrary number of dimensions. When
sampling a function of
k variables, the range of each variable is divided
n equally probable intervals.
n sample points are then drawn such that a
Latin Hypercube is created. Latin Hypercube sampling generates more efficient
estimates of desired parameters than simple Monte Carlo sampling.
This program generates a Latin Hypercube Sample by creating random permutations
of the first
n integers in each of
k columns and then transforming those
integers into n sections of a standard uniform distribution. Random values are
then sampled from within each of the n sections. Once the sample is generated,
the uniform sample from a column can be transformed to any distribution by
using the quantile functions, e.g. qnorm(). Different columns can have
k Latin Hypercube Sample matrix with values uniformly distributed on [0,1]
Rob Carnell and D. Mooney
Stein, M. (1987) Large Sample Properties of Simulations Using Latin Hypercube Sampling. Technometrics. 29, 143–151.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# draw a Latin hypercube randomLHS(4, 3) # transform a Latin hypercube X <- randomLHS(5, 2) Y <- matrix(0, nrow=5, ncol=2) Y[,1] <- qnorm(X[,1], mean=3, sd=0.1) Y[,2] <- qbeta(X[,2], shape1=2, shape2=3) # check the preserveDraw option set.seed(1976) X <- randomLHS(6,3,preserveDraw=TRUE) set.seed(1976) Y <- randomLHS(6,5,preserveDraw=TRUE) all(abs(X - Y[,1:3]) < 1E-12) # TRUE