Code
f <- function(x){
1 / (log(2) * (x + 1) * (x + 2))
}
g <- function(x){
1 / (1 + x)^2
}
c <- 1 / log(2)
G_inv <- function(p){
p / (1 - p)
}
F_inv <- function(p){
(1 - 2^p) / (2^(p - 1) - 1)
}
N <- 10^6
set.seed(123)
U_1 <- runif(N)
U_2 <- runif(N)
X_1 <- F_inv(U_1)
X_2 <- G_inv(U_1)
X_2 <- X_2[U_2 <= f(X_2) / (c * g(X_2))]
ar <- length(X_2) / N
th_ar <- 1 / c
print(rbind(th_ar, ar)) [,1]
th_ar 0.6931472
ar 0.6925490
Code
curve(f, from = 0, to = F_inv(.975), col = "black", lwd = 2, lty = 2)
lines(density(X_1[X_1 < F_inv(.975)]), col = "red", lwd = 2, xlab = "", main = "")
lines(density(X_2[X_2 < F_inv(.975)]), col = "blue", lwd = 2)
legend("topright",
legend = c("pdf", "Inv. transform", "Rejection sampling"),
col = c("black", "red", "blue"),
lty = c(2, 1, 1),
lwd = rep(2, 3))