Data Science: Probability
Section 1: Discrete Probability
Section 1 Overview
Section 1 introduces you to Discrete Probability. Section 1 is divided into three parts:
1. Introduction to Discrete Probability
2. Combinations and Permutations
3. Addition Rule and Monty Hall
After completing Section 1, you will be able to:
o apply basic probability theory to categorical data.
o perform a Monte Carlo simulation to approximate the results of
repeating an experiment over and over, including simulating the
outcomes in the Monty Hall problem.
o distinguish between: sampling with and without replacement,
events that are and are not independent, and combinations and
permutations.
o apply the multiplication and addition rules, as appropriate, to
calculate the probably of multiple events occurring.
o use sapply() instead of a for loop to perform element-wise
operations on a function.
There are 3 assignments that use the DataCamp platform for you to practice your
coding skills. There are also some quick probability calculations for you to perform
directly on the edX platform as well, and there is a longer set of problems at the end of
section 1.
This section corresponds to the following section of the course textbook.
We encourage you to use R to interactively test out your answers and further your
learning.
1.1 Introduction to Discrete Probability
Discrete Probability
Textbook link
This video corresponds to the textbook section on discrete probability External link.
Key points
The probability
of an event is the proportion of times the event occurs
when we repeat the experiment independently under the same
conditions.
An event isdefined as an outcome that can occur when when
something happens by chance.
We can determine probabilities related to discrete variables (picking a
red bead, choosing 48 Democrats and 52 Republicans from 100 likely
voters) and continuous variables (height over 6 feet).
Monte Carlo Simulations
Textbook link
This video corresponds to the textbook section on Monte Carlo simulations External
link
.
Key points
Monte Carlo simulations model the probability of different outcomes by
repeating a random process a large enough number of times that the
results are similar to what would be observed if the process were
repeated forever.
The sample() function draws random outcomes from a set of options.
The replicate() function repeats lines of code a set number of
times. It is used with sample() and similar functions to run Monte
Carlo simulations.
Video code
Note that your exact outcome values from the Monte Carlo simulation will
differ because the sampling is random.
beads <- rep(c("red", "blue"), times = c(2,3)) # create an urn with 2
red, 3 blue
beads # view beads object
sample(beads, 1) # sample 1 bead at random
B <- 10000 # number of times to draw 1 bead
events <- replicate(B, sample(beads, 1)) # draw 1 bead, B times
tab <- table(events) # make a table of outcome counts
tab # view count table
prop.table(tab) # view table of outcome proportions
Setting the Random Seed
The set.seed() function
Before we continue, we will briefly explain the following important line of code:
set.seed(1986)
Throughout this book, we use random number generators. This implies that
many of the results presented can actually change by chance, which then
suggests that a frozen version of the book may show a different result than
what you obtain when you try to code as shown in the book. This is actually
fine since the results are random and change from time to time. However, if
you want to to ensure that results are exactly the same every time you run
them, you can set R’s random number generation seed to a specific number.
Above we set it to 1986. We want to avoid using the same seed every time. A
popular way to pick the seed is the year - month - day. For example, we
picked 1986 on December 20, 2018: 2018 − 12 − 20 = 1986.
You can learn more about setting the seed by looking at the documentation:
?set.seed
In the exercises, we may ask you to set the seed to assure that the results
you obtain are exactly what we expect them to be.
Important note on seeds in R 3.5 versus R 3.6 and later
When R updated to version 3.6 in early 2019, the default method for setting
the seed changed. This means that exercises, videos, textbook excerpts and
other code you encounter online may yield a different result based on your
version of R.
If you are running R 3.6 or later, you can revert to the original seed setting
behavior by adding the argument sample.kind="Rounding". For example:
set.seed(1)
set.seed(1, sample.kind="Rounding") # will make R 3.6 generate a seed
as in R 3.5
Using the sample.kind="Rounding" argument will generate a message:
non-uniform 'Rounding' sampler used
This is not a warning or a cause for alarm - it is a confirmation that R is using
the alternate seed generation method, and you should expect to receive this
message in your console.
If you use R 3.6 or later, you should always use the second form
of set.seed() in this course series (outside of DataCamp
assignments). Failure to do so may result in an otherwise correct answer
being rejected by the grader. In most cases where a seed is required, you will
be reminded of this fact.
Using the mean Function for Probability
An important application of the mean() function
In R, applying the mean() function to a logical vector returns the proportion of
elements that are TRUE. It is very common to use the mean() function in this
way to calculate probabilities and we will do so throughout the course.
Suppose you have the vector beads from a previous video:
beads <- rep(c("red", "blue"), times = c(2,3))
beads
[1] "red" "red" "blue" "blue" "blue"
To find the probability of drawing a blue bead at random, you can run:
mean(beads == "blue")
[1] 0.6
This code is broken down into steps inside R. First, R evaluates the logical
statement beads == "blue", which generates the vector:
FALSE FALSE TRUE TRUE TRUE
When the mean function is applied, R coerces the logical values to numeric
values, changing TRUE to 1 and FALSE to 0:
0 0 1 1 1
The mean of the zeros and ones thus gives the proportion of TRUE values. As
we have learned and will continue to see, probabilities are directly related to
the proportion of events that satisfy a requirement.
Probability Distributions
Textbook link
This video corresponds to the textbook section on probability distributions.
Key points
The probability distribution for a variable describes the probability of
observing each possible outcome.
For discrete categorical variables, the probability distribution is defined
by the proportions for each group.
Independence
Textbook link
This video corresponds to the textbook section on independence, conditional
probability and the multiplication rule.
Key points
Conditional probabilities compute the probability that an event occurs
given information about dependent events. For example, the
probability of drawing a second king given that the first draw is a king
is:
Pr(Card 2 is a king | Card 1 is a king) = 3/51
If
two events A and B are independent, Pr(A|B) = Pr (A).
To determine the probability of multiple events occurring, we use
the multiplication rule.
Equations
The multiplication rule for independent events is:
Pr(A and B and C) = Pr (A) x Pr(B) x Pr(C).
The multiplication rule for dependent events considers the conditional
probability of both events occurring:
Pr(A and B) = Pr (A) x Pr(B|A)
We can expand the multiplication rule for dependent events to more than 2
events:
Pr(A and B and C) = Pr (A) x Pr(B|A) x Pr(C| A and B).
1.2 Combinations and Permutations
Combinations and Permutations
Textbook link
Here is a link to the textbook section on combinations and permutations External link.
Key points
paste() joins two strings and inserts a space in between.
expand.grid() gives the combinations of 2 vectors or lists.
permutations(n,r) from the gtools package lists the different ways
that r items can be selected from a set of n options when order
matters.
combinations(n,r) from the gtools package lists the different ways
that r items can be selected from a set of n options when order does
not matter.
Code: Introducing paste() and expand.grid()
# joining strings with paste
number <- "Three"
suit <- "Hearts"
paste(number, suit)
# joining vectors element-wise with paste
paste(letters[1:5], as.character(1:5))
# generating combinations of 2 vectors with expand.grid
expand.grid(pants = c("blue", "black"), shirt = c("white", "grey",
"plaid"))
Code: Generating a deck of cards
suits <- c("Diamonds", "Clubs", "Hearts", "Spades")
numbers <- c("Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack", "Queen", "King")
deck <- expand.grid(number = numbers, suit = suits)
deck <- paste(deck$number, deck$suit)
# probability of drawing a king
kings <- paste("King", suits)
mean(deck %in% kings)
Code: Permutations and combinations
Correction: The code shown does not generate all 7 digit phone numbers
because phone numbers can have repeated digits. It generates all possible 7
digit numbers without repeats.
library(gtools)
permutations(5,2) # ways to choose 2 numbers in order from 1:5
all_phone_numbers <- permutations(10, 7, v = 0:9)
n <- nrow(all_phone_numbers)
index <- sample(n, 5)
all_phone_numbers[index,]
permutations(3,2) # order matters
combinations(3,2) # order does not matter
Code: Probability of drawing a second king given that one king is
drawn
hands <- permutations(52,2, v = deck)
first_card <- hands[,1]
second_card <- hands[,2]
sum(first_card %in% kings)
sum(first_card %in% kings & second_card %in% kings) /
sum(first_card %in% kings)
Code: Probability of a natural 21 in blackjack
aces <- paste("Ace", suits)
facecard <- c("King", "Queen", "Jack", "Ten")
facecard <- expand.grid(number = facecard, suit = suits)
facecard <- paste(facecard$number, facecard$suit)
hands <- combinations(52, 2, v=deck) # all possible hands
# probability of a natural 21 given that the ace is listed first in `combinations`
mean(hands[,1] %in% aces & hands[,2] %in% facecard)
# probability of a natural 21 checking for both ace first and ace second
mean((hands[,1] %in% aces & hands[,2] %in% facecard)|(hands[,2]
%in% aces & hands[,1] %in% facecard))
Code: Monte Carlo simulation of natural 21 in blackjack
Note that your exact values will differ because the process is random and the
seed is not set.
# code for one hand of blackjack
hand <- sample(deck, 2)
hand
# code for B=10,000 hands of blackjack
B <- 10000
results <- replicate(B, {
hand <- sample(deck, 2)
(hand[1] %in% aces & hand[2] %in% facecard) | (hand[2] %in
% aces & hand[1] %in% facecard)
})
mean(results)
The Birthday Problem
Textbook link
Here is a link to the textbook section on the birthday problem External link.
Key points
duplicated() takes a vector and returns a vector of the same length
with TRUE for any elements that have appeared previously in that
vector.
We can compute the probability of shared birthdays in a group of people
by modeling birthdays as random draws from the numbers 1 through
365. We can then use this sampling model of birthdays to run a Monte
Carlo simulation to estimate the probability of shared birthdays.
Code: The birthday problem
# checking for duplicated bdays in one 50 person group
n <- 50
bdays <- sample(1:365, n, replace = TRUE) # generate n random
birthdays
any(duplicated(bdays)) # check if any birthdays are duplicated
# Monte Carlo simulation with B=10000 replicates
B <- 10000
results <- replicate(B, { # returns vector of B logical values
bdays <- sample(1:365, n, replace = TRUE)
any(duplicated(bdays))
})
mean(results) # calculates proportion of groups with duplicated bdays
sapply
Textbook links
The textbook discussion of the basics of sapply() can be found in this
textbook section External link.
The textbook discussion of sapply() for the birthday problem can be found
within the birthday problem section External link.
Key points
Some functions automatically apply element-wise to vectors, such
as sqrt() and *.
However, other functions do not operate element-wise by default. This
includes functions we define ourselves.
The function sapply(x, f) allows any other function f to be applied
element-wise to the vector x.
The probability of an event happening is 1 minus the probability of that
event not happening:
We can compute the probability of shared birthdays mathematically:
Code: Function for birthday problem Monte Carlo simulations
Note that the function body of compute_prob() is the code that we wrote in
the previous video. If we write this code as a function, we can
use sapply() to apply this function to several values of n.
# function to calculate probability of shared bdays across n people
compute_prob <- function(n, B = 10000) {
same_day <- replicate(B, {
bdays <- sample(1:365, n, replace = TRUE)
any(duplicated(bdays))
})
mean(same_day)
n <- seq(1, 60)
Code: Element-wise operation over vectors and sapply
x <- 1:10
sqrt(x) # sqrt operates on each element of the vector
y <- 1:10
x*y # * operates element-wise on both vectors
compute_prob(n) # does not iterate over the vector n without sapply
x <- 1:10
sapply(x, sqrt) # this is equivalent to sqrt(x)
prob <- sapply(n, compute_prob) # element-wise application of
compute_prob to n
plot(n, prob)
Code: Computing birthday problem probabilities with sapply
# function for computing exact probability of shared birthdays for any n
exact_prob <- function(n){
prob_unique <- seq(365, 365-n+1)/365 # vector of fractions for
mult. rule
1 - prod(prob_unique) # calculate prob of no shared birthdays and
subtract from 1
# applying function element-wise to vector of n values
eprob <- sapply(n, exact_prob)
# plotting Monte Carlo results and exact probabilities on same graph
plot(n, prob) # plot Monte Carlo results
lines(n, eprob, col = "red") # add line for exact prob
How many Monte Carlo experiments are enough?
Textbook link
Here is a link to the matching textbook section External link.
Key points
The larger the number of Monte Carlo replicates , the more accurate the
estimate.
Determining the appropriate size for can require advanced statistics.
One practical approach is to try many sizes for and look for sizes that
provide stable estimates.
Code: Estimating a practical value of B
This code runs Monte Carlo simulations to estimate the probability of shared
birthdays using several B values and plots the results. When B is large enough
that the estimated probability stays stable, then we have selected a useful
value of B.
B <- 10^seq(1, 5, len = 100) # defines vector of many B values
compute_prob <- function(B, n = 22){ # function to run Monte Carlo
simulation with each B
same_day <- replicate(B, {
bdays <- sample(1:365, n, replace = TRUE)
any(duplicated(bdays))
})
mean(same_day)
prob <- sapply(B, compute_prob) # apply compute_prob to many
values of B
plot(log10(B), prob, type = "l") # plot a line graph of estimates
1.3 Addition Rule and Monty Hall
The Addition Rule
Textbook link
Here is a link to the textbook section on the addition rule External link.
Clarification
By "facecard", the professor means a card with a value of 10 (K, Q, J, 10).
Key points
The addition rule states that the probability of event A or
event B happening is the probability of event A plus the probability of
event B minus the probability of both events A and B happening
together.
Pr(A or B) = Pr(A) + Pr(B) – Pr(Pr(A and B)
Note that (A or B) is equivalent to (A|B).
Example: The addition rule for a natural 21 in blackjack
We apply the addition rule where A = drawing an ace then a facecard and B
= drawing a facecard then an ace. Note that in this case, both events A and B
cannot happen at the same time, so Pr(A and B) = 0.
Pr(ace then facecard) = 4/52 x 15/51
Pr(facecard then ace) = 16/52 x 4/51
Pr(ace then facecard | facecard then ace) = 4/52 x 15/51 + 16/52 x 4/51 = 0.0483
The Monty Hall Problem
Textbook section
Here is the textbook section on the Monty Hall Problem External link.
Key points
Monte Carlo simulations can be used to simulate random outcomes,
which makes them useful when exploring ambiguous or less intuitive
problems like the Monty Hall problem.
In the Monty Hall problem, contestants choose one of three doors that
may contain a prize. Then, one of the doors that was not chosen by
the contestant and does not contain a prize is revealed. The
contestant can then choose whether to stick with the original choice or
switch to the remaining unopened door.
Although it may seem intuitively like the contestant has a 1 in 2 chance
of winning regardless of whether they stick or switch, Monte Carlo
simulations demonstrate that the actual probability of winning is 1 in 3
with the stick strategy and 2 in 3 with the switch strategy.
Formore on the Monty Hall problem, you can watch a detailed explanation
here External link or read an explanation here External link.
Code: Monte Carlo simulation of stick strategy
B <- 10000
stick <- replicate(B, {
doors <- as.character(1:3)
prize <- sample(c("car","goat","goat")) # puts prizes in random
order
prize_door <- doors[prize == "car"] # note which door has
prize
my_pick <- sample(doors, 1) # note which door is chosen
show <- sample(doors[!doors %in% c(my_pick,
prize_door)],1) # open door with no prize that isn't chosen
stick <- my_pick # stick with original door
stick == prize_door # test whether the original door has the
prize
})
mean(stick) # probability of choosing prize door when sticking
Code: Monte Carlo simulation of switch strategy
switch <- replicate(B, {
doors <- as.character(1:3)
prize <- sample(c("car","goat","goat")) # puts prizes in random
order
prize_door <- doors[prize == "car"] # note which door has
prize
my_pick <- sample(doors, 1) # note which door is chosen first
show <- sample(doors[!doors %in% c(my_pick,
prize_door)], 1) # open door with no prize that isn't chosen
switch <- doors[!doors%in%c(my_pick, show)] # switch to
the door that wasn't chosen first or opened
switch == prize_door # test whether the switched door has the
prize
})
mean(switch) # probability of choosing prize door when switching
Section 2: Continuous Probability
Section 2 Overview
Section 2 introduces you to Continuous Probability.
After completing Section 2, you will:
o understand the differences between calculating probabilities for
discrete and continuous data.
o be able to use cumulative distribution functions to assign
probabilities to intervals when dealing with continuous data.
o be able to use R to generate normally distributed outcomes for
use in Monte Carlo simulations.
o know some of the useful theoretical continuous distributions in
addition to the normal distribution, such as the student-t, chi-
squared, exponential, gamma, beta, and beta-binomial
distributions.
There is 1 assignment that uses the DataCamp platform for you to practice your coding
skills as well as a set of questions on the edX platform at the end of section 3.
This section corresponds to the continuous probability section of the course textbook.
We encourage you to use R to interactively test out your answers and further your
learning.
2.1 Continuous Probability
Continuous Probability
Textbook links
This video corresponds to the textbook section on continuous probability External link.
The previous discussion of CDF is from the Data Visualization course. Here is
the textbook section on the CDF External link.
Key points
The cumulative distribution function (CDF) is a distribution function for
continuous data that reports the proportion of the data below for all
values of :
The CDF is the probability distribution function for continuous variables.
For example, to determine the probability that a male student is taller
than 70.5 inches given a vector of male heights , we can use the CDF:
The probability that an observation is in between two values is .
Code: Cumulative distribution function
Define x as male heights from the dslabs heights dataset:
library(tidyverse)
library(dslabs)
data(heights)
x <- heights %>% filter(sex=="Male") %>% pull(height)
Given a vector x, we can define a function for computing the CDF of x using:
F <- function(a) mean(x <= a)
1 - F(70) # probability of male taller than 70 inches
Theoretical Distribution
Textbook link
This video corresponds to the textbook section on the theoretical distribution
and the normal approximation External link.
Key points
pnorm(a, avg, s) gives the value of the cumulative distribution
function for the normal distribution defined by average avg and
standard deviation s.
We say that a random quantity is normally distributed with
average avg and standard deviation s if the approximation pnorm(a,
avg, s) holds for all values of a.
If we are willing to use the normal approximation for height, we can
estimate the distribution simply from the mean and standard deviation
of our values.
If we treat the height data as discrete rather than categorical, we see
that the data are not very useful because integer values are more
common than expected due to rounding. This is called discretization.
With rounded data, the normal approximation is particularly useful when
computing probabilities of intervals of length 1 that include exactly one
integer.
Code: Using pnorm() to calculate probabilities
Given male heights x:
library(tidyverse)
library(dslabs)
data(heights)
x <- heights %>% filter(sex=="Male") %>% pull(height)
We can estimate the probability that a male is taller than 70.5 inches using:
1 - pnorm(70.5, mean(x), sd(x))
Code: Discretization and the normal approximation
# plot distribution of exact heights in data
plot(prop.table(table(x)), xlab = "a = Height in inches", ylab =
"Pr(x = a)")
# probabilities in actual data over length 1 ranges containing an integer
mean(x <= 68.5) - mean(x <= 67.5)
mean(x <= 69.5) - mean(x <= 68.5)
mean(x <= 70.5) - mean(x <= 69.5)
# probabilities in normal approximation match well
pnorm(68.5, mean(x), sd(x)) - pnorm(67.5, mean(x), sd(x))
pnorm(69.5, mean(x), sd(x)) - pnorm(68.5, mean(x), sd(x))
pnorm(70.5, mean(x), sd(x)) - pnorm(69.5, mean(x), sd(x))
# probabilities in actual data over other ranges don't match normal approx as well
mean(x <= 70.9) - mean(x <= 70.1)
pnorm(70.9, mean(x), sd(x)) - pnorm(70.1, mean(x), sd(x))
Probability Density
Textbook link
This video corresponds to the textbook section on probability density External link.
Key points
The probability of a single value is not defined for a continuous
distribution.
The quantity with the most similar interpretation to the probability of a
single value is the probability density function .
The probability density is defined such that the integral of over a range
gives the CDF of that range.
In R, the probability density function for the normal distribution is given
by dnorm(). We will see uses of dnorm() in the future.
Note that dnorm() gives the density function and pnorm() gives the
distribution function, which is the integral of the density function.
Plotting the Probability Density
Plotting the probability density for the normal distribution
We can use dnorm() to plot the density curve for the normal
distribution. dnorm(z) gives the probability density of a certain z-score, so
we can draw a curve by calculating the density over a range of possible
values of z.
First, we generate a series of z-scores covering the typical range of the
normal distribution. Since we know 99.7% of observations will be within , we
can use a value of slightly larger than 3 and this will cover most likely values
of the normal distribution. Then, we calculate , which is dnorm() of the series
of z-scores. Last, we plot against .
library(tidyverse)
x <- seq(-4, 4, length = 100)
data.frame(x, f = dnorm(x)) %>%
ggplot(aes(x, f)) +
geom_line()
Here is the resulting plot:
Note that dnorm() gives densities for the standard normal distribution by
default. Probabilities for alternative normal distributions with mean mu and
standard deviation sigma can be evaluated with:
dnorm(z, mu, sigma)
Monte Carlo Simulations
Textbook link
This video corresponds to the textbook section on Monte Carlo simulations for
continuous variables External link.
Key points
rnorm(n, avg, s) generates n random numbers from the normal
distribution with average avg and standard deviation s.
Bygenerating random numbers from the normal distribution, we can
simulate height data with similar properties to our dataset. Here we
generate simulated height data using the normal distribution.
Code: Generating normally distributed random numbers
# define x as male heights from dslabs data
library(tidyverse)
library(dslabs)
data(heights)
x <- heights %>% filter(sex=="Male") %>% pull(height)
# generate simulated height data using normal distribution - both datasets should have
n observations
n <- length(x)
avg <- mean(x)
s <- sd(x)
simulated_heights <- rnorm(n, avg, s)
# plot distribution of simulated_heights
data.frame(simulated_heights = simulated_heights) %>%
ggplot(aes(simulated_heights)) +
geom_histogram(color="black", binwidth = 2)
Code: Monte Carlo simulation of tallest person over 7 feet
B <- 10000
tallest <- replicate(B, {
simulated_data <- rnorm(800, avg, s) # generate 800 normally
distributed random heights
max(simulated_data) # determine the tallest height
})
mean(tallest >= 7*12) # proportion of times that tallest person exceeded 7
feet (84 inches)
Other Continuous Distributions
Textbook link
This video corresponds to the textbook section on other continuous
distributions External link.
Key points
You may encounter other continuous distributions (Student t, chi-
squared, exponential, gamma, beta, etc.).
R provides functions for density (d), quantile (q), probability distribution
(p) and random number generation (r) for many of these distributions.
Each distribution has a matching abbreviation (for
example, norm() or t()) that is paired with the related function
abbreviations (d, p, q, r) to create appropriate functions.
For example, use rt() to generate random numbers for a Monte Carlo
simulation using the Student t distribution.
Code: Plotting the normal distribution with dnorm
Use d to plot the density function of a continuous distribution. Here is the
density function for the normal distribution (abbreviation norm()):
x <- seq(-4, 4, length.out = 100)
data.frame(x, f = dnorm(x)) %>%
ggplot(aes(x,f)) +
geom_line()
Questions 1 and 2: ACT scores, part 1
The ACT is a standardized college admissions test used in the United States.
The four multi-part questions in this assessment all involve simulating some
ACT test scores and answering probability questions about them.
For the three year period 2016-2018, ACT standardized test scores were
approximately normally distributed with a mean of 20.9 and standard deviation
of 5.7. (Real ACT scores are integers between 1 and 36, but we will ignore
this detail and use continuous values instead.)
First we'll simulate an ACT test score dataset and answer some questions
about it.
Set the seed to 16, then use rnorm() to generate a normal distribution of
10000 tests with a mean of 20.9 and standard deviation of 5.7. Save these
values as act_scores. You'll be using this dataset throughout these four
multi-part questions.
(IMPORTANT NOTE! If you use R 3.6 or later, you will need to use the
command format set.seed(x, sample.kind = "Rounding") instead
of set.seed(x). Your R version will be printed at the top of the Console
window when you start RStudio.)
Question 1a
What is the mean of act_scores ? / A: 20.8
set.seed(16, sample.kind = "Rounding")
act_scores <- rnorm(10000, 20.9, 5.7)
mean(act_scores)
Question 1b
What is the standard deviation of act_scores ? / A: 5.68
sd(act_scores)
Question 1c
A perfect score is 36 or greater (the maximum reported score is 36).
In act_scores , how many perfect scores are there out of 10,000 simulated
tests? / A: 41
sum(act_scores >= 36)
Question 1d
In act_scores , what is the probability of an ACT score greater than 30? A:
0.0527
mean(act_scores > 30)
Question 1e
In act_scores , what is the probability of an ACT score less than or equal to 10?
/ A: 0.0282
mean(act_scores <= 10)
Question 2
1 point possible (graded)
Set x equal to the sequence of integers 1 to 36. Use dnorm to determine the
value of the probability density function over x given a mean of 20.9 and
standard deviation of 5.7; save the result as f_x . Plot x against f_x .
Which of the following plots is correct?
x <- 1:36
f_x <- dnorm(x, 20.9, 5.7)
data.frame(x, f_x) %>%
ggplot(aes(x, f_x)) +
geom_line()
Questions 3 and 4: ACT scores, part 2
In this 3-part question, you will convert raw ACT scores to Z-scores and
answer some questions about them.
Convert act_scores to Z-scores. Recall from Data Visualization (the second
course in this series) that to standardize values (convert values into Z-scores,
that is, values distributed with a mean of 0 and standard deviation of 1), you
must subtract the mean and then divide by the standard deviation. Use the
mean and standard deviation of act_scores, not the original values used to
generate random test scores.
Question 3a
What is the probability of a Z-score greater than 2 (2 standard deviations
above the mean)? / A: 0.0233
z_scores <- (act_scores - mean(act_scores))/sd(act_scores)
mean(z_scores > 2)
Question 3b
What ACT score value corresponds to 2 standard deviations above the mean
(Z = 2)? / A: 32.2
2*sd(act_scores) + mean(act_scores)
Question 3c
A Z-score of 2 corresponds roughly to the 97.5th percentile.
Use qnorm() to determine the 97.5th percentile of normally distributed data
with the mean and standard deviation observed in act_scores .
What is the 97.5th percentile of act_scores ? / A: 32.0
The 97.5th percentile can be calculated using the following code:
qnorm(.975, mean(act_scores), sd(act_scores))
In this 4-part question, you will write a function to create a CDF for ACT
scores.
Write a function that takes a value and produces the probability of an ACT
score less than or equal to that value (the CDF). Apply this function to the
range 1 to 36.
Question 4a
What is the minimum integer score such that the probability of that score or
lower is at least .95? / A: 31
cdf <- sapply(1:36, function (x){
mean(act_scores <= x)
})
min(which(cdf >= .95))
Question 4b
Use qnorm() to determine the expected 95th percentile, the value for which the
probability of receiving that score or lower is 0.95, given a mean score of 20.9
and standard deviation of 5.7.
What is the expected 95th percentile of ACT scores? / A: 30.3
qnorm(.95, 20.9, 5.7)
Question 4c
As discussed in the Data Visualization course, we can use quantile() to
determine sample quantiles from the data.
Make a vector containing the quantiles for p <- seq(0.01, 0.99, 0.01) , the 1st
through 99th percentiles of the act_scores data. Save these
as sample_quantiles .
In what percentile is a score of 26?
Your answer should be an integer (i.e. 60), not a percent or fraction. Note that
a score between the 98th and 99th percentile should be considered the 98th
percentile, for example, and that quantile numbers are used as names for the
vector sample_quantiles .
p <- seq(0.01, 0.99, 0.01)
sample_quantiles <- quantile(act_scores, p)
names(sample_quantiles[max(which(sample_quantiles < 26))])
Question 4d
Make a corresponding set of theoretical quantiles using qnorm() over the
interval p <- seq(0.01, 0.99, 0.01) with mean 20.9 and standard deviation 5.7.
Save these as theoretical_quantiles . Make a QQ-plot
graphing sample_quantiles on the y-axis versus theoretical_quantiles on the x-
axis.
Which of the following graphs is correct?
p <- seq(0.01, 0.99, 0.01)
sample_quantiles <- quantile(act_scores, p)
theoretical_quantiles <- qnorm(p, 20.9, 5.7)
qplot(theoretical_quantiles, sample_quantiles) + geom_abline()
Section 3: Random Variables, Sampling Models, and the Central Limit
Theorem
Section 3 Overview
Section 3 introduces you to Random Variables, Sampling Models, and the Central Limit
Theorem.
Section 3 is divided into two parts:
1. Random Variables and Sampling Models
2. The Central Limit Theorem.
After completing Section 3, you will:
o understand what random variables are, how to generate them,
and the correct mathematical notation to use with them.
o be able to use sampling models to estimate characteristics of a
larger population.
o be able to explain the difference between a distribution and a
probability distribution.
o understand the Central Limit Theorem and the law of large
numbers.
There are 2 assignments that use the DataCamp platform for you to practice
your coding skills as well as a set of questions on the edX platform at the end
of Section 3.
This section corresponds to the following section of the course textbook.
We encourage you to use R to interactively test out your answers and further your
learning.
3.1 Random Variables and Sampling Models
Random Variables
Textbook link
This video corresponds to the textbook section on random variables External link.
Key points
Random variables are numeric outcomes resulting from random
processes.
Statistical inference offers a framework for quantifying uncertainty due
to randomness.
Code: Modeling a random variable
# define random variable x to be 1 if blue, 0 otherwise
beads <- rep(c("red", "blue"), times = c(2, 3))
x <- ifelse(sample(beads, 1) == "blue", 1, 0)
# demonstrate that the random variable is different every time
ifelse(sample(beads, 1) == "blue", 1, 0)
ifelse(sample(beads, 1) == "blue", 1, 0)
ifelse(sample(beads, 1) == "blue", 1, 0)
Sampling Models
Textbook link and additional information
This video corresponds to the textbook section on sampling models External link.
You can read more about the binomial distribution here External link.
Key points
A sampling model models the random behavior of a process as the
sampling of draws from an urn.
The probability distribution of a random variable is the probability of
the observed value falling in any given interval.
We can define a CDF to answer questions related to the probability of
S being in any interval.
The average of many draws of a random variable is called its expected
value.
The standard deviation of many draws of a random variable is called
its standard error.
Monte Carlo simulation: Chance of casino losing money on roulette
We build a sampling model for the random variable that represents the
casino's total winnings.
# sampling model 1: define urn, then sample
color <- rep(c("Black", "Red", "Green"), c(18, 18, 2)) # define the urn for
the sampling model
n <- 1000
X <- sample(ifelse(color == "Red", -1, 1), n, replace = TRUE)
X[1:10]
# sampling model 2: define urn inside sample function by noting probabilities
x <- sample(c(-1, 1), n, replace = TRUE, prob = c(9/19, 10/19))
# 1000 independent draws
S <- sum(x) # total winnings = sum of draws
We use the sampling model to run a Monte Carlo simulation and use the
results to estimate the probability of the casino losing money.
n <- 1000 # number of roulette players
B <- 10000 # number of Monte Carlo experiments
S <- replicate(B, {
X <- sample(c(-1,1), n, replace = TRUE, prob = c(9/19, 10/19))
# simulate 1000 spins
sum(X) # determine total profit
})
mean(S < 0) # probability of the casino losing money
We can plot a histogram of the observed values of S as well as the normal
density curve based on the mean and standard deviation of S.
library(tidyverse)
s <- seq(min(S), max(S), length = 100) # sequence of 100 values
across range of S
normal_density <- data.frame(s = s, f = dnorm(s, mean(S),
sd(S))) # generate normal density for S
data.frame (S = S) %>% # make data frame of S for histogram
ggplot(aes(S, ..density..)) +
geom_histogram(color = "black", binwidth = 10) +
ylab("Probability") +
geom_line(data = normal_density, mapping = aes(s, f),
color = "blue")
Distributions versus Probability Distributions
Textbook link
This video corresponds to the textbook section on distributions versus
probability distributions.
Key points
A random variable has a probability distribution function that
defines over all values of .
Any list of numbers has a distribution. The probability distribution
function of a random variable is defined mathematically and does not
depend on a list of numbers.
The results of a Monte Carlo simulation with a large enough number of
observations will approximate the probability distribution of .
If a random variable is defined as draws from an urn:
The probability distribution function of the random
variable is defined as the distribution of the list of
values in the urn.
The expected value of the random variable is the
average of values in the urn.
The standard error of one draw of the random
variable is the standard deviation of the values of the
urn.
Notation for Random Variables
Textbook link
This video corresponds to the textbook section on notation for random variables.
Key points
Capital letters denote random variables () and lowercase letters denote
observed values ().
In the notation , we are asking how frequently the random variable is
equal to the value . For example, if , this statement becomes .
Central Limit Theorem
Textbook links
This video corresponds to the textbook sections on expected value and standard
error and the Central Limit Theorem.
Key points
The Central Limit Theorem (CLT) says that the distribution of the sum of
a random variable is approximated by a normal distribution.
The expected value of a random variable, E[X] = μ, is the average of the
values in the urn. This represents the expectation of one draw.
The standard error of one draw of a random variable is the standard
deviation of the values in the urn.
Theexpected value of the sum of draws is the number of draws times
the expected value of the random variable.
Thestandard error of the sum of independent draws of a random
variable is the square root of the number of draws times the standard
deviation of the urn.
Equations
These equations apply to the case where there are only two
outcomes, a and b with proportions p and 1-p respectively. The general
principles above also apply to random variables with more than two outcomes.
Expected value of a random variable:
ap + b (1 - p)
Expected value of the sum of n draws of a random variable:
n x (ap + b (1 - p))
Standard deviation of an urn with two values:
|b – a| √ p (1− p)
Standard error of the sum of n draws of a random variable:
√ n x |b – a| √ p (1− p)
3.2 The Central Limit Theorem Continued
Averages and Proportions
Textbook link
This video corresponds to the textbook section on the statistical properties of
averages.
Key points
Random variable times a constant
The expected value of a random variable multiplied by a constant is that
constant times its original expected value:
E [aX] = a μ
The standard error of a random variable multiplied by a constant is that
constant times its original standard error:
SE [aX] = aσ
Average of multiple draws of a random variable
The expected value of the average of multiple draws from an urn is the
expected value of the urn ( μ).
The standard deviation of the average of multiple draws from an urn is the
standard deviation of the urn divided by the square root of the number of
draws (σ / √n ).
The sum of multiple draws of a random variable
The expected value of the sum of n draws of a random variable is n times its
original expected value:
E [nX] = n μ
The standard error of the sum of n draws of random variable is n times its original
standard error:
SE [nX] = √ n σ
The sum of multiple different random variables
The expected value of the sum of different random variables is the sum of the
individual expected values for each random variable:
E [X1 + X2 + …+ Xn ] = μ1 + μ2 +…+ μ n
The standard error of the sum of different random variables is the square root
of the sum of squares of the individual standard errors:
SE [X1 + X2 + …+ Xn ] = √ σ 1 +σ 2+ …+σ n1
2 2 2
Transformation of random variables
If X is a normally distributed random variable and a and b are non-random
constants, then aX + b is also a normally distributed random variable.
Law of Large Numbers
Textbook link
This video corresponds to the textbook section on the law of large numbers.
Key points
The law of large numbers states that as n increases, the standard error
of the average of a random variable decreases. In other words,
when n is large, the average of the draws converges to the average of
the urn.
The law of large numbers is also known as the law of averages.
The law of averages only applies when n is very large and events are
independent. It is often misused to make predictions about an event
being "due" because it has happened less frequently than expected in
a small sample size.
How Large is Large in CLT?
Textbook links and further information
This video corresponds to the textbook section on sample size for CLT.
You can read more about the Poisson distribution here.
Key points
Thesample size required for the Central Limit Theorem and Law of
Large Numbers to apply differs based on the probability of success.
If the probability of success is high, then relatively few
observations are needed.
As the probability of success decreases, more
observations are needed.
If the probability of success is extremely low, such as winning a lottery,
then the Central Limit Theorem may not apply even with extremely
large sample sizes. The normal distribution is not a good
approximation in these cases, and other distributions such as the
Poisson distribution (not discussed in these courses) may be more
appropriate.
3.3 Assessment: Random Variables, Sampling Models, and the Ce…
Questions 1 and 2: SAT testing
The SAT is a standardized college admissions test used in the United States.
The following two multi-part questions will ask you some questions about SAT
testing.
This is a 6-part question asking you to determine some probabilities of what
happens when a student guessed for all of their answers on the SAT. Use the
information below to inform your answers for the following questions.
An old version of the SAT college entrance exam had a -0.25 point penalty for
every incorrect answer and awarded 1 point for a correct answer. The
quantitative test consisted of 44 multiple-choice questions each with 5 answer
choices. Suppose a student chooses answers by guessing for all questions on
the test.
Question 1a
What is the probability of guessing correctly for one question? A: 0.2
p <- 1/5 # one correct choice of 5 options
p
Question 1b
What is the expected value of points for guessing on one question? A: 0
a <- 1
b <- -0.25
mu <- a*p + b*(1-p)
mu
Question 1c
What is the expected score of guessing on all 44 questions? A: 0
n <- 44
n*mu
Question 1d
What is the standard error of guessing on all 44 questions? A: 3.32
sigma <- sqrt(n) * abs(b-a) * sqrt(p*(1-p))
sigma
Question 1e
Use the Central Limit Theorem to determine the probability that a guessing
student scores 8 points or higher on the test. / A: 0.00793
1-pnorm(8, mu, sigma)
Question 1f
Set the seed to 21, then run a Monte Carlo simulation of 10,000 students
guessing on the test.
(IMPORTANT! If you use R 3.6 or later, you will need to use the
command set.seed(x, sample.kind = "Rounding") instead of set.seed(x) . Your
R version will be printed at the top of the Console window when you start
RStudio.)
What is the probability that a guessing student scores 8 points or higher? A:
0.008
set.seed(21, sample.kind = "Rounding")
B <- 10000
n <- 44
p <- 0.2
tests <- replicate(B, {
X <- sample(c(1, -0.25), n, replace = TRUE, prob = c(p, 1-p))
sum(X)
})
mean(tests >= 8)
Q2:
The SAT was recently changed to reduce the number of multiple choice
options from 5 to 4 and also to eliminate the penalty for guessing.
In this two-part question, you'll explore how that affected the expected values
for the test.
Question 2a
Suppose that the number of multiple choice options is 4 and that there is no
penalty for guessing - that is, an incorrect question gives a score of 0.
What is the expected value of the score when guessing on this new test? A:
11
p <- 1/4
a <- 1
b <- 0
n <- 44
mu <- n * a*p + b*(1-p)
mu
Question 2b
Consider a range of correct answer probabilities p <- seq(0.25, 0.95,
0.05) representing a range of student skills.
What is the lowest p such that the probability of scoring over 35 exceeds
80%? A: 0.85
p <- seq(0.25, 0.95, 0.05)
exp_val <- sapply(p, function(x){
mu <- n * a*x + b*(1-x)
sigma <- sqrt(n) * abs(b-a) * sqrt(x*(1-x))
1-pnorm(35, mu, sigma)
})
min(p[which(exp_val > 0.8)])
Question 3: Betting on Roulette
A casino offers a House Special bet on roulette, which is a bet on five pockets
(00, 0, 1, 2, 3) out of 38 total pockets. The bet pays out 6 to 1. In other words,
a losing bet yields -$1 and a successful bet yields $6. A gambler wants to
know the chance of losing money if he places 500 bets on the roulette House
Special.
The following 7-part question asks you to do some calculations related to this
scenario.
Question 3a
What is the expected value of the payout for one bet? A: -0.0789
p <- 5/38
a <- 6
b <- -1
mu <- a*p + b*(1-p)
mu
Question 3b
What is the standard error of the payout for one bet? A: 2.37
sigma <- abs(b-a) * sqrt(p*(1-p))
sigma
Question 3c
What is the expected value of the average payout over 500 bets? A: -0.0789
Remember there is a difference between expected value of the average and
expected value of the sum.
mu
Question 3d
What is the standard error of the average payout over 500 bets? A: 0.106
Remember there is a difference between the standard error of the average
and standard error of the sum.
n <- 500
sigma/sqrt(n)
Question 3e
What is the expected value of the sum of 500 bets? A: -39.5
n*mu
Question 3f
What is the standard error of the sum of 500 bets? A: 52.9
sqrt(n) * sigma
Question 3g
Use pnorm() with the expected value of the sum and standard error of the sum
to calculate the probability of losing money over 500 bets, Pr (X ≤ 0). / A:
0.772
pnorm(0, n*mu, sqrt(n)*sigma)
Section 4: The Big Short
Section 4 Overview
Section 4 introduces you to the Big Short.
After completing Section 4, you will:
o understand the relationship between sampling models and
interest rates as determined by banks.
o understand how interest rates can be set to minimize the chances
of the bank losing money.
o understand how inappropriate assumptions of independence
contributed to the financial meltdown of 2007.
There is 1 assignment that uses the DataCamp platform for you to practice your coding
skills. For IDV learners, there is an additional assignment with exercises on insurance
that will comprehensively assess what you've learned throughout the course.
This section corresponds to this section in the course textbook.
We encourage you to use R to interactively test out your answers and further your
learning.
4.1 The Big Short
The Big Short: Interest Rates Explained
Textbook link
This video corresponds to the textbook section on interest rates External link.
Correction
At 2:35, the displayed results of the code are incorrect. Here are the correct
values:
n*(p*loss_per_foreclosure + (1-p)*0)
[1] -4e+06
sqrt(n)*abs(loss_per_foreclosure)*sqrt(p*(1-p))
[1] 885438
Key points
Interest rates for loans are set using the probability of loan defaults to
calculate a rate that minimizes the probability of losing money.
We can define the outcome of loans as a random variable. We can also
define the sum of outcomes of many loans as a random variable.
The Central Limit Theorem can be applied to fit a normal distribution to
the sum of profits over many loans. We can use properties of the
normal distribution to calculate the interest rate needed to ensure a
certain probability of losing money for a given probability of default.
Code: Interest rate sampling model
n <- 1000
loss_per_foreclosure <- -200000
p <- 0.02
defaults <- sample( c(0,1), n, prob=c(1-p, p), replace = TRUE)
sum(defaults * loss_per_foreclosure)
Code: Interest rate Monte Carlo simulation
B <- 10000
losses <- replicate(B, {
defaults <- sample( c(0,1), n, prob=c(1-p, p), replace =
TRUE)
sum(defaults * loss_per_foreclosure)
})
Code: Plotting expected losses
library(tidyverse)
data.frame(losses_in_millions = losses/10^6) %>%
ggplot(aes(losses_in_millions)) +
geom_histogram(binwidth = 0.6, col = "black")
Code: Expected value and standard error of the sum of 1,000 loans
n*(p*loss_per_foreclosure + (1-p)*0) # expected value
sqrt(n)*abs(loss_per_foreclosure)*sqrt(p*(1-p)) # standard error
Code: Calculating interest rates for expected value of 0
We can calculate the amount x to add to each loan so that the expected value
is 0 using the equation lp + x (1 – p) = 0. Note that this equation is the
definition of expected value given a loss per foreclosure l with foreclosure
probability p and profit x if there is no foreclosure (probability 1 - p).
We solve for x = - lp /(1-p) and calculate x:
x = - loss_per_foreclosure*p/(1-p)
On a $180,000 loan, this equals an interest rate of:
x/180000
Equations: Calculating interest rate for 1% probability of losing
money
We want to calculate the value of x for which Pr(S < 0) = 0.01. The expected
value E[S] of the sum of n = 1000 loans given our definitions of x, l and p is:
μS =( lp+ x (1− p))∗n
And the standard error of the sum of n loans, SE[S], is:
σ S=| x−l|√ np (1− p)
Because we know the definition of a Z-score is Z = (x - µ)/ σ ❑, we know that Pr
(Z < - µ / σ ❑. Thus, equals:
z<-qnorm(0.01) gives us the value of for which , meaning:
Solving for gives:
Code: Calculating interest rate for 1% probability of losing money
l <- loss_per_foreclosure
z <- qnorm(0.01)
x <- -l*( n*p - z*sqrt(n*p*(1-p)))/ ( n*(1-p) + z*sqrt(n*p*(1-p)))\x
x/180000 # interest rate
loss_per_foreclosure*p + x*(1-p) # expected value of the profit per
loan
n*(loss_per_foreclosure*p + x*(1-p)) # expected value of the profit over
n loans
Code: Monte Carlo simulation for 1% probability of losing money
Note that your results will vary from the video because the seed is not set.
B <- 100000
profit <- replicate(B, {
draws <- sample( c(x, loss_per_foreclosure), n,
prob=c(1-p, p), replace = TRUE)
sum(draws)
})
mean(profit) # expected value of the profit over n loans
mean(profit<0) # probability of losing money
The Big Short
Textbook link
This video corresponds to the textbook section on The Big Short External link.
Key points
The Central Limit Theorem states that the sum of independent draws of
a random variable follows a normal distribution. However, when the
draws are not independent, this assumption does not hold.
If an event changes the probability of default for all borrowers, then the
probability of the bank losing money changes.
Monte Carlo simulations can be used to model the effects of unknown
changes in the probability of default.
Code: Expected value with higher default rate and interest rate
p <- .04
loss_per_foreclosure <- -200000
r <- 0.05
x <- r*180000
loss_per_foreclosure*p + x*(1-p)
Equations: Probability of losing money
We can define our desired probability of losing money, , as:
If is the expected value of the urn (one loan) and is the standard deviation of
the urn (one loan), then and .
As in the previous video, we define the probability of losing money . In the first
equation, we can see that:
It follows that:
To find the value of for which is less than or equal to our desired value, we
take and solve for :
Code: Calculating number of loans for desired probability of losing
money
The number of loans required is:
z <- qnorm(0.01)
l <- loss_per_foreclosure
n <- ceiling((z^2*(x-l)^2*p*(1-p))/(l*p + x*(1-p))^2)
n # number of loans required
n*(loss_per_foreclosure*p + x * (1-p)) # expected profit over n
loans
Code: Monte Carlo simulation with known default probability
This Monte Carlo simulation estimates the expected profit given a known
probability of default . Note that your results will differ from the video because
the seed is not set.
B <- 10000
p <- 0.04
x <- 0.05 * 180000
profit <- replicate(B, {
draws <- sample( c(x, loss_per_foreclosure), n,
prob=c(1-p, p), replace = TRUE)
sum(draws)
})
mean(profit)
Code: Monte Carlo simulation with unknown default probability
This Monte Carlo simulation estimates the expected profit given an unknown
probability of default , modeling the situation where an event changes the
probability of default for all borrowers simultaneously. Note that your results
will differ from the video because the seed is not set.
p <- 0.04
x <- 0.05*180000
profit <- replicate(B, {
new_p <- 0.04 + sample(seq(-0.01, 0.01, length = 100), 1)
draws <- sample( c(x, loss_per_foreclosure), n,
prob=c(1-new_p, new_p), replace =
TRUE)
sum(draws)
})
mean(profit) # expected profit
mean(profit < 0) # probability of losing money
mean(profit < -10000000) # probability of losing over $10 million
4.2 Assessment: The Big Short
Introduction to Assessment: The Big Short
Introduction
These exercises, available to verified learners only, review and assess the
following concepts:
o Expected value and standard error of a single draw of a
random variable
o Expected value and standard error of the sum of draws of a
random variable
o Monte Carlo simulation of the sum of draws of a random
variable
o The Central Limit Theorem approximation of the sum of draws
of a random variable
o Using z-scores to calculate values related to the normal
distribution and normal random variables
o Calculating interest/premium rates to minimize chance of
losing money
o Determining a number of loans/policies required to profit
o Simulating the effects of a change in event probability
Setup and libraries
Run the code below to set up your environment and load the libraries you will
need for the following exercises:
library(tidyverse)
library(dslabs)
IMPORTANT: Some of these exercises use dslabs datasets that were added
in a July 2019 update. Make sure your package is up to date with the
command install.packages("dslabs").
Background
In the motivating example The Big Short, we discussed how discrete and
continuous probability concepts relate to bank loans and interest rates. Similar
business problems are faced by the insurance industry.
Just as banks must decide how much to charge as interest on loans based on
estimates of loan defaults, insurance companies must decide how much to
charge as premiums for policies given estimates of the probability that an
individual will collect on that policy.
We will use data from 2015 US Period Life Tables External link. Here is the code you
will need to load and examine the data from dslabs:
data(death_prob)
head(death_prob)
There are six multi-part questions for you to answer that follow.
Questions 1 and 2: Insurance rates, part 1
Final Assessment due Oct 4, 2022 15:14 +07
Use the information below as you answer this 6-part question.
An insurance company offers a one-year term life insurance policy that pays
$150,000 in the event of death within one year. The premium (annual cost) for
this policy for a 50 year old female is $1,150. Suppose that in the event of a
claim, the company forfeits the premium and loses a total of $150,000, and if
there is no claim the company gains the premium amount of $1,150. The
company plans to sell 1,000 policies to this demographic.
50 year old males have a different probability of death than 50 year old
females. We will calculate a profitable premium for 50 year old males in the
following four-part question.
Questions 3 and 4: insurance rates, part 2
Final Assessment due Oct 4, 2022 15:14 +07
Life insurance rates are calculated using mortality statistics from the recent
past. They are priced such that companies are almost assured to profit as
long as the probability of death remains similar. If an event occurs that
changes the probability of death in a given age group, the company risks
significant losses.
In this 6-part question, we'll look at a scenario in which a lethal pandemic
disease increases the probability of death within 1 year for a 50 year old
to .015. Unable to predict the outbreak, the company has sold 1,000 $150,000
life insurance policies for $1,150.
Question 4, which has two parts, continues the scenario from Question 3.
Questions 5 and 6: Insurance rates, part 3
Final Assessment due Oct 4, 2022 15:14 +07
Question 5, which has 4 parts, continues the pandemic scenario from
Questions 3 and 4.
Suppose that there is a massive demand for life insurance due to the
pandemic, and the company wants to find a premium cost for which the
probability of losing money is under 5%, assuming the death rate stays stable
at p = 0.015.
The company cannot predict whether the pandemic death rate will stay stable.
Set the seed to 29, then write a Monte Carlo simulation that for each of B =
10000 iterations:
o randomly changes p by adding a value between -0.01 and 0.01
with sample(seq(-0.01, 0.01, length = 100), 1)
o uses the new random p to generate a sample of n = 1,000 policies
with premium x and loss per claim l = -150000
o returns the profit over n policies (sum of random variable)
(IMPORTANT! If you use R 3.6 or later, you will need to use the
command set.seed(x, sample.kind = "Rounding") instead
of set.seed(x). Your R version will be printed at the top of the Console
window when you start RStudio.)
The outcome should be a vector of B total profits. Use the results of the Monte
Carlo simulation to answer the following three questions.
(Hint: Use the process from lecture for modeling a situation for loans that
changes the probability of default for all borrowers simultaneously.)