R:我如何重复模拟多少次尝试才能以 1/10 的机会成功? (并记录尝试了多少次?)

标签 r simulation probability

这里是 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")

enter image description here

正如我在评论中提到的,我不确定为什么你认为几何分布是不合适的。 它“用于对第一次成功之前的失败次数进行建模”(来自 the Wikipedia on it )。 因此,我们可以从中采样并添加一个;这些方法是等效的,但是当样本数量较多时,这会更快:

number_of_attempts2 <- rgeom(1000, 0.1) + 1
hist(number_of_attempts2, xlab = "Number of Attempts Until First Success")

enter image description here

关于R:我如何重复模拟多少次尝试才能以 1/10 的机会成功? (并记录尝试了多少次?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65462039/

相关文章:

r - 以相反顺序枚举分位数

python - 在 Python 的多处理程序中打开和关闭循环

algorithm - 如何检测门逻辑仿真中的振荡?

c - 使用赔率的随机数生成器

r - 创建遵循概率分布的日期向量

r - Dplyr 与 group_by 变异给我不正确的值(BUG?)

javascript - 可以巧妙地使用数据表作为源数据吗?

java - 不同运行时随机输出不同

r - 使用 formatstyle datatable r 时出错

r - 重叠并固定小平面中的 x 尺度(尺度 =“free” )以制作电影