N <- 10000
sim <- rbinom(N, size = 15, prob = 0.2)
mean(sim == 5)[1] 0.1081
mean(sim >= 5)[1] 0.1726
mean(sim < 3)[1] 0.385
N <- 10000
sim <- rbinom(N, size = 15, prob = 0.2)
mean(sim == 5)[1] 0.1081
mean(sim >= 5)[1] 0.1726
mean(sim < 3)[1] 0.385
library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.1 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
alpha <- 0.8
n <- 20
p <- 0.5
y <- 0:n
pmf <- alpha * dbinom(y, n, p)
pmf[y == 0] <- (1 - alpha) + alpha * dbinom(0, n, p)
mydata <- data.frame(y = y, py = pmf)
(ggplot(data = mydata)
+ geom_col(aes(x = y, y = py), width = .5)
+ scale_x_continuous(breaks = 0:20)
+ labs(x = 'y', y = 'p(y)', title = 'Zero-Inflated Binomial pmf (alpha=0.8, n=20, p=0.5)')
+ theme_classic(base_size = 18)
)cdf <- (1 - alpha) + alpha * pbinom(y, n, p)
median_val <- min(y[cdf >= 0.5])
median_val[1] 9