Nelly Reduan
2018-Jul-11 00:11 UTC
[R] Generate N random numbers with a given probability and condition
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 at auckland.ac.nz> Envoy? : mercredi 4 juillet 2018 16:11:11 ? : Nelly Reduan Cc : r-help at 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]]
Jim Lemon
2018-Jul-11 00:46 UTC
[R] Generate N random numbers with a given probability and condition
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 at 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 at auckland.ac.nz> > Envoy? : mercredi 4 juillet 2018 16:11:11 > ? : Nelly Reduan > Cc : r-help at 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 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.
Bert Gunter
2018-Jul-11 01:44 UTC
[R] Generate N random numbers with a given probability and condition
You need to heed Rolf's advice. N random integers by definition cannot have a fixed sum. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Tue, Jul 10, 2018 at 5:11 PM, Nelly Reduan <nell.redu at 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 at auckland.ac.nz> > Envoy? : mercredi 4 juillet 2018 16:11:11 > ? : Nelly Reduan > Cc : r-help at 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 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. >[[alternative HTML version deleted]]
Rolf Turner
2018-Jul-11 10:23 UTC
[R] [FORGED] Re: Generate N random numbers with a given probability and condition
On 11/07/18 12:46, Jim Lemon wrote:> 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)<SNIP> Jim: You should *not* do people's homework for them! cheers, Rolf -- Technical Editor ANZJS Department of Statistics University of Auckland Phone: +64-9-373-7599 ext. 88276