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
函数来生成组合。
我正在尝试 运行 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
函数来生成组合。