R中的概率和

时间:2015-08-16 17:56:49

标签: r probability

我试图在不使用骰子包的情况下在R中运行一些概率代码。我知道当有两个向量时,可以使用外部命令生成一个矩阵,该矩阵将计算骰子卷的总和和值。是否有类似于五个骰子卷可以做同样事情的东西?

我正在努力在R中滚动五个六面骰子并生成一个代码来计算滚动总和在15到20之间的概率。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

你总是可以通过模拟来做到这一点:

set.seed(1020)
nn<-1e6 #number simulations
#on each simulation, check whether the sum of 5
#  independently rolled (6-sided) dice is less
#  than 2.5 away from 17.5--equivalently, that
#  the sum is between 15 & 20; the probability
#  is the percentage of the time that this happens,
#  or equivalently, the mean of the indicator function
> mean(replicate(nn,abs(sum(sample(6,5,T))-17.5)<=2.5))
[1] 0.556971

实际的解决方案是4332/7776 = .5570988,可以找到这个(效率低,但是谁关心因为6 ^ 5 = 7776)循环:

tot<-0L
for (i1 in 1:6){
  for (i2 in 1:6){
    for (i3 in 1:6){
      for (i4 in 1:6){
        for (i5 in 1:6){
          s<-i1+i2+i3+i4+i5
          tot<-tot+(s>=15&s<=20)
        }
      }
    }
  }
}
> tot/6^5
[1] 0.5570988

答案 1 :(得分:2)

你可以递归地应用outer,首先计算2个骰子的总和,然后用第3个骰子计算这些结果的总和,然后......

但更高效的可能是在这种情况下使用expand.grid

> dice <- expand.grid( 1:6, 1:6, 1:6, 1:6, 1:6 )
> dice.sums <- rowSums(dice)
> mean( 15 <= dice.sums & dice.sums <= 20 )
[1] 0.5570988

您还可以使用combinat包中的hcube函数生成组合。