TUGAS KELOMPOK P5 PEMPRO

Author

Fitri Diana Musa

NAMA KELOMPOK 6:

Nama NIM
Rosita Ria Rusesta M0501251016
Arnedi Rizki Adidarma M0501251040
Freditasari Purwa Hidayat M0501251052
Fitri Diana Musa M0501251054

NOMOR 1

Pertanyaan Pertama

# Tentukan seed (penjumlahan 4 angka terakhir NIM dari semua anggota 1016+1040+1052+1054=4162)
set.seed(4162)

# A1. Buat 1000 sampel dari distribusi Normal standar (mean=0, sd=1)
sampel_norm <- rnorm(1000, mean = 0, sd = 1)

# Hitung rata-rata dan standar deviasi dari sampel
mean_sampel <- mean(sampel_norm)
sd_sampel <- sd(sampel_norm)

# Tampilkan hasil
cat("Rata-rata sampel:", mean_sampel, "\n")
Rata-rata sampel: 0.01230326 
cat("Standar deviasi sampel:", sd_sampel, "\n\n")
Standar deviasi sampel: 0.9813416 

Interpretasi

Dalam Distribusi Normal Standar, diketahui bahwa:

                  X∼N(0,1)
  1. Rata-rata teoritis (μ) = 0
  2. Standar deviasi teoritis (σ) = 1

Perbandingan Hasil dengan Teori

  1. Teori : μ = 0, σ = 1
  2. Hasil simulasi diperolah nilai rata-rata = 0.01230326, dengan kata lain, hasil ini mendekati 0 (hanya selisih kecil karena variasi acak), serta nilai standar deviasi diperoleh yaitu sebesar 0.9813416 yang mendekati 1.

Artinya hasil simulasi sesuai teori, karena dengan jumlah sampel besar (1000), hukum Bilangan Besar membuat rata-rata dan standar deviasi sampel mendekati nilai teoritisnya.

Pertanyaan Kedua

# P(X < 1.5), X ~ N(0,1)
p1 <- pnorm(1.5, mean = 0, sd = 1)

# P(X > 2), X ~ N(2,4) -> sd = sqrt(4) = 2
p2 <- 1 - pnorm(2, mean = 2, sd = 2)

cat("P(X < 1.5) untuk N(0,1):", p1, "\n")
P(X < 1.5) untuk N(0,1): 0.9331928 
cat("P(X > 2) untuk N(2,4):", p2, "\n\n")
P(X > 2) untuk N(2,4): 0.5 

Interpretasi

  1. P(X < 1.5) untuk N(0,1): 0.9331928

Interpretasi: peluang variabel acak normal standar bernilai kurang dari 1.5 adalah sekitar 93,3%.

  1. P(X > 2) untuk N(2,4): 0.5

Interpretasi: karena titik x=2 sama dengan rata-rata distribusi, peluang ke kanan (lebih besar dari mean) = 50%.

Pertanyaan Ketiga

# A3. Cari kuantil 5%, 50%, 95% untuk N(mean=10, sd=2)
q5 <- qnorm(0.05, mean = 10, sd = 2)
q50 <- qnorm(0.50, mean = 10, sd = 2)
q95 <- qnorm(0.95, mean = 10, sd = 2)

cat("Kuantil 5%:", q5, "\n")
Kuantil 5%: 6.710293 
cat("Kuantil 50%:", q50, "\n")
Kuantil 50%: 10 
cat("Kuantil 95%:", q95, "\n\n")
Kuantil 95%: 13.28971 

Interpretasi

  1. 5% kuantil (6.71): hanya 5% data yang nilainya kurang dari 6.71.
  2. 50% kuantil (10): setengah data berada di bawah 10 (median).
  3. 95% kuantil (13.29): 95% data berada kurang dari 13.29.

Pertanyaan Keempat

library(ggplot2)
set.seed(4162)
data_binom <- rbinom(1000, size = 10, prob = 0.3)
data_binom <- data.frame(x = data_binom)

# Hitung PMF teoritis
pmf_binom <- data.frame(
  x = 0:10,
  prob = dbinom(0:10, size = 10, prob = 0.3)
)

# Visualisasi
ggplot(data_binom, aes(x = factor(x))) +
  geom_bar(fill = "#56B4E9", alpha = 0.7) +
  geom_point(
    data = pmf_binom,
    aes(x = factor(x), y = prob * 1000),  # dikali 1000 agar skala sama
    color = "#D55E00", size = 2
  ) +
  labs(
    title = "Distribusi Binomial: Barplot vs PMF Teoritis",
    x = "Jumlah Keberhasilan (x)",
    y = "Frekuensi"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5)
  )

