【问题标题】:bernoulli trials with different probabilities不同概率的伯努利试验
【发布时间】:2020-08-22 05:07:52
【问题描述】:

我正在尝试做这样的事情(只是为了说明,我知道为什么它不起作用)。

sample(c(TRUE, FALSE), 3, prob=c(0.1,0.2,1), replace=TRUE)

我确实有我想要绘制 3 个元素的权重。所以元素 1 的成功概率应该是 0.1,元素 2 的概率应该是 0.2,元素 3 的概率应该是 1。 本质上,我正在执行一系列具有不同成功概率的伯努利试验。

我认为必须有一个简单的解决方法或其他我没有看到的选项,因为我唯一想到的就是循环

循环会很慢,因为我至少要处理 5000 个案例。

非常感谢您的任何意见。

【问题讨论】:

  • 你的意思是 rbinom(5000, 1, c(...)) 用于一些 5000 元素的 c() 吗? (PS:纯粹的实现问题,这似乎是交叉验证的主题。)
  • 哦,对不起!去哪里问比较好?至于 rbinom,我将如何为我的“人口”中的每个元素实现不同的权重?
  • Stack Overflow 是询问实施问题的地方。为了快速回答,我认为具有不同概率的 c() 向量应该注意不同的权重。

标签: r


【解决方案1】:

rbinom(n = 3, size = 1, prob = c(.10, .25, .5)) 会为您提供您所要求的内容,但输出为 0/1。如果您希望它是 TRUE/FALSE 向量,您可以调用:as.logical(rbinom(n = 3, size = 1000, prob = c(.10, .25, .5)))

length(prob) 需要等于n,否则会得到不一致的输出。

【讨论】:

  • 非常感谢!我从没想过 rbinom 能够采用不同的成功概率!
【解决方案2】:

我确实有我想要绘制 3 个元素的权重。所以元素 1 的成功概率应该是 0.1,元素 2 的概率应该是 0.2,元素 3 的概率应该是 1。本质上,我正在执行一系列具有不同成功概率的伯努利试验。

rbinom 函数是矢量化的,因此您可以执行此操作以从这样的三维分布中生成 100000 个样本

sample_func <- function(n)
  matrix(rbinom(n * 3L, 1L, c(.1, .2, 1)), nrow = 3L)

# show an example
set.seed(1)
samples <- sample_func(100000L)

# the means are as expected
rowMeans(samples)
#R> [1] 0.1 0.2 1.0

# show the first five samples
samples[, 1:5]
#R>      [,1] [,2] [,3] [,4] [,5]
#R> [1,]    0    0    0    1    0
#R> [2,]    0    1    1    0    0
#R> [3,]    1    1    1    1    1

一个更通用的示例函数是

sample_func <- function(n, prob){
  n_ele <- length(prob)
  matrix(rbinom(n * n_ele, 1L, prob), nrow = n_ele)
}

# sample from four dimensional distribution
set.seed(1)
sample_func(5L, c(.1, .2, .4, .8))
#R>      [,1] [,2] [,3] [,4] [,5]
#R> [1,]    0    0    0    0    0
#R> [2,]    0    1    0    0    1
#R> [3,]    0    1    0    1    0
#R> [4,]    0    1    1    1    1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2017-06-27
    • 2016-02-26
    相关资源
    最近更新 更多