r - 有没有办法在 R 中生成数据,其中观察的总和等于特定值?
问题描述
我正在寻找一种方法来生成不同的数据帧,其中变量随机分布在一组观察值中,但这些值的总和加起来是预定的总数。更具体地说,我正在寻找一种在 15 个政党之间随机分配 20.000.000 张选票的方法。我在论坛上看了一会儿,但似乎找不到答案,在尝试自己生成数据时,我一无所获;我什至不知道从哪里开始。分配本身并不重要,尽管我希望能够影响它分配选票的方式。
谢谢 :)
解决方案
您可以制作一个包含 20,000,000 个数字 1 到 15 样本的向量,然后从中制作一个表格,但这似乎在计算上相当昂贵,并且会导致不切实际地平均分配选票。相反,您可以对从均匀分布中抽取的 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
这将更接近现实生活中的实际投票数,少数高票方和大量低票方。
推荐阅读
- c++ - C++通过builder实例化一个对象
- javascript - 基于MongoDB中Object内部数组的过滤器
- reporting-services - 有没有办法在 ssrs 中获取行的字母编号而不是数字编号?
- php - 如果有人将 / 添加到 url,则重定向
- reactjs - 来自状态的 React Ant Design defaultValue 不起作用
- html - 移动版页面不向下滚动
- arrays - 在scala中重复函数n次
- api - Confluence REST API 不会使用新编辑器创建页面
- javascript - 如何避免点击带ID的锚点时跳到顶部
- c# - 如何在 C# 中计算没有 WMI 和性能计数器的 CPU 使用率?