Interpretasi

  1. Distribusi sampel sangat mendekati distribusi teoritis.
  2. Puncaknya di sekitar k=3, sesuai mean teoritis np=3.
  3. Selisih kecil (misalnya di k=7) wajar karena jumlah sampel hanya 1000, bukan seluruh populasi.
  4. Nilai k=8,9,10 tidak muncul di sampel karena probabilitasnya memang sangat kecil (<0.1%).

NOMOR 2

Pertanyaan Pertama

Buktikan bahwa itu merupakan PDF!

# Parameter
sigma <- 2

# Definisi PDF Rayleigh
f_rayleigh <- function(x, sigma) {
  ifelse(x >= 0, (x / sigma^2) * exp(-x^2 / (2 * sigma^2)), 0)
}

# 1) Cek non-negatif untuk beberapa nilai x
x_vals <- seq(-2, 10, by = 0.5)
pdf_vals <- f_rayleigh(x_vals, sigma)
data.frame(x = x_vals, f_x = pdf_vals)
      x          f_x
1  -2.0 0.000000e+00
2  -1.5 0.000000e+00
3  -1.0 0.000000e+00
4  -0.5 0.000000e+00
5   0.0 0.000000e+00
6   0.5 1.211542e-01
7   1.0 2.206242e-01
8   1.5 2.830649e-01
9   2.0 3.032653e-01
10  2.5 2.861459e-01
11  3.0 2.434894e-01
12  3.5 1.892320e-01
13  4.0 1.353353e-01
14  4.5 8.950445e-02
15  5.0 5.492117e-02
16  5.5 3.134200e-02
17  6.0 1.666349e-02
18  6.5 8.264863e-03
19  7.0 3.828109e-03
20  7.5 1.657174e-03
21  8.0 6.709253e-04
22  8.5 2.541774e-04
23  9.0 9.014692e-05
24  9.5 2.994187e-05
25 10.0 9.316633e-06
# 2) Cek integral dari 0 sampai tak hingga (harus = 1)
integral_result <- integrate(function(x) f_rayleigh(x, sigma), lower = 0, upper = Inf)
integral_result
1 with absolute error < 4.2e-05

Interpretasi

  1. Dari hasil tabel terlihat bahwa nilai fungsi f(x) untuk x < 0 semuanya bernilai 0, sedangkan untuk x >= 0 nilainya positif dan menurun mendekati nol ketika x semakin besar. Hal ini membuktikan bahwa syarat pertama PDF, yaitu f(x) >= 0, terpenuhi.

  2. Hasil integrasi di R menunjukkan nilai sebesar 1 (dengan galat absolut sangat kecil, < 4.2e-05). Artinya, integral dari f(x) pada selang 0 sampai tak hingga sama dengan 1. Dengan demikian, syarat kedua PDF juga terpenuhi.

Dengan demikian, fungsi f(x) tersebut dengan sigma = 2 adalah PDF yang valid.

Pertanyaan Kedua

Pilih pendekatan yang tepat (ITM atau AR), dan jelaskan alasan pemilihan metode secara logis dan matematis.

Jawaban:

Distribusi yang diberikan adalah distribusi Rayleigh dengan parameter sigma.
Untuk membangkitkan bilangan acak dari distribusi ini, terdapat dua metode umum, yaitu:

  1. Inverse Transform Method (ITM)
    1. Prinsip: menggunakan fungsi distribusi kumulatif (CDF) yang dapat diturunkan inverse-nya.
    2. Kelebihan: efisien, tidak ada sampel yang ditolak, dan langsung menghasilkan bilangan acak dari distribusi yang diinginkan.
    3. Cocok jika CDF dapat dituliskan dalam bentuk tertutup (closed form).
  2. Acceptance-Rejection Method (AR)
    1. Prinsip: membangkitkan bilangan acak dari distribusi pembanding (proposal distribution), lalu menerima atau menolak dengan probabilitas tertentu.
    2. Kelebihan: fleksibel untuk distribusi yang CDF atau inverse CDF-nya sulit didapatkan.
    3. Kekurangan: kurang efisien karena ada sampel yang ditolak.

Interpretasi

