Skip to content

Generate random numbers under constrain

3 messages · Jue Lin-Ye, Erich Neuwirth, Mikhail Umorin

#
Hello! I am relatively new using R, but this is my contribution to the
answer. How about using a Monte-Carlo method. Generate m numbers in the
support [0,1], where m>n. Then constrain by constructing a loop that takes
every one of the elements in the m sized vector and select the ones that
sum up to one. If it is very uncommon to sum up to one, given the
distribution that you use to generate the random numbers, you can construct
a loop that generates as many random numbers as you need and then follow
the steps
1.generate
2.select

until you find a total of n number.
from [0,1]
?Best regards,?
#
You want random numbers within the n-dimensional simplex (sum xi <=1)
The easiest solution of course would be creating n-dimensions vectors
with iid uniform components on [0,1) and throwing away those
violating the inequality.
Since the volume of the n-dimensional simplex is 1/n! (factorial)
this becomes very wasteful even for low dimensions.

A possible  answer is to use the Dirichlet distribution from package lca)
since the uniform distribution on the simplex is a special case
of the Dirichlet distribution.
#
How about generating the uniform numbers sequentially and keep the running sum of all the previous numbers. At each step check if the newly generated random number plus the running sum > 1 discard the number and generate a new one, repeat the condition check. If the new number plus old sum < 1 accept the number and repeat the step. Until you got n numbers. 

Mikhail