The Simplest Monte Carlo Simulation (Coin Betting Game)

Suppose we are playing a game in which a player receives \$1 if a coint toss is head and loses \$1 if the coin toss is tails.I will denote the loss as -\$1. The player would like to know his or her winning or losses after a certain number of trials. For each trial, we sample 1 or -1 then sum the outcomes across the total trials to get the final win.

# A function that samples 1 or -1 n number of times
bet <- function(n = 50) {
win <- sample(c(-1, 1), size = n, replace = TRUE)
sum(win)
}

# If we bet 100 times, what is our winning?
bet(100)  # This of course will be different each time you run the function

## [1] -12


We can plot the different paths indicating the cumulative wins at each trial.

par(mfrow = c(2, 2), bty = "n")
for (i in 1:4) {
win <- sample(c(-1, 1), size = 20, replace = T)
plot(cumsum(win), type = "l", col = c("orange3"), ylim = c(-15, 15),
lwd = 2, xlab = "Bet", ylab = "Cumulative Win", las = 1
)
abline(h = 0, lty = "dashed")
}


Now would like to know generate a table to display our overal winnings if we run the function bet 100 times and determine what are the most likes wins. Then we can plot the distribution of the winnings. Notice: The distributions will change each time you run the code.

win.rep <- replicate(100, bet())
table(win.rep)

## win.rep
## -20 -18 -14 -12 -10  -8  -6  -4  -2   0   2   4   6   8  10  12
##   1   2   1   3   2   4  10  14  12   8  10  11   6  10   3   3

barplot(table(win.rep), col = "cornflowerblue", las = 1) # Notice the color name


Shiny App

I wanted to create an interactive app that lets users play around with this simulation game to see how they fair in their betting. So I created an app which you can find here.

Updated: