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")