y <- c(11,7,2,7,4,8,13,3,6,6,15,8,2,4,5,11,11,4,9,3,9,8,5,9,6)
T <- sum(y)
n <- length(y)

#Fixing tail prob to get 95% CI
alpha1 <- 0.025
alpha2 <- 0.025

#UCB and LCB
f_upper <- function(lambda, alpha, t, n) {
  abs(ppois(t, n * lambda) - alpha)
}

f_lower <- function(lambda, alpha, t, n) {
  abs(ppois(t-1, n * lambda, lower.tail = FALSE) - alpha)
}

lambda_L <- optimize(f_lower, interval = c(0, 20), alpha = alpha2, t = T, n = n)$minimum
lambda_U <- optimize(f_upper, interval = c(0, 20), alpha = alpha1, t = T, n = n)$minimum

lambda_L
## [1] 6.038297
lambda_U
## [1] 8.16038
par(mfrow = c(1, 2))

x_vals <- 160:220  
prob_upper <- dpois(x_vals, n * lambda_U)

barplot(prob_upper, names.arg = x_vals, col = 'lightblue', 
        main = paste("Poisson UCB", round(lambda_U, 3)),
        xlab = "Total arrivals T", ylab = "Probability")

barplot(ifelse(x_vals <= T, prob_upper, 0), names.arg = x_vals, 
        col = 'red', add = TRUE)

#Verifying
 ppois(T, n * lambda_U)
## [1] 0.0249999
prob_lower <- dpois(x_vals, n * lambda_L)

barplot(prob_lower, names.arg = x_vals, col = 'lightgreen',
        main = paste("Poisson LCB", round(lambda_L, 3)),
        xlab = "Total arrivals T", ylab = "Probability")

barplot(ifelse(x_vals >= T, prob_lower, 0), names.arg = x_vals,
        col = 'red', add = TRUE)

#Verifying  
 ppois(T-1, n * lambda_L, lower.tail = FALSE)
## [1] 0.02499787
#Problem 6
    n <- 30
    x <- 15
    alpha <- 0.05
    
    #LCB
    f_lower <- function(p, alpha, n, x) {
      abs(pbinom(x-1, n, p) - (1 - alpha))
    }
    
    p_lower_exact <- optimize(f_lower, interval = c(0, 1), 
                              alpha = alpha, n = n, x = x)$minimum
    
  p_lower_exact
## [1] 0.3388766
 # Verifying
 
 pbinom(x-1, n, p_lower_exact, lower.tail = FALSE)  
## [1] 0.04998016
    p_hat <- x / n
    z <- qnorm(1 - alpha)
    se <- sqrt(p_hat * (1 - p_hat) / n)
    p_lower_approx <- p_hat - z * se
     p_lower_approx
## [1] 0.3498461
    prob <- pbinom(15, n, 0.4)
    prob
## [1] 0.9029432
    #problem 5
    t_value <- qt(0.90, df = 99)
    t_value
## [1] 1.290161