On 04/07/2018 6:21 PM, 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

I'd recommend an MCMC solution to this problem. Set up a distribution that is uniform on vectors that satisfy the conditions, with penalties on vectors that don't. Use the Metropolis algorithm with proposals that pick a pair of entries and increase one, decrease the other, then let MCMC run. At the end, filter out the cases that violate the conditions.

The hard part is knowing how long to let it run for a satisfactory sample, and how correlated later draws will be. Propp and Wilson's perfect sampling algorithm might allow an exact draw, though I don't quite see how, and I'm not sure it would be worth the trouble. Just run for a few thousand steps and it should be fine.

Duncan Murdoch

______________________________________________
R-help@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.

Reply via email to