r - R - 在具有平均值的区间内生成值
问题描述
如何在区间 [1:5] 内生成一组随机值,平均值为 1.8?我试过样本,但不知道如何包含平均值.. rpois 不断返回零值
解决方案
如果您谈论的是整数 1:5,那么 Poisson 是一个合理的选择。只需将 lambda 设置为 0.8 并添加 1:
set.seed(1)
x <- rpois(2000, 0.8) + 1
x <- x[x < 6]
mean(x)
#> [1] 1.784677
min(x)
#> [1] 1
max(x)
#> [1] 5
head(x, 30)
#> [1] 1 1 2 3 1 3 3 2 2 1 1 1 2 1 2 2 2 5 1 2 3 1 2 1 1 1 1 1 3 1
hist(x, breaks = 30)
如果您希望均值恰好为1.8,那么您并不是真的在抽取随机样本,但应该可以切换一些数字以获得一组或多或少符合您标准的随机数:
x <- sample(c(2, x[-which(x == 1)[1:38]]))
mean(x)
#> [1] 1.8
如果您想要任何实数值,您可以尝试使用伽马分布的相同技巧:
set.seed(1)
x <- rgamma(1000, 2, 2.5) + 1
mean(x)
#> [1] 1.794942
max(x)
#> [1] 4.918468
min(x)
#> [1] 1.013304
head(x, 30)
#> [1] 1.332346 2.428303 2.385268 1.820325 2.554164 2.016216
#> [7] 1.915227 1.459717 1.272409 1.334249 1.462368 1.578189
#> [13] 1.242602 2.069755 1.926223 2.134657 2.044341 1.637085
#> [19] 2.543066 2.249806 1.309245 1.388618 1.490084 1.550701
#> [25] 1.324007 1.115011 2.184496 1.408031 2.259906 2.032122
hist(x, breaks = 30)
调整其中一些数字以给出精确为 1.8 的真实均值会更加困难(尽管并非不可能)。
推荐阅读
- msbuild - 如何在 Azure 管道中从 MsBuild 创建 Azure 云服务包
- java - WorkManager 约束(setRequiresCharging)在模拟器上不起作用
- java - 如何在我的方法中获取已经存在的文件(在我的计算机上)并将其转换为 InputStream?
- python - 什么相当于 Makefile 对 SConstruct 的包含?
- asp.net - 尝试路由参数以捕获家庭控制器上的所有索引操作
- hibernate - 使用 Spring boot 时的两个版本的 Hibernate
- docker - 连接到远程 Docker 守护进程
- facebook - 使用 Facebook graph api 的网站加载速度非常慢
- hadoop - hadoop 3.1.2 ./start-all.sh 错误,意外标记 `<' 附近的语法错误
- npm - Gulp 4 任务未与并行/串行同步运行