Hi, I would like to generate random numbers in R with some constraints: - my vector of numbers must contain 410 values; - min value must be 9.6 and max value must be 11.6; - sum of vector's values must be 4200. Is there a way to do this in R? And is it possible to generate this series in such a way that it follows a specific distribution form (for example exponential)? Thank you in advance, D. [[alternative HTML version deleted]]
Am Wed, 27 Jan 2021 09:03:15 +0100 schrieb Denis Francisci <denis.francisci at gmail.com>:> Hi, > I would like to generate random numbers in R with some constraints: > - my vector of numbers must contain 410 values; > - min value must be 9.6 and max value must be 11.6; > - sum of vector's values must be 4200. > Is there a way to do this in R? > And is it possible to generate this series in such a way that it > follows a specific distribution form (for example exponential)? > Thank you in advance,In principle it should be possible. But I guess you are asking too much with three given values considering that you only have one paramter for the exponential distribution. For instance, if you only had given min and max, and wanted a normal distribution then you could have just taken 410 random values from a standard normal: x=rnorm(410) then centered it: x=x-mean(x) then scaled it so its span equals the one for your given max (M) and min (m) values: x=x*(M-m)/(max(x)-min(x)) and finally shift it such that the mininum becomes m: x=x-min(x)+m. Note however, that the things you are allowed to do with your vector of random numbers depend on the distribution if you want the result to still follow that type of distribution.
u <- runif (410) u <- (u - min (u) ) / diff (range (u) ) constrained.sample <- function (rate) { plim <- pexp (c (9.6, 11.6), rate) p <- plim [1] + diff (plim) * u qexp (p, rate) } diff.sum <- function (rate) sum (constrained.sample (rate) ) - 4200 rate <- uniroot (diff.sum, c (1, 2) )$root q <- constrained.sample (rate) length (q) range (q) sum (q) On Wed, Jan 27, 2021 at 9:03 PM Denis Francisci <denis.francisci at gmail.com> wrote:> > Hi, > I would like to generate random numbers in R with some constraints: > - my vector of numbers must contain 410 values; > - min value must be 9.6 and max value must be 11.6; > - sum of vector's values must be 4200. > Is there a way to do this in R? > And is it possible to generate this series in such a way that it follows a > specific distribution form (for example exponential)? > Thank you in advance, > > D. > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.