我正在寻找一个TRUE
以给定概率返回的函数。就像是:
> proba = 2/3
> function(proba)
它TRUE
以 2/3 的概率返回(或 1),以FALSE
1/3 的概率返回(或 0)
我能想到的唯一计算方法是:
> sample(c(rep(1,ceiling(proba*100)),rep(0,ceiling((1-proba)*100))),1)
但它只给出了一个近似值(而且看起来不是很好!),因为它只能处理具有有限小数位数的值。
我正在寻找一个TRUE
以给定概率返回的函数。就像是:
> proba = 2/3
> function(proba)
它TRUE
以 2/3 的概率返回(或 1),以FALSE
1/3 的概率返回(或 0)
我能想到的唯一计算方法是:
> sample(c(rep(1,ceiling(proba*100)),rep(0,ceiling((1-proba)*100))),1)
但它只给出了一个近似值(而且看起来不是很好!),因为它只能处理具有有限小数位数的值。
proba <- 2/3
# number of values:
n <- 1
as.logical(rbinom(n,size=1,prob=proba))
prob <- runif(1)>0.3333333
会为你做的。或者在一般情况下,
prob <-function(winval) runif(1)>(1-winval)
怎么样:
function(proba) sample(c(TRUE, FALSE), 1, prob = c(proba, 1 - proba))
如果您希望能够绘制任意数量的 TRUE/FALSE,而不仅仅是一个:
function(proba, size) sample(c(TRUE, FALSE), size, prob = c(proba, 1 - proba),
replace = TRUE)
仅供参考,您可以通过创建总人口然后执行选择来避免对概率的分数表示的怀疑,如下所示:
sample(c(rep(TRUE, 2), rep(FALSE, 1)), 1)
或者
sample(c(TRUE, TRUE, FALSE), 1)
通常,我们使用概率来表示数量未知或不可数的群体的选择可能性。概率被用作代理。当您知道总体的详细信息时,从数学角度来看,实际上更倾向于使用确切的总体。它还具有更准确地表示这个特定问题的副作用。
要扩展解决方案,您需要将概率转换为每个人口子集的人口总数。在这种情况下,我们有两个子集:TRUE 和 FALSE。与其将 TRUE 个体的选择可能性表示为 2/3,不如说明总种群 TRUE_N 中包含的 TRUE 个体数量,以及总种群 FALSE_N 中包含的 FALSE 个体数量。
TRUE_N <- 2
FALSE_N <- 1
sample(c(rep(TRUE, TRUE_N), rep(FALSE, FALSE_N)), 1)