[R] Sampe numbers

Greg Snow 538280 at gmail.com
Tue Jul 19 20:05:57 CEST 2016


I think that you need to reconsider your conditions.

The smallest number in your candidate set is 1, so if you sample 100
1's they will add to 100 which is greater than 50.  So to have a set
of numbers that sums to 50 you will need to either include negative
numbers, 0's, or sample fewer than 50 values.

If you really meant sum to 500 or sample 10 numbers (still selecting
any single number over 50 will make the sum to large) then this
becomes possible.  There are a few ways to do it, which is best
depends on what you are really trying to accomplish (and note that
with the constraint, the values will not be iid).

One option is rejection sampling:  take a sample, if it sums correctly
then you are done, if not then throw out that sample and try a new
one.  This will be very inefficient, but is easy enough to code and
with a fast enough computer may be acceptable.

Another option is adjustment:  take a sample and compute the sum, if
it is to low then add the difference to one of your values (lowest,
chosen at random, other) or split it up and add to multiple values.
If the sum is too high, then subtract from your numbers until the sum
is correct (checking that you don't go below any lower bounds).

Another option is to round values generated from a Dirichlet
distribution multiplied by your total (you may need to round one value
differently than the default).

Another option is to consider it a balls and urns problem:  You have
500 balls (assuming the true sum is to be 500) that you want
distributed into 100 urns.  If each urn needs at least 1 ball (minimum
value of 1) then put 1 ball in each urn, then for the remaining 400
balls, randomly choose an urn to put each into.  Then count the number
of balls in each urn and those are your 100 numbers that sum to 500
(as long as no balls bounced off the lip of the urn and rolled under
the couch).

There are probably other ways, but these are some things to get you started.

On Tue, Jul 19, 2016 at 11:41 AM, Frederic Ntirenganya
<ntfredo at gmail.com> wrote:
> Hi Guys,
> I am trying to sample 100 numbers from 1:100
> i did it  like this:
>
> sample(1:100,100, replace= TRUE)
> but i want again include a constraint that their sum must be equal to 50
>
> How could I do it?
>
> Cheers
>
> Frederic Ntirenganya
> Maseno University,
> African Maths Initiative,
> Kenya.
> Mobile:(+254)718492836
> Email: fredo at aims.ac.za
> https://sites.google.com/a/aims.ac.za/fredo/
>
>         [[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.



-- 
Gregory (Greg) L. Snow Ph.D.
538280 at gmail.com



More information about the R-help mailing list