这里是 R 和概率菜鸟。我希望创建一个直方图,显示返回正面所需的尝试次数的分布,对相当于不公平加权的硬币(0.1 正面,0.9 反面)重复 1000 多次模拟运行。
根据我的理解,这不是几何分布或二项式分布(但可能会利用其中任何一个来创建模拟结果)。
我希望为其建模的现实世界场景是《塞尔达传说:时之笛》游戏的快速通关。此速通游戏的目标之一是从角色处获取元素,该角色每次尝试都有十分之一的机会为玩家提供该元素。因此,玩家一旦收到该元素就会停止尝试(每次尝试都有 1/10 的机会收到该元素)。每次运行时,运行者/观看者都会记录在运行期间尝试接收元素的次数,因为这会影响运行者完成游戏所需的时间。
这是我想要创建的示例:
(如果可能的话,在 x 轴上有更详细的标签)。在此过程中,我手动以 1/10 的概率一遍又一遍地翻转虚拟硬币。一旦我得到了成功的结果,我记录了它在 R 中对向量进行了多少次尝试,然后重复大约 100 次 - 然后我将这个向量映射到直方图上,以可视化通常尝试次数的分布情况为了获得成功的结果 - 基本上,我想自动化这个模拟,而不是我必须手动翻转虚拟的不公平硬币,写下在正面之前尝试了多少次,然后自己将其输入到 R 中)。
最佳答案
我不确定这是否正是您想要的,但是如果您为手动掷硬币创建一个函数,则可以使用 replicate()
多次调用它:
foo <- function(p = 0.1) {
i <- 0
failure <- TRUE
while ( failure ) {
i <- i + 1
if ( sample(x = c(TRUE, FALSE), size = 1, prob = c(p, 1-p)) ) {
failure <- FALSE
}
}
return(i)
}
set.seed(42)
number_of_attempts <- replicate(1000, foo())
hist(number_of_attempts, xlab = "Number of Attempts Until First Success")
正如我在评论中提到的,我不确定为什么你认为几何分布是不合适的。 它“用于对第一次成功之前的失败次数进行建模”(来自 the Wikipedia on it )。 因此,我们可以从中采样并添加一个;这些方法是等效的,但是当样本数量较多时,这会更快:
number_of_attempts2 <- rgeom(1000, 0.1) + 1
hist(number_of_attempts2, xlab = "Number of Attempts Until First Success")
关于R:我如何重复模拟多少次尝试才能以 1/10 的机会成功? (并记录尝试了多少次?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65462039/