sample(。)与计算的概率

时间:2018-06-28 09:19:46

标签: r

以下代码/原因在哪里?

如果我有item件物品,并且我想计算<div class="description text-left" v-for="item in siteObject.line_info"> <small>{{item.lineid}}</small> <small>{{item.site_site_id}}</small> <small>{{item.site_id}}</small> </div> 替换为的抽奖的组合数量(即顺序无关紧要),我可以使用二项式系数:

n

当我想计算元素k不属于抽奖的可能性时,我会使用

choose(n + k - 1, k)

(基本上,我可以选择的选项较少)。

例如使用i时,我有以下choose(n + k - 1 - 1, k) n=3, k= 3)抽奖:

10

以下元素choose(3 + 3 - 1, 3)# AAA, AAB, ABB, BBB, BBC, BCC, CCC, CCA, CAA, ABC )不出现元素'A'(例如):

4

到目前为止,一切都很好。因此,我可以计算出我在choose(3 + 3 - 1 - 1, 3)上没有出现# BBB, BBC, BCC, CCC 的情况下抽奖的可能性:

n = k

因此,如果我模拟绘制(使用i)并重复freeFromCounts <- function(n) choose(2 * n - 2, n) totalCounts <- function(n) choose(2 * n - 1, n) ratio <- function(n) freeFromCounts(n) / totalCounts(n) ## (n - 1) / (2 * n - 1) 次,这就是我的问题,那么我期望看到sample(.)绘制在元素n.rep所在的位置(例如)不存在。但是,事实并非如此。我的错误在哪里?

n.rep * ratio(n)

1 个答案:

答案 0 :(得分:1)

一位同事找到了解决方案。 sample采样不是无序而是有序,即[1, 2, 3][3, 2, 1]之间有区别。有了这些知识,数字是相同的:9 ^ 10 / 10 ^ 10 = 0.3486784

因此,要对原始问题进行仿真,您必须提出sample的变体,该变体进行无序采样。 Idea正在遵循著名的无序抽样替换公式推导(例如http://mathworld.wolfram.com/Multichoose.html

sampleUnordered <- function(n, k) {
  aS <- rep(0, n + k -1)
  aS[!seq_along(aS) %in% sample(n + k - 1, k)] <- seq.int(n-1)
  rl <- rle(aS)
  zeros <- which(rl$values == 0)
  good <- rl$lengths[zeros]
  nr <- c(rl$values, n)[zeros + 1]
  rep(nr, good)
}

sim <- function(n, n.rep = 10000, x0 = 1) {
    sum(replicate(n.rep, {
       s <- sampleUnordered(n, n)
       all(s != x0)
    })) / n.rep
}

set.seed(12)
sim(10, 1e6) # [1] 0.473234