R 中的概率和

Probability Sum in R

我正在尝试 运行 R 中的一些概率代码而不使用 dice 包。我知道当有两个向量时,可以使用外部命令生成一个矩阵来计算掷骰子的总和和值。有没有类似的东西可以做五个骰子的相同事情?

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

有什么建议吗?

你总是可以通过模拟来完成:

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

您可以递归应用 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 函数来生成组合。