[R] Generate N random numbers with a given probability and condition

Jim Lemon drj|m|emon @end|ng |rom gm@||@com
Wed Jul 11 02:46:17 CEST 2018


Hi Nell,
I may not have the right idea about this, but I think you need to do
this in two steps if it can be done. Let's say you want a sequence of
20 (N) numbers between 0 and 10 that sums to 10 (M). You can enumerate
the monotonically increasing sequences like this:

c(0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1)
c(0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2)
...
c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10)

So if you select one of these sequences at random, there will be a
further set of sequences that are permutations of it. By randomly
selecting one of those permutations, I think you can solve your
problem. However, this is going to be computationally intensive, with
the set of permutations being very large for large N. Here is an
example using N = M = 5:

# enumerate the sequences = M
rs5<-list(c(1,1,1,1,1),c(0,1,1,1,2),c(0,0,1,1,3),c(0,0,0,1,4),
 c(0,0,1,2,2),c(0,0,0,2,3),c(0,0,0,0,5))
library(crank)
# generate the permutations for one sequence (120 in this case)
rs5_s1<-permute(rs5[[sample(1:length(rs5),1)]])
# select one of the permutations at random
rs5_s1[sample(1:dim(rs5_s1)[1],1),]
[1] 4 0 1 0 0

Jim

On Wed, Jul 11, 2018 at 10:11 AM, Nelly Reduan <nell.redu using hotmail.fr> wrote:
> Thank you very much for your reply.
>
>
> By omitting the probability, the expected results could be:
>
>
> c(2, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0)
>
>
> c(0, 0, 1, 0, 0, 1, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0)
>
>
> If I omit the probability, I would like to generate N random positive integers that sum to M and the integers would be selected from a uniform distribution.
>
>
> Many thanks for your time
>
> Nell
>
>
> ________________________________
> De : Rolf Turner <r.turner using auckland.ac.nz>
> Envoyé : mercredi 4 juillet 2018 16:11:11
> À : Nelly Reduan
> Cc : r-help using r-project.org
> Objet : Re: [R] Generate N random numbers with a given probability and condition
>
>
> On 05/07/18 10:21, Nelly Reduan wrote:
>
>> Dear all,
>>
>> I would like to generate N random numbers with a given probability and condition but I'm not sure how to do this.
>> For example, I have N = 20 and the vector from which to choose is seq(0, 10, 1). I have tested:
>>
>> x <- sample(seq(0, 10, 1), 20, replace=TRUE, prob=rep(0.28, times=length(seq(0, 10, 1))))
>>
>> But I don�t know how to put the condition sum(x) <= max(seq(0, 10, 1)).
>> Many thanks for your time.
>
> Your thinking requires considerable clarification.
>
> (1) Note that seq(0,10,1) is just 0, 1, 2, ..., 10.
>
> (2) Hence length(seq(0,10,1)) is 11.
>
> (3) Likewise max(seq(0,10,1)) is 10.
>
> (4) Your prob vector is *constant* --- so specifying "prob" makes
>      no difference --- the result is the same as if you omitted "prob".
>
> (5) You need to think carefully about what you really mean by "random".
>      In what way do you want the final result to be "random"?
>
> I expect that the lecturer who assigned this problem to you  needs to
> clarify his/her thinking as well.
>
> cheers,
>
> Rolf Turner
>
> --
> Technical Editor ANZJS
> Department of Statistics
> University of Auckland
> Phone: +64-9-373-7599 ext. 88276
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using 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.




More information about the R-help mailing list