---
title: 'BIOS: 4120 Lab 7'
output:
  html_document:
    df_print: paged
  pdf_document: default
date: "March 1-2, 2022"
---
 
```{r, include = FALSE}
library(tidyverse)
library(kableExtra)
```
 
# Objectives

  * Quiz 2 review
  * Binomial distribution and its functions in R

# Quiz Review

## Problem 1 - Summary Statistics

Below is a sample of 15 patients' systolic blood pressures prior to having surgery and 15 patients' systolic blood pressures post to having surgery:


```{r, echo = FALSE}
# boxplot
bp<- data.frame(blpr = c(118, 144, 134, 110, 119, 128, 132, 136, 125, 160, 190, 140, 150, 160, 220,100, 70, 90, 75, 110, 115, 108, 50, 111, 110, 60, 80, 70, 40, 60), time = rep(c("before", "after"), each = 15))
boxplot(blpr~time, 
        horizontal = T, 
        main = "Systolic Blood Pressures", 
        data = bp,
        col = "orchid")

```

a) Estimate the median of blood pressures both before and after surgery.


b) Are there any outliers? If so, identify them and state how they impact the mean and the median?


c) What percentage of individuals had a systolic blood pressure lower than 80 post surgery? 


d) 75 percent of individuals had a pre-surgery systolic blood pressure lower than what? 


<br>


### Problem 2 - Histograms

a) Will the following data have a higher mean or median? 

b) Does that make the data right-skewed or left-skewed?

```{r, echo=FALSE}
set.seed(3516)
hist(rgamma(999, 6, 1), main = "Practice Histogram", xlab = "mystery data", col = "skyblue1")
```

<br>

## Problem 3 - Probability Review

Suppose the probability that a potato is a Yukon Gold is 1/3.  
Suppose the probability that a potato is mashed, given that it was Yukon Gold, is 3/4.  
Suppose the probability that a potato is mashed, given that it was NOT Yukon Gold, is 1/2.  

a) What is the probability that a potato is mashed?  

b) What is the probability that a potato is both Yukon Gold AND mashed? 

c) What is the probability that a potato is Yukon Gold, given that it is mashed?  

d) What is the probability that a potato is Yukon Gold OR mashed?  

e) Assuming picking potatoes involves independent events, what is the probability that I pick two Yukon Golds in a row (with replacement)?  

<br>

## Problem 4 - Correlation and Regression

Below is information about a study concerned with the effect that listening to classical music has on students' test scores. Time spent listening to classical music is given in minutes per week and test scores are the percent that students scored on their biostatistics exams.

```{r,echo=FALSE,results='hide'}
set.seed(17)
classicaltime <- rnorm(20,50,10)
testscores <- classicaltime + rnorm(20, 30, 9)
mod <- lm(testscores~classicaltime)
```

```{r,echo=FALSE,results='hold'}
cat("Mean Time Listening to Classical Music:", signif(mean(classicaltime),4))
cat("\nMean Test Scores:", signif(mean(testscores),4))
cat("\nStd Dev of Time Listening to Classical Music:", signif(sd(classicaltime), 3))
cat("\nStd Dev of Test Scores:", signif(sd(testscores),3))
cat("\nCorrelation:", signif(cor(classicaltime,testscores),4))
cat("\nRegression Line Slope:", signif(mod$coefficients[[2]]))
```

a) If we have a student who listens to 1 standard deviations less classical music than the average student, how many standard deviations below average would we predict their exam score to be?  

b) If we have a student who scores 3 standard deviations above average on their exam, how much time do we predict that they spend listening to classical music per week?

c) If a student listens to 5 minutes more classical music per week than average, what is their predicted test score?

<br>

## Problem 5 - Contingency Table

Below is data about a fictitious HIV rapid-diagnostic test. Please fill in the rest of the table and answer the following questions. Assume the prevalence in this population is 0.1% ($P(D+) = 0.001$).

```{r, echo = FALSE, comment = "", results = "asis"}
library(tidyverse)
library(kableExtra)
tab4 <- data.frame(Disease = c("Present", "Absent", "Total"),
                   Positive = c(2970, 11000, 13970),
                   Negative = c(30,539000, 539030),
                   Total = c(3000, 550000, 553000))
kable(tab4) %>%
  kable_styling(bootstrap_options = c("striped", "hover")) %>%
  add_header_above(c(" " = 1, "Test Result" = 2, " " = 1))

```


a) Find the sensitivity of the test.

d) Find the specificity of the test. 

c) Find the false positive rate. 

e) Find the positive predictive value. $P(D^+|T^+)$

f) Find the negative predictive value. $P(D^-|T^-)$

<br>
<br>

## Binomial Distribution (Not on Quiz)

From lecture, we know that when there are two possible outcomes (success/failure) in n trials, the number of ways of one event occurring x times is $\frac{n!}{x!(n-x)!}$.  
We also know that, given independence, the probability of an intersection of events is $p^x(1-p)^{1-x}$.  
Combining these, we get the formula for the binomial distribution:  


* $\frac{n!}{x!(n-x)!}p^x(1-p)^{n-x}$


