Englishman Bob
Englishman Bob

Reputation: 483

Count the Number of 6s Rolled on a Number of Dice in R

I am trying to develop code that will tell me the likelihood of rolling at least one six given 1 thru 20 die using. I am specifically trying to build a single piece of code that loops through the problem space. generates this information. The question has left me at a loss.

I have tried using the sample function and looked at contingency tables.

die1 = sample(1:6,n,replace=T)
die2 = sample(1:6,n,replace=T)
sum_of_dice = die1 + die2
counts = table(sum_of_dice)
proba_empiric = counts/sum(counts)
barplot(proba_empiric)

The above provides the basis for a probability but not for the joint probability of two die.

The final code should be able to tell me the likelihood of rolling a six on 1 die, 2 die, 3 die, all the way to twenty die.

Upvotes: 1

Views: 545

Answers (2)

lroha
lroha

Reputation: 34511

One way to simulate the probability of rolling at least one 6 using 1 to 20 die is to use rbinom():

sapply(1:20, function(x) mean(rbinom(10000, x, 1/6) > 0))

 [1] 0.1675 0.3008 0.4174 0.5176 0.5982 0.6700 0.7157 0.7704 0.8001 0.8345 0.8643 0.8916 0.9094 0.9220 0.9310
[16] 0.9471 0.9547 0.9623 0.9697 0.9718

Upvotes: 2

Ronak Shah
Ronak Shah

Reputation: 389047

If I am understanding you correctly, you have 20 dice and you want to know the probability of atleast one six happening in them.

We can write a function to roll one die

roll_die <- function() sample(6, 1)

Then write another function which rolls 20 dice and checks if there is atleast one six in it

roll_20_die <- function() {
   any(replicate(20, roll_die()) == 6)
}

and replicate this function sufficient number of times to get the probability ratio

n <- 10000
table(replicate(n, roll_20_die()))/n

# FALSE   TRUE 
#0.0244 0.9756 

Upvotes: 0

Related Questions