使用替换,给定概率对采样建模

时间:2015-07-24 09:21:09

标签: r replace sample multinomial

我想在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 个答案:

答案 0 :(得分:0)

如果我正确理解你,你可以通过分析计算你所追求的概率。

我的感觉是,您希望将具有相同数量的1s,2s和3s的所有绘图视为等效(如果没有,请参见下文)。也就是说,49连续1s,然后是2计数,相同的50-draw;#34;结果"作为2后跟49连胜1。

在这种情况下,你要寻找的是多项式概率质量函数的值(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次抽奖中可能出现的1s,2s和3s的所有可能组合。调用函数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抽奖中的三个数量。但如果你想要列举所有这些,你可能想再想一想!每个字符为1,a 2或a 3的可能的唯一长度-50序列的数量是3 ^ 50> 3。 10 ^ 23