Hi > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-bounces@r- > project.org] On Behalf Of Johannes Radinger > Sent: Tuesday, October 08, 2013 3:38 PM > To: R help > Subject: [R] Latin Hypercube Sample and transformation to uniformly > distributed integers or classes > > Hi, > > I'd like to use Latin Hypercube Sampling (LHC) in the the context of > uncertainty / sensitivity analysis of a complex model with > approximately 10 input variables. With the LHC approach I'd like to > generate parameter combinations for my model input variables. > Therefore I came across an simple example here on the mailing list ( > https://stat.ethz.ch/pipermail/r-help/2011-June/279931.html): > > Easy Example > Parameter 1: normal(1, 2) > Parameter 2: normal(3, 4) > Parameter 3: uniform(5, 10) > > require(lhs) > N <- 1000 > x <- randomLHS(N, 3)
This put 3 columns of uniformly distributed random numbers in x > y <- x > y[,1] <- qnorm(x[,1], 1, 2) > y[,2] <- qnorm(x[,2], 3, 4) > y[,3] <- qunif(x[,3], 5, 10) > > par(mfrow=c(2,2)) > apply(x, 2, hist) > > par(mfrow=c(2,2)) > apply(y, 2, hist) > > > However, some of my parameters are uniformly distributed integer values > and/or uniformly distributed classes. So, for example one input > parameter can be "yellow", "green", "red" with equal probability. Of Maybe set.seed(333) x<-sample(c("yellow", "green", "red"), 1000, replace=TRUE) table(x) x green red yellow 334 327 339 > course these attributes can be transformed into integers (1,2,3) with a > uniform distribution. I would use xf <- factor(x) to transform it to numbers and still retaining labels. > > So far I've tried to use the round function: > > y[,3] <- round(qunif(x[,3], 5, 10)) > > which does not sample the 1 and 10 eqally to 2:8 (this is discussed > already somewhere else here on the list in another context, and the > function > sample() is suggested). How can this be applied here and how can a > column of the lhs-output be transformed in e.g integers 1:10 or the > three colors as mentioned above? Maybe cut. as.numeric(as.factor(cut(x[,1], 10))) factor(cut(x[,1], 3), labels=c("yellow", "green", "red")) Regards Petr > > thanks, > > Johannes > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.