10 Jawaban 3
Untuk menjawab soal Latihan 4, kita akan terapkan algoritme dari Acceptance-Rejection Method sebagai berikut:
- Tetapkan peubah acak dari Y sebagai target sebaran beserta PDFnya g(y)
Dalam Kasus ini kita pilih Y∼exponential(32) karena memiliki domain yang sama dengan peubah acak X yaitu 0<x<∞ dan karena distribusi exponensial merupakan kasus khusus dari distribus gamma. Pdf dari Y adalah
g(y)=132e−y32,0≤y≤∞
atau
g(y)=23e−23y,0≤y≤∞ 2. Bangkitkan peubah acak Y tersebut.
Note : Distribusi exponential(θ) di R memiliki pdf
f(x)=θe−θy,0≤y≤∞
sedangkan yang kita gunakan exponential(θ) memiliki pdf
f(x)=1θe−yθ,0≤y≤∞
sehingga exponential(32) yang dimaksud sama dengan exponential(23) di R.
- Bangkitkan u berdasarkan distribusi Uniform(0,1) atau u U(0,1)
- Hitung nilai c dengan mencari nilai maksimum dari f(y)g(y)
Untuk menghitung manual nilai c kita lewati agar bisa dikerjakan secara mandiri. Kita langsung saja menggunakan fungsi optim
di R. Fungsi optimize
tidak bisa digunakan disini karena domain dari pdf f(y) dan g(y) terdapat unsur ketakhinggaan (∞).
fungsi h(x) yang diperoleh adalah
h(x)=32Γ(32)y12e−y3
h <- function(y) (-1) * (3/(2*gamma(3/2))) * (y)^(1/2) * exp(-y/3)
derivH <- optim(par = 0,fn=h,lower = 0,method = "L-BFGS-B")
derivH$value
## [1] -1.257317
Beberapa catatan yang perlu diperhatikan untuk menggunakan fungsi optim
adalah secara default fungsi ini hanya bisa mencari nilai minimum dari suatu fungsi. Oleh karena itu, fungsi h perlu dikalikan dengan −1. Argumen par
digunakan untuk menentukan nilai awal.
- Jika u≤f(y)cg(y), jadikan Y sebagai X.
f <- function(y) (3/(2*gamma(3/2))) * (y)^(1/2) * exp(-y)
g <- function(y) (2/3) * exp(-(2/3) * y)
nilaic <- -derivH$value #jangan lupa tambahkan negatif
#kriteria penerimaan
criteria <- u < f(y)/(nilaic*g(y))
head(criteria)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE
## [1] 0.02243461 1.38033181 1.12823841 2.36256278 0.34748792 1.63000950
## [1] 1393
- Menamplikan histogram di R
z <- rgamma(n,shape = 3/2,scale = 1)
par(mfrow=c(1,2))
hist(x,main="gamma(3/2,1) dari AR")
hist(z,main="beta(3/2,1) dari rgamma")