我想在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个样本时,我需要所有可能的组合。
答案 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