Chapter 3 - Sampling the Imaginary

This chapter introduced the basic procedures for manipulating posterior distributions. Our fundamental tool is samples of parameter values drawn from the posterior distribution. These samples can be used to produce intervals, point estimates, posterior predictive checks, as well as other kinds of simulations. Posterior predictive checks combine uncertainty about parameters, as described by the posterior distribution, with uncertainty about outcomes, as described by the assumed likelihood function. These checks are useful for verifying that your software worked correctly. They are also useful for prospecting for ways in which your models are inadequate.

Place each answer inside the code chunk (grey box). The code chunks should contain a text response or a code that completes/answers the question or activity requested. Make sure to include plots if the question requests them. Problems are labeled Easy (E), Medium (M), and Hard(H).

Finally, upon completion, name your final output .html file as: YourName_ANLY505-Year-Semester.html and publish the assignment to your R Pubs account and submit the link to Canvas. Each question is worth 5 points

Simulate the posterior distribution

p_grid <- seq( from=0 , to=1 , length.out=1000 )
prior <- rep( 1 , 1000 )
likelihood <- dbinom( 6 , size=9 , prob=p_grid )
posterior <- likelihood * prior
posterior <- posterior / sum(posterior)
set.seed(100)
samples <- sample( p_grid , prob=posterior , size=1e4 , replace=TRUE )

Questions

Use the values in samples to answer the questions that follow.

3E1. How much posterior probability lies below p = 0.2?

0.04% of posterior probability lies below p = 0.2.
# mean(samples < 0.2)
sum( samples < 0.2 ) / 1e4
## [1] 4e-04

3E2. How much posterior probability lies above p = 0.8?

11.16% of posterior probability lies above p = 0.8.
# mean(samples > 0.8)
sum( samples > 0.8 ) / 1e4
## [1] 0.1116

3E3. How much posterior probability lies between p = 0.2 and p = 0.8?

88.80% posterior probability lies between p = 0.2 and p = 0.8.
# mean(samples > 0.2 & samples < 0.8)
sum( samples > 0.2 & samples < 0.8 ) / 1e4
## [1] 0.888

3E4. 20% of the posterior probability lies below which value of p?

20% of the posterior probability lies below p = 0.52.
quantile( samples , 0.2 )
##       20% 
## 0.5185185

3E5. 20% of the posterior probability lies above which value of p?

20% of the posterior probability lies above p = 0.76.
quantile( samples , 0.8 )
##       80% 
## 0.7557558

3E6. Which values of p contain the narrowest interval equal to 66% of the posterior probability?

p-values of 0.51 and 0.77 contain the narrowest interval equal to 66% of the posterior probability.
HPDI( samples , prob = 0.66 )
##     |0.66     0.66| 
## 0.5085085 0.7737738

3E7. Which values of p contain 66% of the posterior probability, assuming equal posterior probability both below and above the interval?

p-values of 0.50 and 0.77 contain 66% of the posterior probability, assuming equal posterior probability both below and above the interval.
PI( samples , prob = 0.66 )
##       17%       83% 
## 0.5025025 0.7697698

3M1. Suppose the globe tossing data had turned out to be 8 water in 15 tosses. Construct the posterior distribution, using grid approximation. Plot the posterior. Use the same flat prior as before.

p_grid <- seq( from=0 , to=1 , length.out=1000 )
prior <- rep(1,1000)
likelihood <- dbinom( 8 , size=15 , prob=p_grid )
posterior <- likelihood * prior
posterior <- posterior / sum(posterior)
plot(p_grid, posterior, type = "l")

p_grid[ which.max(posterior) ]
## [1] 0.5335335

3M2. Draw 10,000 samples from the grid approximation from above. Then use the samples to calculate the 90% HPDI for p.

p-values of 0.33 and 0.72 contain the narrowest interval equal to 90% of the posterior probability.
set.seed(100)
samples <- sample( p_grid , size=1e4 , replace=TRUE , prob=posterior )
HPDI( samples , prob = 0.9 )
##      |0.9      0.9| 
## 0.3343343 0.7217217

3M3. Construct a posterior predictive check for this model and data. This means simulate the distribution of samples, averaging over the posterior uncertainty in p. What is the probability of observing 8 water in 15 tosses?

