Probability Distributions & Simulation

Distributions: norm, unif, binom, pois, exp, gamma, beta, t, chisq, f, lnorm, weibull, cauchy, geom, hyper, nbinom, logis, multinom, plus mvtnorm, extraDistr, distributional packages.

26.1 The d/p/q/r convention

density / mass dnorm(0) = 0.399 pnorm(1.96) = 0.975 quantile (inverse CDF) qnorm(0.975) = 1.96

Distributions: norm, unif, binom, pois, exp, gamma, beta, t, chisq, f, lnorm, weibull, cauchy, geom, hyper, nbinom, logis, multinom, plus mvtnorm, extraDistr, distributional packages.

dbinom(3, size = 10, prob = 0.5)        # P(X = 3)
pbinom(3, 10, 0.5)                      # P(X <= 3)
1 - pnorm(2)                            # upper tail
pnorm(2, lower.tail = FALSE)
qt(0.975, df = 10)                      # t critical value
ppois(2, lambda = 4)
curve(dnorm(x), -4, 4); curve(dt(x, 3), add = TRUE, col = "red")

26.2 Random sampling & reproducibility

set.seed(42)                            # reproducible random numbers
sample(1:10, 3)                         # without replacement
sample(c("H", "T"), 10, replace = TRUE)
sample(c("a", "b"), 10, replace = TRUE, prob = c(0.8, 0.2))
runif(5, min = 0, max = 1); rnorm(5, mean = 100, sd = 15); rpois(5, 3)

26.3 Monte Carlo simulation

# Estimate pi
n <- 1e6
x <- runif(n); y <- runif(n)
4 * mean(x^2 + y^2 <= 1)

# Birthday problem
same_bday <- replicate(10000, any(duplicated(sample(365, 23, replace = TRUE))))
mean(same_bday)          # ~0.507

# Central limit theorem
means <- replicate(5000, mean(rexp(30, rate = 1)))
hist(means, breaks = 50)

26.4 Bootstrap

boot_means <- replicate(2000, mean(sample(x, replace = TRUE)))
quantile(boot_means, c(0.025, 0.975))   # percentile CI
library(boot); boot(data = x, statistic = \(d, i) mean(d[i]), R = 2000) |> boot.ci(type = "perc")