有没有办法在 R 中生成数据,其中观察值的总和等于特定值?
Is there a way to generate data in R where the sum of the observations add up to a specific value?
我正在寻找一种生成不同数据框的方法,其中变量随机分布在一组观察值中,但这些值的总和等于预定总数。更具体地说,我正在寻找一种在 15 个政党中随机分配 20.000.000 票的方法。我环顾了论坛,但似乎找不到答案,在尝试自己生成数据时,我一无所获;我什至不知道从哪里开始。分配本身并不重要,但我希望能够影响它分配选票的方式。
谢谢:)
你 可以 制作一个包含 20,000,000 个数字 1 到 15 样本的向量,然后从中制作一个 table,但这似乎在计算上相当昂贵,并且会导致在不切实际的平分选票中。相反,您可以将从均匀分布中抽取的 15 个数字的累积和归一化,然后乘以 2000 万。这将提供更现实的选票分布,一些政党的选票比其他政党多得多。
my_sample <- cumsum(runif(15))
my_sample <- c(0, my_sample/max(my_sample))
votes <- round(diff(my_sample) * 20000000)
votes
#> [1] 725623 2052337 1753844 61946 1173750 1984897
#> [7] 554969 1280220 1381259 1311762 766969 2055094
#> [13] 1779572 2293662 824096
这些加起来将达到 20,000,000:
sum(votes)
#> [1] 2e+07
我们可以看到相当“自然”的选票分布。
barplot(setNames(votes, letters[1:15]), xlab = "party")
我猜如果你在上面的解决方案中用 rexp
代替 runif
这将更接近现实生活中的实际投票数字,少数高票政党和大量低票党。
我正在寻找一种生成不同数据框的方法,其中变量随机分布在一组观察值中,但这些值的总和等于预定总数。更具体地说,我正在寻找一种在 15 个政党中随机分配 20.000.000 票的方法。我环顾了论坛,但似乎找不到答案,在尝试自己生成数据时,我一无所获;我什至不知道从哪里开始。分配本身并不重要,但我希望能够影响它分配选票的方式。
谢谢:)
你 可以 制作一个包含 20,000,000 个数字 1 到 15 样本的向量,然后从中制作一个 table,但这似乎在计算上相当昂贵,并且会导致在不切实际的平分选票中。相反,您可以将从均匀分布中抽取的 15 个数字的累积和归一化,然后乘以 2000 万。这将提供更现实的选票分布,一些政党的选票比其他政党多得多。
my_sample <- cumsum(runif(15))
my_sample <- c(0, my_sample/max(my_sample))
votes <- round(diff(my_sample) * 20000000)
votes
#> [1] 725623 2052337 1753844 61946 1173750 1984897
#> [7] 554969 1280220 1381259 1311762 766969 2055094
#> [13] 1779572 2293662 824096
这些加起来将达到 20,000,000:
sum(votes)
#> [1] 2e+07
我们可以看到相当“自然”的选票分布。
barplot(setNames(votes, letters[1:15]), xlab = "party")
我猜如果你在上面的解决方案中用 rexp
代替 runif
这将更接近现实生活中的实际投票数字,少数高票政党和大量低票党。