The probability of observing 8 water in 15 tosses is 14.53%
set.seed(100)
w <- rbinom( 1e4 , size = 15 , prob = samples )
simplehist( w , xlab="Dummy water count" )

sum( w == 8 ) / 1e4
## [1] 0.1453

3M4. Using the posterior distribution constructed from the new (8/15) data, now calculate the probability of observing 6 water in 9 tosses.

The probability of observing 6 water in 9 tosses is 17.89%.
set.seed(100)
w <- rbinom( 1e4 , size = 9 , prob = samples )
simplehist( w , xlab="Dummy water count" )

sum( w == 6 ) / 1e4
## [1] 0.1789

3M5. Start over at 3M1, but now use a prior that is zero below p = 0.5 and a constant above p = 0.5. This corresponds to prior information that a majority of the Earth’s surface is water. Repeat each problem above and compare the inferences. Plot the posterior. What difference does the better prior make? If it helps, compare inferences (using both priors) to the true value p = 0.7.

The posterior probability have become zero for p=0.5 and the height of the curve after p=0.5 has increased, so the probability mass appears to have shifted up to the rest of the curve.

p-values of 0.50 and 0.71 contain the narrowest interval equal to 90% of the posterior probability compared to 0.33 and 0.72 contain the narrowest interval equal to 90% of the posterior probability. The prior has a big impact on the lower end of the HDPI as it increased from 0.33 to 0.5. However, it doesn't affect the upper end much.

The probability of observing 8 water in 15 tosses is 15.18% compared to the probability of observing 8 water in 15 tosses is 14.53%. The histogram is now less symmetrical than earlier. The modal predicted value has shifted from 8 to 9.

The probability of observing 6 water in 9 tosses is 23.43% compared to the probability of observing 6 water in 9 tosses is 17.89%. The modal predicted value has shifted from 5 to 6.
# 3M1
p_grid <- seq( from=0 , to=1 , length.out=1000 )
prior <- ifelse(p_grid < 0.5, 0, 1)
likelihood <- dbinom( 8 , size = 15 , prob = p_grid )
posterior <- likelihood * prior
posterior <- posterior / sum(posterior)
plot(p_grid, posterior, type = "l")

p_grid[ which.max(posterior) ]
## [1] 0.5335335
# 3M2
samples <- sample( p_grid , size=1e4 , replace=TRUE , prob=posterior )
HPDI( samples , prob = 0.9 )
##      |0.9      0.9| 
## 0.5005005 0.7137137
# 3M3
w <- rbinom( 1e4 , size = 15 , prob = samples )
simplehist( w , xlab="Dummy water count" )

sum( w == 8 ) / 1e4
## [1] 0.1518
# 3M4
w <- rbinom( 1e4 , size = 9 , prob = samples )
simplehist( w , xlab="Dummy water count" )

sum( w == 6 ) / 1e4
## [1] 0.2343

3M6. Suppose you want to estimate the Earth’s proportion of water very precisely. Specifically, you want the 99% percentile interval of the posterior distribution of p to be only 0.05 wide. This means the distance between the upper and lower bound of the interval should be 0.05. How many times will you have to toss the globe to do this?

We need more than 2200 tosses of the globe to get the 99% percentile interval of the posterior distribution of p to be only 0.05 wide. 
f <- function(N) {
    p_true <- 0.7
    w <- rbinom( 1 , size = N , prob = p_true )
    p_grid <- seq( from=0 , to=1 , length.out=1000 )
    prior <- rep( 1 , 1000 )
    likelihood <- dbinom( w , size=N , prob=p_grid )
    posterior <- likelihood * prior
    posterior <- posterior / sum(posterior)
    samples <- sample( p_grid , size=1e4 , replace=TRUE , prob=posterior )
    interval <- PI(samples, prob=0.99)
    as.numeric( interval[2] - interval[1])
}

Nlist <- c( 50, 100, 500, 1000, 2000, 2200)
Nlist <- rep( Nlist, each = 100 ) # running 100 simulations at each of sample size
width <- sapply( Nlist, f )
plot( Nlist, width )
abline( h = 0.05, col = 'blue')