\[f(x) = \frac{1}{\beta} \exp\left(-\frac{x-\mu}{\beta}\right) - e^{-\frac{x-\mu}{\beta}}; \quad -\infty < x < \infty\]
# Function a
# Mendefinisikan fungsi invers dari Inverse Transform Method
inverse.gumbel <- function(U, mu, beta){
mu - beta * log(-log(U)) #mendefinisikan hasil dari invers F atau F^-1(x)
}
rand.gumbel <- function(n = 100, mu = 0, beta = 1){
U <- runif(n)
x <- inverse.gumbel(U, mu, beta)
return(x)
}
set.seed(123)
X1 <- rand.gumbel(n = 100, mu = 0, beta = 1)
hist(X1, freq=F, breaks =15, xlab='X', main='Function - a Inverse Transform Method')
\[ f(y) = \begin{cases} y & \text{jika } 0 \leq y \leq 1 \\ 1 & \text{jika } 1 < y \leq 1.5 \\ 0 & \text{lainnya} \end{cases} \]
# Fungsi invers dari CDF
inv.transform.b <- function(U) {
if (U <= 0.5) {
return(sqrt(2 * U))
} else {
return((U + 0.5))
}
}
simulasi.inv <- function(n) {
U <- runif(n)
inv.trans <- sapply(U, inv.transform.b) # menerapkan fungsi invers dari CDF
return(inv.trans)
}
set.seed(123)
# Simulasikan 100 variabel acak
X2 <- simulasi.inv(100)
# Buat histogram dari hasil simulasi
hist(X2, prob = TRUE,
main = "Function - b Inverse Transform Method",
xlab = "Y", ylab = "Density")
batas <- seq(0, 1.5, 0.1)
acceptance.rej.gumbel <- function(n, mu, beta) {
result <- numeric(n)
i <- 0
while (i < n) {
x <- runif(1, min = mu - 5*beta, max = mu + 5*beta)
y <- runif(1, 0, 1/beta)
if (y <= (1/beta) * exp(-(x-mu)/beta - exp(-(x-mu)/beta))) {
i <- i + 1
result[i] <- x
}
}
return(result)
}
n <- 100
mu <- 0
beta <- 1
set.seed(123)
X3 <- acceptance.rej.gumbel(n, mu, beta)
hist(X3, breaks = 20, main = "Function a - Acceptance-Rejection", xlab = "x", ylab = "Frequency")
acceptance.rej.b <- function(n, mu, beta) {
y <- numeric(n)
i <- 1
while (i <= n) {
proposed_y <- runif(1, 0, 1.5)
u <- runif(1)
if (proposed_y <= 1) {
if (u <= proposed_y) {
y[i] <- proposed_y
i <- i + 1
}
} else if (proposed_y <= 1.5) {
if (u <= 1) {
y[i] <- proposed_y
i <- i + 1
}
}
}
return(y)
}
set.seed(123)
X4 <- acceptance.rej.b(n = 100, mu = 0, beta = 1)
hist(X4, freq=F, breaks =8,xlab='X', main="Function b - Acceptance-Rejection")
# Mengatur layout 2x2 untuk menampilkan 4 histogram
par(mfrow = c(2, 2))
hist(X1, freq=F, breaks =15, xlab='X', main='Function - a Inverse Transform Method', col = "lightgreen", border = "black")
hist(X3, freq=F, breaks =15,xlab='X', main="Function a - Acceptance-Rejection", col ="lightcoral", border = "black")
hist(X2, prob = TRUE, breaks = 15, main = "Function - b Inverse Transform Method", xlab = "X", ylab = "Density", freq = F, col = "lightblue", border = "black")
hist(X4, freq=F, breaks =15, xlab='X', main="Function b - Acceptance-Rejection",col = "lightyellow", border = "black")
Berdasarkan hasil yang diperoleh pada 4 histogram tersebut, dapat disimpulkan bahwa kedua metode - Inverse Transform Method dan Acceptance-Rejection Method - menghasilkan distribusi yang secara umum konsisten untuk kedua fungsi (a dan b). Untuk fungsi a yang merupakan distribusi gumbel, kedua metode menghasilkan distribusi yang menyerupai bentuk lonceng, meskipun Acceptance-Rejection tampak sedikit lebih halus. Untuk fungsi b, kedua metode menunjukkan peningkatan densitas dari 0 hingga 1, dan kemudian densitas yang relatif konstan antara 1 dan 1.5, sesuai dengan definisi fungsi. Namun, Inverse Transform Method untuk fungsi b menunjukkan puncak yang lebih jelas pada x = 1, sementara Acceptance-Rejection Method menghasilkan distribusi yang lebih merata. Perbedaan kecil ini mungkin disebabkan oleh sifat acak dari sampel dan efisiensi relatif dari masing-masing metode, tetapi secara keseluruhan, kedua metode berhasil menghasilkan distribusi yang mencerminkan karakteristik fungsi kepadatan peluang (fkp) yang diberikan.