在给定概率的情况下,通过替换对抽样进行建模

Modelling a sampling with replacement, given probabilities

我想在 R 中模拟一个带替换的采样(比如 urn 模型)。也就是说,我有三个不同的事件(比如:1,2 和 3(实际上它们是绝对的,但我认为目前这并不重要))并且我知道每个事件的概率:

1 --> 0.5    
2 --> 0.2   
3 --> 0.3

现在我想以 50 个替换样本为例,我想知道三个不同事件的每种可能组合的概率。

我的想法是使用 rmultinom 生成这些样本。

rmultinom(n=50,size=3,prob=c(0.5,0.2,0.3))

现在我得到 50 个随机(?)选择的样本,但是当我取 50 个样本并进行替换时,我需要所有可能的组合。

如果我没理解错的话,你所求的概率可以通过分析计算出来。

我的感觉是,您希望将所有具有相同数量的 1、2 和 3 的抽奖视为等同的(如果不是,请参见下文)。也就是说,49 个连续 1 后跟 2 与 2 后跟 49 个连续 1 一样算作 50 次平局 "outcome"。

在这种情况下,您要查找的是针对 (p1 = 0.5,p2 = 0.2,p3 = 0.3) 和计数 c1、c2 和 c3 计算的多项式概率质量函数的值, 1s、2s 和 3s(这些总和应为 50)。您可以将 R 中的多项式 PMF 计算为:

counts = c(c1, c2, c3)
myProbs = c(0.5, 0.2, 0.3)
dmultinom(x = counts, prob = myProbs)

现在剩下的就是枚举50次抽奖中可能出现的1、2、3的所有可能组合。调用函数 nsimplex(3,50)(来自 combinat 包)告诉我们有 1326 个这样的函数,调用函数 xsimplex(3,50)(在同一个包中找到)会在矩阵中为我们生成它们形式。以下是 1326 列中的前五列:

      [,1] [,2] [,3] [,4] [,5]
 [1,]   50   49   49   48   48
 [2,]    0    1    0    2    1
 [3,]    0    0    1    0    1

然后我们只需要使用 apply 按列计算 dmultinom 对每一列的计算:

mySimplex = xsimplex(3, 50)
myProbs = c(0.5, 0.2, 0.3)
results = apply(mySimplex, 2, dmultinom, prob = myProbs)

向量 results 中的第 n 个条目将是矩阵 mySimplex.

第 n 列中计数的概率

这是你想要的吗?

不同的排列: 如果你想以不同的方式计算不同的排列,那么任何单个排列的概率就是:

 0.5^(c_1) * 0.2^(c_2) * 0.3^(c_3)

其中 c_1 是 1 的数量,c_2 是 2 的数量,c_3 是平局中的 3 的数量。但是,如果您想列举所有这些,您可能需要再考虑一下!每个字符为 1、2 或 3 的可能的唯一长度 50 序列的数量是 3^50 > 10^23.