# Danny Tshitumbu
# ID: 211964756
# Applied Stats 1: Q. 6. 3.
# 6.3.a.
n <- 1e6
X <- rcauchy(n, 0, 1)
W1 <- exp(-abs(X)^3 / 3) * (pi * (1 + X^2))
Std_W1 <- W1/sum(W1)
sigma1 <- sum(X^2 * Std_W1)
sigma1
## [1] 0.7760992
# 6.3. b.
rm(list = ls()) # Clear all variables to avoid confusion/mistakes in calculation
n2 <- 1e6
U1 <- runif(n2)
X <- -log(U1)
U2 <- runif(n2)
test <- exp(-abs(X)^3 / 3) / exp((2/3) - X)
X_ret <- X[U2 <= test]
sigma2 <- (1/length(X_ret)) * sum(X_ret^2)
sigma2
## [1] 0.7773671
# 6.3.c.
ord_Xret <- sort(X_ret)
n3 <- length(ord_Xret)-1
diff_X <- rep(0, n3)
for (i in 1:n3) {
diff_X[i] <- ord_Xret[i+1] - ord_Xret[i]
}
h <- (ord_Xret^2)[1:n3]
q <- (exp(-abs(ord_Xret)^3 / 3))[1:n3]
sigma3 <- sum(diff_X * h * q) / sum(diff_X * q)
sigma3
## [1] 0.7765471
# Performance of b
system.time({
n2 <- 1e6
U1 <- runif(n2)
X <- -log(U1)
U2 <- runif(n2)
test <- exp(-abs(X)^3 / 3) / exp((2/3) - X)
X_ret <- X[U2 <= test]
sigma2 <- (1/length(X_ret)) * sum(X_ret^2)
})
## user system elapsed
## 0.383 0.027 0.414
# Perfomance of c
system.time({
ord_Xret <- sort(X_ret)
n3 <- length(ord_Xret)-1
diff_X <- rep(0, n3)
for (i in 1:n3) {
diff_X[i] <- ord_Xret[i+1] - ord_Xret[i]
}
h <- (ord_Xret^2)[1:n3]
q <- (exp(-abs(ord_Xret)^3 / 3))[1:n3]
sigma <- sum(diff_X * h * q) / sum(diff_X * q)
})
## user system elapsed
## 2.022 0.023 2.069
# Comment: We note that the approach in (c) takes longer, so the estimation using
# rejection sampling seems to be faster than the one described by Philippe and Robert