Pada kasus distribusi Rayleigh ini, fungsi CDF dan inverse CDF dapat dituliskan secara eksplisit dalam bentuk sederhana. Oleh karena itu, metode yang paling tepat digunakan adalah Inverse Transform Method (ITM), karena lebih sederhana, efisien, dan tidak membuang sampel.

Pertanyaan Ketiga

Karena kita memilih metode ITM, maka selanjutnya kita akan turunkan CDF dan inverse CDF-nya secara analitik.

# Parameter
sigma <- 2

# PDF Rayleigh
f_rayleigh <- function(x, sigma) {
  ifelse(x >= 0, (x / sigma^2) * exp(-x^2 / (2 * sigma^2)), 0)
}

# CDF Rayleigh
F_rayleigh <- function(x, sigma) {
  ifelse(x >= 0, 1 - exp(-x^2 / (2 * sigma^2)), 0)
}

# Inverse CDF Rayleigh (Quantile Function)
Finv_rayleigh <- function(u, sigma) {
  ifelse(u >= 0 & u <= 1, sigma * sqrt(-2 * log(1 - u)), NA)
}

# Contoh penggunaan
x_vals <- seq(0, 10, by = 1)
cdf_vals <- F_rayleigh(x_vals, sigma)

u_vals <- c(0.05, 0.5, 0.95)   # contoh probabilitas
quantiles <- Finv_rayleigh(u_vals, sigma)

# Output hasil
data.frame(x = x_vals, CDF = cdf_vals)
    x       CDF
1   0 0.0000000
2   1 0.1175031
3   2 0.3934693
4   3 0.6753475
5   4 0.8646647
6   5 0.9560631
7   6 0.9888910
8   7 0.9978125
9   8 0.9996645
10  9 0.9999599
11 10 0.9999963
data.frame(u = u_vals, Quantile = quantiles)
     u  Quantile
1 0.05 0.6405828
2 0.50 2.3548200
3 0.95 4.8954937

Interpretasi

Hasil perhitungan di R menunjukkan:

  1. Nilai CDF untuk x = 0 sampai 10 meningkat dari 0 hingga mendekati 1. Hal ini sesuai dengan sifat fungsi distribusi kumulatif yang monoton naik dan mendekati 1 ketika x semakin besar.

  2. Nilai inverse CDF (kuantil) untuk beberapa probabilitas:

    1. Kuantil 5% ≈ 0.6405828
    2. Kuantil 50% (median) ≈ 2.3548200
    3. Kuantil 95% ≈ 4.8954937

Interpretasi

Fungsi CDF dan inverse CDF dari distribusi Rayleigh dapat diturunkan dengan jelas dan hasil perhitungan numerik konsisten dengan teori. Inverse CDF ini yang akan digunakan untuk membangkitkan bilangan acak pada langkah berikutnya dengan metode ITM.

Pertanyaan Keempat

Bangkitkan bilangan acak sebanyak 10000 X dua digit terakhir NIM terkecil dari anggota kelompok Anda.

# Parameter
sigma <- 2
n_sample <- 10000 * 16   #160000 (16 merupakan 2 digit terakhir NIM terkecil anggota kelompok)

# Seed sesuai aturan soal (contoh: tahun berdiri IPB 1963 + nomor kelompok=6)
set.seed(1963 + 6)

# Inverse CDF Rayleigh
Finv_rayleigh <- function(u, sigma) {
  sigma * sqrt(-2 * log(1 - u))
}

# Bangkitkan bilangan acak
u <- runif(n_sample)
rayleigh_samples <- Finv_rayleigh(u, sigma)

# Lihat ringkasan hasil
summary(rayleigh_samples)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
 0.005153  1.523138  2.365088  2.511663  3.334786 10.257489 
# Visualisasi distribusi
hist(rayleigh_samples, breaks = 50, probability = TRUE,
     main = "Histogram Sampel Rayleigh (sigma = 2)",
     xlab = "x", col = "skyblue", border = "white")

# Tambahkan kurva teoretis PDF
curve((x/sigma^2) * exp(-x^2/(2*sigma^2)), from = 0, to = max(rayleigh_samples),
      add = TRUE, col = "red", lwd = 2)

Interpretasi

Distribusi hasil simulasi Rayleigh dengan parameter sigma = 2 menghasilkan histogram yang sesuai dengan bentuk teoritis: naik tajam dari 0, mencapai puncak sekitar x ≈ 2, lalu menurun secara bertahap. Nilai mean (2.51) mendekati nilai teoritis distribusi Rayleigh, yaitu sigma * sqrt(pi/2) ≈ 2.506. Median (2.37) juga konsisten dengan sifat distribusi Rayleigh. Hal ini menunjukkan bahwa metode Inverse Transform Method (ITM) berhasil menghasilkan bilangan acak yang mengikuti distribusi Rayleigh dengan baik.

