【问题标题】:How to sample according to a long array of probabilities of being True in R?如何根据在 R 中为真的一长串概率进行采样?
【发布时间】:2020-01-18 02:52:52
【问题描述】:
N <- 1000
arr_p_True <- runif(N)
arr_simulated <- sapply(arr_p_True, function(p) {
  sample(c(T, F), 1, prob = c(p, 1 - p))
})

arr_p_True 是我想要得到的,但是对于非常大的 N,这是非常低效的。在这种情况下,sample() 似乎不是要考虑的正确函数,因为它在选择x 中的每个元素的概率上进行了矢量化,但没有在x 中选择第一个元素的概率上进行了矢量化根据我的示例的要求。

我找不到合适的关键字...我继续被引导回sample()。任何帮助表示赞赏。

【问题讨论】:

    标签: r random vectorization probability


    【解决方案1】:

    我觉得你可以的

    arr_p_True <- runif(N)
    as.logical(rbinom(N, size = 1, prob = arr_p_True))
    

    但是如果arr_p_True在你的真实代码中是runif(N),那么这相当于

    as.logical(rbinom(N, size = 1, prob = 0.5))
    

    【讨论】:

      【解决方案2】:

      您可以从单位间隔生成一个随机数向量。概率p 的值将小于p

      N <- 1000
      arr_p_True <- runif(N)
      arr_simulated <- runif(N) < arr_p_True
      

      【讨论】:

      • 优雅。简单但非常直观!
      猜你喜欢
      • 2022-07-26
      • 2019-03-19
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多