## Simulate the first time a random walk returns to 0 random_walk_0 <- function() { generateX <- function() sample(c(-1, 1), 1) S <- generateX() count <- 1 while (S != 0) { S <- S + generateX() count <- count + 1 } count } C <- replicate(1000, random_walk_0()) heads2 <- function(p) { X <- runif(1) > p Y <- runif(1) > p count <- 2 while (X || Y) { X <- Y Y <- runif(1) > p count <- count + 1 } count } C <- replicate(100000, heads2(0.5) - 2) table(C) p.hat <- 1 / (1 + mean(C)) p.geom <- dgeom(0:20, prob = 0.2) p.geom <- p.geom / sum(p.geom) chisq.test(table(C)[1:21], p = p.geom)