如果我对您的理解正确,则可以分析计算您所追求的概率。
我的感觉是,您希望将所有具有相同数量的 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。