library(tidyverse)
library(purrr)
B <- 10000
n_grid <- c(5, 20, 50, 100)
pops <- tribble(
~pop, ~rfun, ~mu_true, ~sig2_true,
"UNIF(0,8)", function(n) runif(n, 0, 8), 4, 16/3,
"EXP(scale=4)", function(n) rexp(n, rate = 1/4), 4, 16,
"GEO(p=0.2)", function(n) rgeom(n, prob = 0.2), 4, 20
)
cover_once <- function(y, mu_true, sig2_true) {
n <- length(y)
ybar <- mean(y)
s <- sd(y)
s2 <- var(y)
tcrit <- qt(0.975, df = n - 1)
mu_L <- ybar - tcrit * s / sqrt(n)
mu_U <- ybar + tcrit * s / sqrt(n)
cover_mu <- (mu_L <= mu_true && mu_true <= mu_U)
chi_L <- qchisq(0.025, df = n - 1)
chi_U <- qchisq(0.975, df = n - 1)
sig2_L <- (n - 1) * s2 / chi_U
sig2_U <- (n - 1) * s2 / chi_L
cover_sig2 <- (sig2_L <= sig2_true && sig2_true <= sig2_U)
c(cover_mu = cover_mu, cover_sig2 = cover_sig2)
}
results <- pops %>%
crossing(n = n_grid) %>%
mutate(sim = pmap(list(rfun, mu_true, sig2_true, n), function(rfun, mu0, v0, n) {
mat <- replicate(B, {
y <- rfun(n)
cover_once(y, mu0, v0)
})
tibble(
cover_mu = mean(mat["cover_mu", ]),
cover_sig2 = mean(mat["cover_sig2", ])
)
})) %>%
unnest(sim)
mu_table <- results %>%
select(pop, n, mu_true, cover_mu) %>%
pivot_wider(names_from = pop, values_from = cover_mu) %>%
arrange(n)
sig2_table <- results %>%
select(pop, n, sig2_true, cover_sig2) %>%
pivot_wider(names_from = pop, values_from = cover_sig2) %>%
arrange(n)
mu_table