Using the information about Yukon Gold potatoes from the Probability Review section, let's find the probability that if 3 potatoes are picked, 2 are Yukon Gold. We can calculate this probability using the formula in R:

```{r}
# Setting our values
n <- 3
x <- 2
p <- 1/3

# Manually using the binomial formula:
factorial(n)/(factorial(x)*factorial(n-x)) * p^x * (1-p)^(n-x)

# You can also do this using the 'choose' function:
choose(n, x)* p^x * (1-p)^(n-x)
```

We can also use R's built-in 'dbinom' function to answer this question. dbinom takes the following arguments:

  * x - the number of successes
  
  * size - the total number of trials
  
  * prob - the probability of success

```{r}
dbinom(x = 2, size = 3, prob = 1/3)
```

R's built-in functions can also help us answer other questions of interest.  For example, consider our quiz review problem 3 involving Yukon Gold Potatoes. Suppose we pick 10 potatoes and get 5 Yukon Golds.  We can find the probability of this event just like we did earlier with the dbinom function:

```{r}
# Manually using the binomial formula:
factorial(10)/(factorial(5)*factorial(10-5)) * (1/3)^5 * (1-(1/3))^(10-5)

# Using the dbinom function:
dbinom(x = 5, size = 10, prob = 1/3)
```

However, we may also be interested in finding the probability of seeing an event *as extreme or more extreme* than the one we observed (this also corresponds to the p-value).

Since the probability of picking a Yukon Gold is 1/3 and we picked a total of 10 potatoes, we would expect to see about (10)(1/3) = 3.33 Yukon Gold potatoes. What we observed (5) is 5 - 3.33 = 1.67 potatoes greater than what we'd expect. So in order to be *as extreme or more extreme*, we are interested in anything greater than or equal to 5, or less than or equal to 1.67 (3.33 - 1.67).  Since the data is discrete, it cannot take on decimal values (only whole potatoes), so this is the same thing as $P(x\leq1 \cup x\geq5)$.

(Note that we round down from 1.67 to 1 instead of rounding to 2. This is because 2 is not more extreme than 1.67, but 1 is, so we use 1.)

We can calculate this using pbinom(). The 'pbinom' function finds the probability of being LESS THAN or equal to a value. If we want to find the probability of being GREATER or equal to a number, we tell R to calculate 1-pbinom() of one LESS than what we're interested in.

Alternatively, you can using the 'lower.tail' argument to manually tell R that you want the 'greater than' probability.

```{r}
# The probability of picking 1 or less potatoes (1 potato or 0 potatoes)
pbinom(1, size = 10, prob = 1/3)

# The probability of picking 5 or more potatoes (5, 6, 7, 8, 9, or 10 potatoes)
# Note that instead of x = 5, we use x = 4
1 - pbinom(4, size = 10, prob = 1/3) 

# Alternatively, using the lower.tail argument:
pbinom(4, size = 10, prob = 1/3, lower.tail = F)

# Total of the Extremes:
pbinom(1, size = 10, prob = 1/3) + (1 - pbinom(4, size = 10, prob = 1/3))

```

Sometimes the pbinom function can be hard to keep track of, especially remembering whether it includes the number you input or not. To avoid this, you can simply add up your desired values using the 'dbinom' function, though it will require a few extra lines of code. For example, the probability of picking 5 or more potatoes:

```{r}
# The probability of picking 5 or more potatoes (5, 6, 7, 8, 9, or 10 potatoes)
dbinom(5, size = 10, prob = 1/3) + 
  dbinom(6, size = 10, prob = 1/3) + 
  dbinom(7, size = 10, prob = 1/3) +
  dbinom(8, size = 10, prob = 1/3) +
  dbinom(9, size = 10, prob = 1/3) +
  dbinom(10, size = 10, prob = 1/3)
```
### 'binom.test' function

The binom.test function gives us a variety of information. It's core purpose is to test whether the true probability of success is equal to some value, but you can also use it as an easy way to get our p-values from earlier. 

For example, if we were looking for the p-value of getting a result as extreme or more extreme than our 5 Yukon Gold potatoes out of 10, we can use the following syntax. Note that this function not only gives us a p-value, but also a confidence interval, hypothesis, and sample estimate. 

```{r}
binom.test(x=5, n=10, p=1/3)
```

<br>

## Bonus Practice Problems

### Bonus Problem 1

For which of the following scenarios could we apply a binomial distribution:
Recall: The binomial distribution has the following characteristics:

  * There are a speciﬁc number of trials (n), each with a binary outcome
  * The n trials are independent 
  * The probability of success (p) is constant with each trial


a) The number of jackpots in 1,000 pulls of a slot machine 

b) The number of people who get sick in a 5-person household 

c) The number of free throws Lebron James makes in 10 attempts

d) The number of questions a student answers correctly on a multiple choice test (they are not randomly guessing).

<br>

### Bonus Problem 2

Suppose we have a standard 6 sided die, and we roll the die 10 times. Consider the following questions

a) What's the probability that we get at least two rolls of 4?

b) Suppose that we roll five 4's. Using the above techniques, find the p-value. Do you believe that the die is biased?







