Fikri Dwi Alpian - 120450022 - RB
- Simulasikan peubah acak diskrit x berikut, dengan distribusinya
sesuai dengan tabel berikut dengan metode Inverse-Transform method
dengan n=1000
discrete_inverse_sampling <- function( prob ) {
U = runif(1)
if(U <= prob[1]){
return(1)
}
for(state in 2:length(prob)) {
if(sum(prob[1:(state-1)]) < U && U <= sum(prob[1:state]) ) {
return(state)
}
}
}
num_samples = 1000
prob = c(0.4, 0.2, 0.1, 0.1, 0.2)
names(prob) = c("0","2","3","7","10")
samples = runif(num_samples)
for(i in seq_len(num_samples) ) {
samples[i] = discrete_inverse_sampling(prob)
}
sim_prob = table(samples) / sum(table(samples))
names(sim_prob) = c("0","2","3","7","10")
barplot(prob, main='Fungsi Massa Probabilitas Sejati')

barplot(sim_prob, main='Fungsi Massa Peluang Empiris')

- Bangkitkan bilangan acak dengan dengan. Gunakan metode
Inverse-Transform method dengan n=1000
x = runif(1000) #jumlah amatan random
fx = (exp(4))^-(4*x) #fungsi x
# plot
hist(fx, freq=F, xlab='X', main='Variabel Acak Eksponensial')
curve(dexp(x, rate=8) , 0, 1, lwd=2, xlab = "", ylab = "", add = T) #membuat plot

- Bangkitkan bilangan acak dengan metode Acceptance – rejection dengan
fungsi PDF nya
curve((3/2) * x^3 + (11/8) * x^2 + (1/6) * x + (1/12), 0, 1)#membuat plot

#menjalankan fungsi ARM, membangkitkan bilangan acak
n = 1000 #jumlah amatan random
j = k = 0
y = numeric(n)
while (k < n) {
u = runif(1)
j = j + 1
x = runif(1)
if (u < (((3/2) * (x^3)) + ((11/8) * (x^2)) + ((1/6) * x) + (1/12))/3.5 * (dunif(x, 0, 1))) {
k = k + 1
y[k] = x
}
}
hist(y, prob = T)
sbx <- seq(0, 1, 0.01)
lines(sbx, ((3/2) * (sbx^3)) + ((11/8) * (sbx^2)) + ((1/6) * sbx) + (1/12))