Pertanyaan Kelima

Bandingkan hasil simulasi dengan bentuk PDF asli.

Penjelasan Singkat:

  1. Hasil simulasi (n = 160000) menunjukkan ringkasan statistik:
  • Min = 0.005, Q1 ≈ 1.523, Median ≈ 2.365, Mean ≈ 2.512, Q3 ≈ 3.335, Max ≈ 10.257.
  1. Nilai mean sampel (2.512) sangat dekat dengan mean teoritis Rayleigh untuk sigma = 2, yaitu sigma * sqrt(pi/2) ≈ 2.506.
  2. Histogram sampel dengan overlay kurva PDF teoretis menunjukkan kesesuaian bentuk: distribusi naik dari 0, puncak sekitar x ≈ 2, lalu ekor menurun mirip kurva teoretis.
  3. Analisis kuantil (QQ-plot) dan ECDF vs CDF teoretis biasanya menunjukkan titik-titik berdekatan dengan garis identitas, menguatkan kecocokan.
  4. Untuk bukti numerik formal, kita dapat melakukan uji Kolmogorov–Smirnov (KS) terhadap CDF teoretis dan menghitung Mean Squared Error (MSE) antara estimasi densitas sampel dan PDF teoretis.
# Asumsikan 'rayleigh_samples' dan 'sigma' sudah ada dari langkah sebelumnya
# Contoh: sigma <- 2; rayleigh_samples <- hasil ITM

# 1) Statistik ringkasan dan perbandingan teoretis
mean_sample <- mean(rayleigh_samples)
sd_sample   <- sd(rayleigh_samples)
mean_theo   <- sigma * sqrt(pi / 2)
var_theo    <- ((4 - pi) / 2) * sigma^2
sd_theo     <- sqrt(var_theo)

cat("Mean sample :", mean_sample, "\n")
Mean sample : 2.511663 
cat("Mean teoritis:", mean_theo, "\n")
Mean teoritis: 2.506628 
cat("SD sample   :", sd_sample, "\n")
SD sample   : 1.310507 
cat("SD teoritis :", sd_theo, "\n\n")
SD teoritis : 1.310273 
# 2) Uji Kolmogorov-Smirnov terhadap CDF teoretis
F_rayleigh <- function(x, sigma) ifelse(x >= 0, 1 - exp(-x^2/(2*sigma^2)), 0)
ks_res <- ks.test(rayleigh_samples, function(z) F_rayleigh(z, sigma))
ks_res

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  rayleigh_samples
D = 0.0038286, p-value = 0.01836
alternative hypothesis: two-sided
# 3) Hitung MSE antara densitas sampel (estimasi kernel) dan PDF teoretis pada grid
grid_x <- seq(0, quantile(rayleigh_samples, 0.999), length.out = 1000)
dens_est <- density(rayleigh_samples, from = min(grid_x), to = max(grid_x), n = 1000)
# density() returns x and y; align grid if necessary
# Interpolate kernel estimate to grid_x
library(stats)
dens_y_on_grid <- approx(dens_est$x, dens_est$y, xout = grid_x)$y
pdf_theo <- (grid_x / sigma^2) * exp(-grid_x^2 / (2 * sigma^2))
mse <- mean((dens_y_on_grid - pdf_theo)^2, na.rm = TRUE)
cat("MSE (density vs pdf) =", mse, "\n\n")
MSE (density vs pdf) = 4.304478e-06 
# 4) Plot perbandingan: histogram + PDF, QQ-plot, ECDF
par(mfrow = c(2,2))
hist(rayleigh_samples, breaks = 60, prob = TRUE, main = "Histogram + PDF teoretis",
     xlab = "x", border = "grey70")
lines(grid_x, pdf_theo, col = "red", lwd = 2)
lines(dens_est, lty = 2) # kernel density

# QQ-plot
p_grid <- ppoints(length(rayleigh_samples))
sample_q <- quantile(rayleigh_samples, probs = p_grid)
theo_q <- sigma * sqrt(-2 * log(1 - p_grid))
plot(theo_q, sample_q, pch = 20, cex = 0.4, main = "QQ-plot")
abline(0,1, col = "red", lwd = 2)

