我有三个不同的事件(1,2,3)具有不同的概率(0.15,0.76,0.09),我想用替换画5次。 我现在可以使用
确定可能的组合数nsimplex(3,5) ### =21
来自combinat-package的。 我可以使用
确定每种组合的概率mySimplex <- xsimplex(3,5)
myProbs<-c(0.15, 0.76, 0.09)
results<- apply(mySimplex,2,dmultinom,prob=myProbs)
此外,我当然可以通过计算3 ^ 5 = 243来确定排列数。
但是,我如何知道在不计算手动计算的情况下绘制相同组合的每个排列的频率?也就是说,我的每个组合中有多少个排列?
如果我没有正确理解,那么有243种排列可以构建21种不同的组合。现在我的问题是,每个组合构建了多少个排列。例如。 {1,1,1,1,1}组合只会建立一次,而其他组合则由几种排列组成。
我想你可以通过使用每个组合的概率来实现这个目标,但我不知道该怎么做?或者还有其他方法可以在R中轻松确定吗? 提前谢谢。
答案 0 :(得分:2)
项目3的a
无法区分的副本的排列数,b
,项目3的c
,其中a + b + c = N
为N! / (a! b! c!)
例如,如果您有(a,b,c) = (3,1,1)
,则会有5!/(3! 1! 1!) = 20
个安排。
c b a a a b a c a a a b a a c a a c a b
c a b a a b a a c a a c b a a a a b c a
c a a b a b a a a c a c a b a a a b a c
c a a a b a b c a a a c a a b a a a b c
b c a a a a b a c a a a c b a a a a c b
一般来说,我们可以按如下方式计算数字
nperm<-function(...) {
args<-as.numeric(list(...));
num<-lfactorial(sum(args));
den<-sum(lfactorial(args));
return(round(exp(num-den)));
}
所以,例如,
x<-expand.grid(0:5,0:5,0:5)
x<-x[rowSums(x)==5,]
x[,"nperm"]<-apply(x,1,function(x) do.call(nperm,as.list(x)))
Var1 Var2 Var3 nperm
5 0 0 1
4 1 0 5
3 2 0 10
2 3 0 10
1 4 0 5
0 5 0 1
4 0 1 5
3 1 1 20
2 2 1 30
1 3 1 20
0 4 1 5
3 0 2 10
2 1 2 30
1 2 2 30
0 3 2 10
2 0 3 10
1 1 3 20
0 2 3 10
1 0 4 5
0 1 4 5
0 0 5 1
sum(x[,"nperm"]) == 243
,正如所料。
答案 1 :(得分:1)
为了使这个可重现,我需要使用set.seed(<some_value>)
,但这只是尝试使用sample
绘制不同的组合(不考虑排列不同。如果排列被认为是不同的,然后取出sort
步骤:
table( # get the counts of distinct combinations
apply( # this will collapse values by column
replicate(100000, # yields a 100,000 column matrix
{sample(c("1","2","3"), 5 ,repl=TRUE, prob=c(.5,.25,.25) )}),
2, function(x) paste(sort(x), collapse=".")) )
1.1.1.1.1 1.1.1.1.2 1.1.1.1.3 1.1.1.2.2 1.1.1.2.3 1.1.1.3.3 1.1.2.2.2
3090 7705 8144 7851 15408 7649 3997
1.1.2.2.3 1.1.2.3.3 1.1.3.3.3 1.2.2.2.2 1.2.2.2.3 1.2.2.3.3 1.2.3.3.3
11731 11554 3940 949 3844 5955 4019
1.3.3.3.3 2.2.2.2.2 2.2.2.2.3 2.2.2.3.3 2.2.3.3.3 2.3.3.3.3 3.3.3.3.3
961 99 506 990 997 510 101
A.Webb建议我们将理论dmultinom
与实践进行比较:
dmultinom(c(4,1,0),prob=c(0.5,0.25,0.25))*2
[1] 0.15625
因此,对于第一个值3125的预测看起来与3090时的模拟和第二个和第三个值以及7812.5对比7705和8144相比是可以准确的。