# Fun with coin flips

**Jason.Bryer.org Blog - R**, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

We all know that the odds of flipping an unbiased coin is 50% heads, 50% tails. But what happens if you do this a lot of times. Do you expect the same number of heads and tails? What if we took a cumulative sum where heads = +1 and tails = -1. What would that sum be? Here is a function that will do this *n* times and plot it.

```
probPlot <- function(n=1000) {
vals <- rbinom(n=n, size=1, prob=.5)
vals[vals==0] <- -1
df = data.frame(x=1:length(vals), y=cumsum(vals))
range <- c( -max(abs(df$y)), max(abs(df$y)))
ggplot(df, aes(x=x, y=y)) +
geom_hline(yintercept=0, colour='blue') +
geom_line() +
ylim(range) +
ylab('Cumulative Sum') +
xlab(paste('Point in sequence 1:n coin flips for n=',
prettyNum(n, big.mark=',', scientific=FALSE), sep='')) +
ggtitle(paste('Cumulative sums for succession of ',
prettyNum(n, big.mark=',', scientific=FALSE),
' coin flips\nwhere Heads = +1 & Tails = -1', sep=''))
}
```

The results of `probPlot(n=10000)`

is:

But if we run it again we get a different plot:

But after 10,000 coin flips, the possible range is 10,000 for all heads or -10,000 for all tails. If we set the range for the y-axis it appears that the cumulative sum is indeed pretty close to 0.

Using the `animation`

package, we can quickly create an animation zooming in from the full range to see the variation in the cumulative sum.

```
require(animation)
set.seed(2112)
n <- 10000
nsteps <- 10
p <- probPlot(n) + ggtitle(NULL)
steps <- c(n)
while(steps[length(steps)] / 2 > max(abs(p$data$y))) {
steps = c(steps, steps[length(steps)] / 2)
}
saveHTML( {
for(i in steps) {
print( p + ylim(c(-i, i)) )
} },
interval = 0.5, htmlfile='cumulativesum.html', autobrowse=FALSE, outdir=getwd(),
title = paste('Cumulative sums for succession of ',
prettyNum(n, big.mark=',', scientific=FALSE), ' coin flips', sep=''),
description = paste('Cumulative sums for succession of ',
prettyNum(n, big.mark=',', scientific=FALSE),
'coin flips where Heads = +1 and Tails = -1', sep='')
)
```

**leave a comment**for the author, please follow the link and comment on their blog:

**Jason.Bryer.org Blog - R**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.