# ECDF vs CDF teoritis
plot.ecdf(rayleigh_samples, main = "ECDF vs CDF teoritis", verticals = TRUE, do.points = FALSE)
curve(F_rayleigh(x, sigma), from = 0, to = max(rayleigh_samples), add = TRUE, col = "red", lwd = 2)

par(mfrow = c(1,1))

Interpretasi

  1. Rata-rata (mean) hasil simulasi = 2.5117, sangat dekat dengan mean teoritis = 2.5066.
  2. Standar deviasi (SD) hasil simulasi = 1.3105, juga hampir identik dengan SD teoritis = 1.3103.
  3. Uji Kolmogorov–Smirnov (KS test) menghasilkan nilai statistik D = 0.0038. p-value = 0.01836, yang cukup kecil sehingga secara formal menolak H₀ (data benar-benar identik dengan distribusi Rayleigh). Namun, karena ukuran sampel sangat besar (160.000), perbedaan kecil pun menjadi signifikan.
  4. MSE (Mean Squared Error) antara density sampel dengan PDF teoritis = 4.3 × 10⁻⁶, yang sangat kecil, menunjukkan bentuk distribusi hasil simulasi hampir sama dengan kurva PDF asli.

Hasil simulasi dengan metode ITM menghasilkan data yang sangat mendekati distribusi Rayleigh(σ = 2), baik dari sisi rata-rata, standar deviasi, maupun bentuk distribusinya. Perbedaan kecil yang terdeteksi oleh KS test lebih disebabkan oleh ukuran sampel yang besar daripada kesalahan metode. Secara praktis, simulasi dan PDF asli dapat dianggap konsisten.

Interpretasi Plot

  1. Histogram + PDF Teoritis
  1. Histogram dari sampel (abu-abu) hampir menutupi kurva PDF teoritis (merah).
  2. Puncak distribusi sekitar x ≈ 2, lalu menurun perlahan, sesuai dengan bentuk PDF Rayleigh.

Kesimpulan: Distribusi simulasi mengikuti bentuk PDF Rayleigh dengan baik.

  1. QQ-Plot (Quantile-Quantile Plot)
  1. Titik-titik kuantil sampel (sumbu y) dibandingkan dengan kuantil teoritis (sumbu x).
  2. Semua titik berada hampir tepat di garis lurus 45° (garis merah).

Kesimpulan: Sebaran kuantil sampel konsisten dengan kuantil distribusi Rayleigh teoritis, tidak ada deviasi besar.

  1. ECDF vs CDF Teoritis
  1. Empirical CDF (garis tangga merah) dibandingkan dengan CDF teoritis (garis hitam).
  2. Keduanya hampir berhimpit, hanya ada deviasi sangat kecil di ekor distribusi.

Kesimpulan: Fungsi distribusi kumulatif dari sampel hampir identik dengan CDF Rayleigh teoritis.

NOMOR 3

Pertanyaan Pertama

Buktikan bahwa itu merupakan PDF!

# Fungsi: f(x) = (1/2π)(1 + cos(x)) untuk -π ≤ x ≤ π, 0 lainnya
# Set seed : 63 (jumlah tanggal lahir anggota selain termuda)
set.seed(63)

# Definisi PDF Cosinus
f_cosine <- function(x) {
  ifelse(x >= -pi & x <= pi, (1/(2*pi)) * (1 + cos(x)), 0)
}

# 1) Cek non-negatif untuk beberapa nilai x
x_vals <- seq(-5, 3.14, by = 1)
pdf_vals <- f_cosine(x_vals)
data.frame(x = x_vals, f_x = pdf_vals)
   x         f_x
1 -5 0.000000000
2 -4 0.000000000
3 -3 0.001592744
4 -2 0.092923117
5 -1 0.245146726
6  0 0.318309886
7  1 0.245146726
8  2 0.092923117
9  3 0.001592744
# 2) Validasi : Cek integral = 1
integral_result <- integrate(f_cosine, lower = -pi, upper = pi)
integral_result
1 with absolute error < 1.1e-14

Interpretasi

  1. Dari hasil tabel terlihat bahwa nilai fungsi f(x) untuk x < -3.14 semuanya bernilai 0, sedangkan untuk x >= -3.14 nilainya positif. Hal ini membuktikan bahwa syarat pertama PDF, yaitu f(x) >= 0, terpenuhi dengan batas Fungsi ini akan bernilai 0 di luar interval [−π,π].

  2. Hasil integrasi di R menunjukkan nilai sebesar 1 (dengan galat absolut sangat kecil, < 1.1e-14). Artinya, integral dari f(x) pada selang −π sampai π sama dengan 1. Dengan demikian, syarat kedua PDF juga terpenuhi.

Dengan demikian, fungsi f(x) = (1/2π)(1 + cos(x)) untuk -π ≤ x ≤ π, 0 lainnya adalah PDF yang valid.

Pertanyaan Kedua

Pilih pendekatan yang tepat (ITM atau AR), dan jelaskan alasan pemilihan metode secara logis dan matematis.

Jawaban:

Distribusi yang diberikan adalah distribusi Cosinus
Untuk membangkitkan bilangan acak dari distribusi ini, terdapat dua metode umum, yaitu:

  1. Inverse Transform Method (ITM)
    1. Prinsip: menggunakan fungsi distribusi kumulatif (CDF) yang dapat diturunkan inverse-nya.
    2. Kelebihan: efisien, tidak ada sampel yang ditolak, dan langsung menghasilkan bilangan acak dari distribusi yang diinginkan.
    3. Cocok jika CDF dapat dituliskan dalam bentuk tertutup (closed form).
  2. Acceptance-Rejection Method (AR)
    1. Prinsip: membangkitkan bilangan acak dari distribusi pembanding (proposal distribution), lalu menerima atau menolak dengan probabilitas tertentu.
    2. Kelebihan: fleksibel untuk distribusi yang CDF atau inverse CDF-nya sulit didapatkan, lebih cocok untuk sampel berukuran besar.
    3. Kekurangan: kurang efisien karena ada sampel yang ditolak.

Interpretasi

Pada kasus distribusi Cosinus ini, hasil dari CDF nya yaitu F(x)= (x + π + sinx)/2*π dengan inversnya yaitU didefinisikan 2πu=x+π+sinx (Bentuk ini tidak punya solusi analitik eksplisit, tidak bisa diselesaikan dengan aljabar biasa karena x muncul sekaligus linear dan dalam sinus). Oleh karena itu, metode yang paling tepat digunakan adalah metode Acceptance-Rejection (AR), karena lebih cocok dan efisien untuk sampel yang berukuran besar.

Pertanyaan Ketiga

Karena kita memilih metode AR, maka selanjutnya kita akan menentukan proposal distubution dan penentuan konstanta c, serta membuktikan dengan fungsi optimize().

# UNIFORM DISTRIBUTION
f <- function(x) (1/(2*pi)) * (1 + cos(x))
cat("1. UNIFORM PROPOSAL U(-π, π)\n")
1. UNIFORM PROPOSAL U(-π, π)
g1 <- function(x) ifelse(abs(x) <= pi, 1/(2*pi), 0)
cat("   g₁(x) = 1/(2π) untuk -π ≤ x ≤ π\n")
   g₁(x) = 1/(2π) untuk -π ≤ x ≤ π

Menentukan C secara analitik dengan f(x)<= C g(x)

Mencari C dimana h(x) = f(x) / g(x)

