0

我想在 R 中对带有替换的采样进行建模(如骨灰盒模型)。也就是说,我有三个不同的事件(例如: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 个替换样本时,我需要所有可能的组合。

4

1 回答 1

0

如果我对您的理解正确,则可以分析计算您所追求的概率。

我的感觉是,您希望将所有具有相同数量的 1s、2s 和 3s 的平局视为等效(如果不是,请参见下文)。也就是说,49 个连续 1 和 2 被视为与 2 和 49 个连续 1 相同的 50 平“结果”。

在这种情况下,您要查找的是针对 (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然后我们只需要使用column-wise来评估每列的 dmultinom :

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

向量中的第 n 个条目results将是矩阵第 n 列中计数的概率mySimplex

这就是你所追求的吗?

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

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

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

于 2015-07-24T17:12:40.863 回答