What is Bootstrap Replication & How Do I Use it?

What is bootstrap replication?

For those catching up here, bootstrap sampling refers to the process of sampling a given dataset ‘with replacement’…. And this is where most people get lost. You take many samples and build a distribution to mark your confidence interval.

Lets take a quick example.

Crypto at College

Lets say that you want to find out how the general population at a college feels about crypto currency; well, you likely wont be able to gather responses from everybody in the school; what will probably happen is that you’ll distribute some survey and you’ll get back a handful of responses that you hope are indicative of the general populous’ opinion, good or bad.

While you have a clear idea about the distribution among your respondents, you want to generate a realistic confidence interval that would be more indicative of the entire school. This is where boostrap replication comes in!

Sampling with Replacement

So far we know that bootstrap replication is a sampling approach. The main idea here being that when one sample is selected, it can be selected over and over again. This serves the purpose of re-creating the random re-occurrence of a respondent type that may actually be due to random chance.

Each bootstrap sample is called a replication. In this case, lets assume 1000 replications.

Once we have our 1000 replicates or samples, we now have 1000 values for the sample mean.

From this distribution, we’ll get our actual confidence interval.

Lets say we want a confidence interval of 95%; we would get this by looking at our bootstrap distribution and taking the 2.5th value and the 97.5th value the act as our interval.

Lets Look at Some Code!

replicate_1 <- crypto_opinions %>%
    specify(response = opinion, success = "positive") %>%
    generate(reps = 1, type = "bootstrap")

replicate_1 %>%
    summarize(prop_high = mean(response == 'positive')) %>%

We use specify to isolate the response variable we care about and what the variable value determines ‘success’. From there we use generate to create our first bootstrap replicate. You’ll also notice that we specify the the type as bootstrap. We then use summarize and pull to generate a proportion of the specified level ‘positive’.

replicates <- crypto_opinions %>%
    specify(response = opinion, success = "positive") %>%
    generate(reps = 1000, type = "bootstrap")%>%
    calculate(stat = "prop")

Similar to the former code block, we’ve expanded our repetitions to 1000 and are now chaining in the calculate function. The calculate function creates a data frame with one record for each replicate “stat” that corresponded to that replicate.

ggplot(replicates, aes(stat)) +

The above chart shows you the density chart or distribution of the average outcome per each replicate.

From here it’s just a simple matter of calculating, the standard deviation and using that to identify the top and bottom of your range!

Lower_bound <- mean(replicates$stat) - sd(replicates$stat) * 2
upper_bound <- mean(replicates$stat) + sd(replicates$stat) * 2


I hope you’ve enjoyed this post and that it saves you some time! Please share whatever works and whatever doesn’t!

Feel free to check out some of my other posts at datasciencelessons.com

Happy Data-Sciencing!


Leave a comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: