生成N个随机整数,总和为R中的M

编程入门 行业动态 更新时间:2024-10-15 06:14:56
本文介绍了生成N个随机整数,总和为R中的M的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想生成总计为M的N个随机正整数.我希望在均值为M/N且标准差较小的正态分布附近选择随机正整数(可以将其设置为约束吗?).

I would like to generate N random positive integers that sum to M. I would like the random positive integers to be selected around a fairly normal distribution whose mean is M/N, with a small standard deviation (is it possible to set this as a constraint?).

最后,您将如何概括答案以生成N个随机正数(不仅仅是整数)?

Finally, how would you generalize the answer to generate N random positive numbers (not just integers)?

我发现了其他相关问题,但无法确定如何将其答案应用于这种情况: stats.stackexchange/Questions/59096/在r中生成三个随机数总和为1

I found other relevant questions, but couldn't determine how to apply their answers to this context: stats.stackexchange/questions/59096/generate-three-random-numbers-that-sum-to-1-in-r

生成3个总和为1的随机数R

R-具有预定义的总计

推荐答案

规范化.

rand_vect <- function(N, M, sd = 1, pos.only = TRUE) { vec <- rnorm(N, M/N, sd) if (abs(sum(vec)) < 0.01) vec <- vec + 1 vec <- round(vec / sum(vec) * M) deviation <- M - sum(vec) for (. in seq_len(abs(deviation))) { vec[i] <- vec[i <- sample(N, 1)] + sign(deviation) } if (pos.only) while (any(vec < 0)) { negs <- vec < 0 pos <- vec > 0 vec[negs][i] <- vec[negs][i <- sample(sum(negs), 1)] + 1 vec[pos][i] <- vec[pos ][i <- sample(sum(pos ), 1)] - 1 } vec }

对于连续版本,只需使用:

For a continuous version, simply use:

rand_vect_cont <- function(N, M, sd = 1) { vec <- rnorm(N, M/N, sd) vec / sum(vec) * M }

示例

rand_vect(3, 50) # [1] 17 16 17 rand_vect(10, 10, pos.only = FALSE) # [1] 0 2 3 2 0 0 -1 2 1 1 rand_vect(10, 5, pos.only = TRUE) # [1] 0 0 0 0 2 0 0 1 2 0 rand_vect_cont(3, 10) # [1] 2.832636 3.722558 3.444806 rand_vect(10, -1, pos.only = FALSE) # [1] -1 -1 1 -2 2 1 1 0 -1 -1

更多推荐

生成N个随机整数,总和为R中的M

本文发布于:2023-11-30 13:59:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650246.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:整数   总和

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!