Load the necessary packages

library(ggplot2)

According to some sources, heart rates are normally distributed with a mean of 76 bpm and a standard deviation of 8bpm.

mu_hr<-76
sigma_hr<-8

Generate 10,000 observations from this distribution:

heart_rate_population<-data.frame(rnorm(10000,76,8))
#plot the data
ggplot(heart_rate_population, aes(x = heart_rate_population)) + geom_dotplot(binwidth = .2)+
  scale_x_continuous(breaks=c(52,60,68,76,84,92,100))

Let’s imagine we take samples of 20 individuals from this population. What would we see?

mean_of_sample_means<-76 #the mean of sample means equals the population mean
mean_of_sample_means
[1] 76
sd_of_sample_means<- 8/sqrt(20)
sd_of_sample_means
[1] 1.788854

Generate 10,000 sample means from samples of size 20

sample_means<-data.frame(rnorm(10000,76,1.80))
ggplot(sample_means, aes(x = sample_means)) + geom_dotplot(binwidth = .05)+
  scale_x_continuous(breaks=c(70.6,72.4,74.2,76,77.8,79.6,81.4))

Now let’s take a look at some sample data from a real sample of 20

heart_rates=c(61,73,80,86,68,64,44,59,75,67,85,79,82,55,87,62,76,96,88,81)
heart_rates<-data.frame(heart_rates)
ggplot(heart_rates, aes(x = heart_rates)) + geom_dotplot(binwidth = 1)+
  scale_x_continuous(breaks=c(52,60,68,76,84,92,100))

heart_rates=c(61,73,80,86,68,64,44,59,75,67,85,79,82,55,87,62,76,96,88,81)
summary(heart_rates)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  44.00   63.50   75.50   73.40   82.75   96.00 
sd(heart_rates)
[1] 13.12049
observed_sample_mean=73.4

Calculate the z-score for the sample mean

z=(73.4-76)/1.8
z
[1] -1.444444

Interpret this result: A sample mean of 73.4 is 1.44 standard deviations below the true mean.

There is a special function in R that allows us to calculate the percentile associated with any z-score. We will use dnorm(z) to find what proportion of values fall below our z-score of -1.44.

pnorm(-1.44)*100
[1] 7.49337

Interpretation: According to the normal model, a sample of 20 heart rates will be this far below the mean about 7.5% of the time.

Try a few more:

pnorm(-2)*100 
[1] 2.275013
pnorm(2)*100
[1] 97.72499
(pnorm(2)-pnorm(-2))*100  #should be about 95%
[1] 95.44997
LS0tDQp0aXRsZTogIkhlYXJ0IFJhdGVzIFNhbXBsaW5nIERpc3RyaWJ1dGlvbnMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpMb2FkIHRoZSBuZWNlc3NhcnkgcGFja2FnZXMNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpgYGANCg0KQWNjb3JkaW5nIHRvIHNvbWUgc291cmNlcywgaGVhcnQgcmF0ZXMgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHdpdGggYSBtZWFuIG9mIDc2IGJwbSBhbmQgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgOGJwbS4gDQpgYGB7cn0NCm11X2hyPC03Ng0Kc2lnbWFfaHI8LTgNCmBgYA0KDQpHZW5lcmF0ZSAxMCwwMDAgb2JzZXJ2YXRpb25zIGZyb20gdGhpcyBkaXN0cmlidXRpb246DQoNCmBgYHtyfQ0KaGVhcnRfcmF0ZV9wb3B1bGF0aW9uPC1kYXRhLmZyYW1lKHJub3JtKDEwMDAwLDc2LDgpKQ0KDQojcGxvdCB0aGUgZGF0YQ0KZ2dwbG90KGhlYXJ0X3JhdGVfcG9wdWxhdGlvbiwgYWVzKHggPSBoZWFydF9yYXRlX3BvcHVsYXRpb24pKSArIGdlb21fZG90cGxvdChiaW53aWR0aCA9IC4yKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1jKDUyLDYwLDY4LDc2LDg0LDkyLDEwMCkpDQpgYGANCkxldCdzIGltYWdpbmUgd2UgdGFrZSBzYW1wbGVzIG9mIDIwIGluZGl2aWR1YWxzIGZyb20gdGhpcyBwb3B1bGF0aW9uLiAgV2hhdCB3b3VsZCB3ZSBzZWU/DQoNCmBgYHtyfQ0KbWVhbl9vZl9zYW1wbGVfbWVhbnM8LTc2ICN0aGUgbWVhbiBvZiBzYW1wbGUgbWVhbnMgZXF1YWxzIHRoZSBwb3B1bGF0aW9uIG1lYW4NCm1lYW5fb2Zfc2FtcGxlX21lYW5zDQoNCnNkX29mX3NhbXBsZV9tZWFuczwtIDgvc3FydCgyMCkgICN0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsZSBtZWFucyBpcyB0aGUgcG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gZGl2aWRlZCBieSB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHNhbXBsZSBzaXplDQpzZF9vZl9zYW1wbGVfbWVhbnMNCmBgYA0KDQpHZW5lcmF0ZSAxMCwwMDAgc2FtcGxlIG1lYW5zIGZyb20gc2FtcGxlcyBvZiBzaXplIDIwDQpgYGB7cn0NCnNhbXBsZV9tZWFuczwtZGF0YS5mcmFtZShybm9ybSgxMDAwMCw3NiwxLjgwKSkNCg0KI1Bsb3QgdGhlIGRpc3RyaWJ1dGlvbiBvZiBzYW1wbGUgbWVhbnMNCmdncGxvdChzYW1wbGVfbWVhbnMsIGFlcyh4ID0gc2FtcGxlX21lYW5zKSkgKyBnZW9tX2RvdHBsb3QoYmlud2lkdGggPSAuMDUpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPWMoNzAuNiw3Mi40LDc0LjIsNzYsNzcuOCw3OS42LDgxLjQpKQ0KYGBgDQoNCg0KTm93IGxldCdzIHRha2UgYSBsb29rIGF0IHNvbWUgc2FtcGxlIGRhdGEgZnJvbSBhIHJlYWwgc2FtcGxlIG9mIDIwDQpgYGB7cn0NCmhlYXJ0X3JhdGVzPWMoNjEsNzMsODAsODYsNjgsNjQsNDQsNTksNzUsNjcsODUsNzksODIsNTUsODcsNjIsNzYsOTYsODgsODEpDQpoZWFydF9yYXRlczwtZGF0YS5mcmFtZShoZWFydF9yYXRlcykNCg0KZ2dwbG90KGhlYXJ0X3JhdGVzLCBhZXMoeCA9IGhlYXJ0X3JhdGVzKSkgKyBnZW9tX2RvdHBsb3QoYmlud2lkdGggPSAxKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1jKDUyLDYwLDY4LDc2LDg0LDkyLDEwMCkpDQpgYGANCmBgYHtyfQ0KaGVhcnRfcmF0ZXM9Yyg2MSw3Myw4MCw4Niw2OCw2NCw0NCw1OSw3NSw2Nyw4NSw3OSw4Miw1NSw4Nyw2Miw3Niw5Niw4OCw4MSkNCnN1bW1hcnkoaGVhcnRfcmF0ZXMpDQpzZChoZWFydF9yYXRlcykNCmBgYA0KYGBge3J9DQpvYnNlcnZlZF9zYW1wbGVfbWVhbj03My40DQpgYGANCg0KQ2FsY3VsYXRlIHRoZSB6LXNjb3JlIGZvciB0aGUgc2FtcGxlIG1lYW4NCg0KYGBge3J9DQp6PSg3My40LTc2KS8xLjgNCnoNCmBgYA0KSW50ZXJwcmV0IHRoaXMgcmVzdWx0OiAgQSBzYW1wbGUgbWVhbiBvZiA3My40IGlzIDEuNDQgc3RhbmRhcmQgZGV2aWF0aW9ucyBiZWxvdyB0aGUgdHJ1ZSBtZWFuLg0KDQoNClRoZXJlIGlzIGEgc3BlY2lhbCBmdW5jdGlvbiBpbiBSIHRoYXQgYWxsb3dzIHVzIHRvIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGlsZSBhc3NvY2lhdGVkIHdpdGggYW55IHotc2NvcmUuICBXZSB3aWxsIHVzZSBkbm9ybSh6KSB0byBmaW5kIHdoYXQgcHJvcG9ydGlvbiBvZiB2YWx1ZXMgZmFsbCBiZWxvdyBvdXIgei1zY29yZSBvZiAtMS40NC4NCmBgYHtyfQ0KcG5vcm0oLTEuNDQpKjEwMA0KYGBgDQpJbnRlcnByZXRhdGlvbjogIEFjY29yZGluZyB0byB0aGUgbm9ybWFsIG1vZGVsLCBhIHNhbXBsZSBvZiAyMCBoZWFydCByYXRlcyB3aWxsIGJlIHRoaXMgZmFyIGJlbG93IHRoZSBtZWFuIGFib3V0IDcuNSUgb2YgdGhlIHRpbWUuDQoNClRyeSBhIGZldyBtb3JlOg0KDQpgYGB7cn0NCnBub3JtKC0yKSoxMDAgDQpwbm9ybSgyKSoxMDANCihwbm9ybSgyKS1wbm9ybSgtMikpKjEwMCAgI3Nob3VsZCBiZSBhYm91dCA5NSUNCmBgYA0KDQoNCg0KDQoNCg0K