h(x)= [1/(2π) * (1 + cos(x)] / 1/(2π)

h(x)=1 + cos(x)

(dh/dx) = 0 dimana (dh/dx) = - sin x

maka -sin x= 0 sehingga x=0

h(0) = 1 + cos(0) = 2

sehingga nilai C=2 pada x=0

# Verifikasi dengan optimize()
C<-2
ratio1 <- function(x) f(x) / g1(x)
C1_numeric <- optimize(ratio1, c(-pi, pi), maximum=TRUE)
cat("   C₁ (numerik) =", C1_numeric$maximum, "di x =", C1_numeric$objective, "\n")
   C₁ (numerik) = -2.220446e-16 di x = 2 
cat("   Acceptance rate teoritis = 1/C₁ =", 1/C, "\n\n")
   Acceptance rate teoritis = 1/C₁ = 0.5 
  1. Pilihan proposal
    Proposal yang dipilih adalah distribusi seragam g(x)=Uniform(−π,π). Alasan pemilihan: proposal ini memiliki dukungan yang sama dengan fungsi target f(x), mudah disampling, dan menghasilkan rasio f/g berbentuk sederhana 1+cos⁡x sehingga konstanta C dapat ditentukan secara analitik.

  2. Penentuan konstanta C (analitik)

    Rasio antara target dan proposal adalah f(x)/g(x) = 1+ cos x

    Karena max⁡ cos x = 1 (pada x = 0), diperoleh C = 2.

    Dengan demikian acceptance rate teoritis adalah 1/C = 0.5 (50%).

  3. Verifikasi

    Fungsi optimize() pada interval [−π,π] menemukan titik maksimum pada x ≈ 0 dan nilai maksimum ≈2, konsisten dengan derivasi analitik C = 2.

Interpretasi

Dari ketidaksamaan f(x) ≤ C1⋅g1(x) diperoleh bahwa konstanta pembatas C1 sama dengan max⁡(1+cos⁡x)=2, yang terjadi pada x=0. Hasil ini dikonfirmasi secara numerik melalui fungsi optimize(), yang juga menunjukkan nilai maksimum mendekati 2. Dengan demikian, acceptance rate teoritis metode Acceptance-Rejection adalah 1/C1 = 0,5, artinya sekitar 50% kandidat sampel dari proposal akan diterima.

Pertanyaan Keempat

Bangkitkan bilangan acak sebanyak 10000 X tanggal lahir anggota termuda dari kelompok Anda.

## --- Acceptance-Rejection Sampling untuk f(x) = (1/2π)(1 + cos(x)) ---

set.seed(63)   # jumlah tanggal lahir anggota kcuali termuda
n <- 10000
m <- 24       # tanggal lahir anggota termuda
N <- n * m

# Definisi target PDF
f_cosine <- function(x) {
  ifelse(x >= -pi & x <= pi, (1/(2*pi)) * (1 + cos(x)), 0)
}

# Proposal: Uniform(-pi, pi)
g_uniform <- function(x) {
  ifelse(x >= -pi & x <= pi, 1/(2*pi), 0)
}

# Konstanta C (analitik)
C <- 2   # max(1 + cos(x)) = 2 di x = 0

# Pastikan cos() belum ketimpa
if (!is.function(cos)) rm(cos)

# Acceptance-Rejection sampling
samples <- numeric(0)
while (length(samples) < N) {
  x_prop <- runif(N, min = -pi, max = pi)   # proposal dari Uniform
  u <- runif(N)                             # uniform(0,1)
  accept_prob <- (1 + cos(x_prop)) / C      # rasio f/g
  keep <- x_prop[u <= accept_prob]
  samples <- c(samples, keep)
}
samples <- samples[1:N]

# Bentuk matriks 10000 x 24
mat_samples <- matrix(samples, nrow = n, ncol = m)


# Ringkasan beberapa kolom
col_means <- colMeans(mat_samples)
col_sds   <- apply(mat_samples, 2, sd)

cat("Rata-rata 5 kolom pertama:\n")
Rata-rata 5 kolom pertama:
print(round(col_means[1:5], 4))
[1] -0.0068 -0.0078 -0.0042  0.0053  0.0060
cat("\nSimpangan baku 5 kolom pertama:\n")

Simpangan baku 5 kolom pertama:
print(round(col_sds[1:5], 4))
[1] 1.1366 1.1331 1.1333 1.1343 1.1276
# Visualisasi
hist(samples, breaks = 50, probability = TRUE,
     main = "Histogram Sampel AR dari f(x)",
     xlab = "x", col = "skyblue", border = "white")
curve(f_cosine(x), from = -pi, to = pi, col = "red", lwd = 2, add = TRUE)

Interpretasi

Distribusi hasil simulasi dengan metode Acceptance–Rejection (AR) menggunakan proposal Uniform(-π, π) dan konstanta C = 2 menghasilkan histogram yang mengikuti bentuk fungsi teoritis. Pola histogram memperlihatkan nilai densitas maksimum di sekitar x = 0, sesuai dengan sifat cos⁡(x) yang mencapai puncaknya pada titik tersebut. Sementara itu, frekuensi menurun ketika mendekati batas interval [−π,π], yang konsisten dengan sifat teoritis distribusi.

Rata-rata kolom hasil simulasi berada di sekitar nol, sesuai dengan ekspektasi distribusi yang simetris di sekitar titik pusat. Simpangan baku yang diperoleh juga konsisten dengan keragaman data sesuai bentuk distribusi kosinus. Hal ini menunjukkan bahwa metode AR dengan proposal uniform dan konstanta C = 2 berhasil membangkitkan bilangan acak yang mengikuti distribusi target dengan baik.

Pertanyaan Kelima

Bandingkan hasil simulasi dengan bentuk PDF asli.

Pada kasus ini mempunyai sampel hasil simulasi AR dimana bentuk distribusinya belum tentu bisa langsung dibandingkan dengan fungsi PDF teoretis, karena sampel berupa titik-titik diskret. Jadi supaya bisa dibandingkan dengan fungsi densitas kontinu (PDF), kita perhalus distribusi sampel dengan estimasi kernel density (KDE). Dan didapatkan nilai Mean Squared Error (MSE) kecil yang berarti distribusi simulasi hampir identik dengan distribusi target.

# Atur set.seed dari jumlah tanggal lahir anggota kelompok kecuali termuda

set.seed(63)
n <- 10000
m <- 24
N <- n * m
C_val <- 2

# Fungsi target
f_cos <- function(x) (1 + cos(x)) / (2*pi)

# AR Sampling
samples <- numeric(0)
while(length(samples) < N) {
  x_prop <- runif(N, -pi, pi)
  u <- runif(N)
  accept_prob <- (1 + cos(x_prop)) / C_val
  keep <- x_prop[u <= accept_prob]
  samples <- c(samples, keep)
}
samples <- samples[1:N]

# Ringkasan statistik
mean_emp <- mean(samples)
sd_emp   <- sd(samples)
mean_theo <- 0
sd_theo   <- sqrt((pi^2)/3 - 2)

cat("Mean empiris :", round(mean_emp,4), " | Mean teoretis:", mean_theo, "\n")
Mean empiris : -0.0021  | Mean teoretis: 0 
cat("SD empiris   :", round(sd_emp,4),   " | SD teoretis :", round(sd_theo,4), "\n")
SD empiris   : 1.1339  | SD teoretis : 1.1357 
# MSE antara kernel density vs PDF teoretis
grid_x <- seq(-pi, pi, length.out = 1000)
dens_est <- density(samples, from = -pi, to = pi, n = 1000)
dens_y <- approx(dens_est$x, dens_est$y, xout = grid_x)$y
pdf_theo <- f_cos(grid_x)
mse <- mean((dens_y - pdf_theo)^2)
cat("MSE (kernel vs PDF) =", signif(mse,6), "\n")
MSE (kernel vs PDF) = 3.34475e-06 
# Plot
# Histogram + PDF teoritis + KDE
hist(samples, breaks = 60, prob = TRUE, col = "skyblue", border = "white",
     main = "Histogram AR vs PDF Teoritis", xlab = "x")

# PDF teoretis
curve(f_cos, from = -pi/2, to = pi/2, add = TRUE, col = "red", lwd = 2)

# Kernel density
lines(dens_est, col = "darkgreen", lty = 2, lwd = 2)

# Legend lengkap
legend("topright",
       legend = c("PDF teoritis", "Kernel density", "Histogram"),
       col    = c("red", "darkgreen", "skyblue"),
       lty    = c(1, 2, NA),       # NA untuk histogram (kotak isi)
       lwd    = c(2, 2, NA),
       pch    = c(NA, NA, 15),     # kotak untuk histogram
       pt.cex = 2,
       bty    = "n")

Interpretasi

Histogram hasil simulasi metode Acceptance-Rejection (AR) memperlihatkan bahwa distribusi sampel mengikuti bentuk teoritis distribusi cosinus: frekuensi tertinggi berada di sekitar x = 0, lalu menurun secara simetris ke arah −π dan π. Ketika ditumpangkan dengan kurva PDF teoretis (garis merah), histogram menunjukkan kecocokan bentuk yang baik. Selain itu, kernel density (garis hijau putus-putus) hampir berhimpitan dengan PDF teoretis, sehingga memperkuat kesesuaian distribusi empiris dengan distribusi target.

Secara kuantitatif, hasil simulasi memberikan:

  • Mean empiris = -0.0021, sangat dekat dengan mean teoritis = 0.

  • Simpangan baku empiris = 1.1339, konsisten dengan simpangan baku teoritis = 1.1357.

  • MSE (kernel vs PDF) = 3.34 × 10⁻⁶, nilai yang sangat kecil dan menunjukkan bahwa perbedaan antara distribusi empiris dan teoretis hampir tidak ada.

Hasil ini menunjukkan bahwa metode AR berhasil membangkitkan bilangan acak sesuai distribusi cosinus dengan sangat baik. Baik secara visual (histogram + kurva teoretis) maupun secara kuantitatif (mean, standar deviasi, dan MSE kecil), simulasi ini membuktikan keakuratan pendekatan AR dalam merepresentasikan distribusi target.

NOMOR 4