Materi ini akan membahas pengenalan materi Metode Simulasi dan
Resampling sesi UTS selama 7 pertemuan kedepan, yaitu
Simulasi adalah cara untuk memodelkan peristiwa acak, sehingga hasil yang disimulasikan sangat mirip dengan hasil di dunia nyata. Berikut langkah-langkah dalam melakukan simulasi statistika:
Lakukan percobaan melempar koin dengan R, isi table berikut
Buat histogram pada pelemparan 100x dan 500x
Dalam simulasi ini, koin diasumsikan ideal dengan dua kemungkinan hasil, yaitu Heads (1) dan Tails (0), masing-masing memiliki peluang teoretis sebesar 50%. Menggunakan simulasi berbasis komputer seperti R, lemparan koin dapat direplikasi sebanyak 100 atau 500 kali untuk mengamati distribusi hasil.
set.seed(123)
# Simulasi Koin
frekuensi_100 <- sample(0:1, 100, replace = TRUE)
frekuensi_500 <- sample(0:1, 500, replace = TRUE)
# Menghitung frekuensi untuk 100x dan 500x
frekuensi_100_table <- table(frekuensi_100) / length(frekuensi_100)
frekuensi_500_table <- table(frekuensi_500) / length(frekuensi_500)
# Membuat tabel hasil
tabel_hasil <- data.frame(
"Frekuensi" = c("Heads", "Tails"),
"Lempar Koin 100x" = c(frekuensi_100_table["1"], frekuensi_100_table["0"]),
"Lempar Koin 500x" = c(frekuensi_500_table["1"], frekuensi_500_table["0"])
)
# Menampilkan tabel
print(tabel_hasil)
## Frekuensi Lempar.Koin.100x Lempar.Koin.500x
## 1 Heads 0.43 0.506
## 0 Tails 0.57 0.494
# Membuat histogram untuk 100x lemparan
library(ggplot2)
library(gridExtra)
# Data frame untuk 100x
data_100 <- data.frame(Hasil = frekuensi_100)
# Histogram 100x
plot_100 <- ggplot(data_100, aes(x = factor(Hasil, labels = c("Tails", "Heads")))) +
geom_bar(fill = "skyblue", color = "black") +
labs(title = "Histogram Lemparan Koin (100x)",
x = "Hasil Lemparan",
y = "Frekuensi") +
theme_minimal()
# Membuat histogram untuk 500x lemparan
# Data frame untuk 500x
data_500 <- data.frame(Hasil = frekuensi_500)
# Histogram 500x
plot_500 <- ggplot(data_500, aes(x = factor(Hasil, labels = c("Tails", "Heads")))) +
geom_bar(fill = "salmon", color = "black") +
labs(title = "Histogram Lemparan Koin (500x)",
x = "Hasil Lemparan",
y = "Frekuensi") +
theme_minimal()
# Menampilkan kedua histogram berdampingan
grid.arrange(plot_100, plot_500, ncol = 2)
Pada sampel kecil (100x), hasil dapat terlihat lebih bervariasi karena pengaruh peluang acak lebih besar.
Pada sampel besar (500x), distribusi lebih stabil dan seimbang, menunjukkan bahwa peluang lemparan koin ideal cenderung 50% untuk Heads dan 50% untuk Tails.
Sepasang suami istri berencana untuk memiliki anak sampai mereka mempunyai anak perempuan atau sampai mereka mempunyai empat anak, mana saja yang lebih dulu. Seberapa besar kemungkinan mereka akan mempunyai anak perempuan di antara anak-anak mereka?
Simulasi ini memodelkan situasi di mana sepasang suami istri berencana memiliki anak hingga mendapatkan anak perempuan (1) atau maksimal empat anak dengan kombinasi anak laki-laki (0) dan perempuan (1). Setiap kelahiran memiliki peluang 50% untuk anak laki-laki atau perempuan. Dengan menggunakan simulasi berbasis R, kita dapat menghitung probabilitas pasangan berhasil memiliki setidaknya satu anak perempuan.
set.seed(123)
# Fungsi simulasi untuk satu pasangan
simulasi_anak <- function() {
anak <- c() # Vektor untuk menyimpan jenis kelamin anak
while (length(anak) < 4) { # Maksimal 4 anak
# Menambahkan anak baru (1 = perempuan, 0 = laki-laki)
anak <- c(anak, sample(0:1, size = 1, replace = TRUE))
# Berhenti jika ada anak perempuan
if (1 %in% anak) break
}
return(1 %in% anak) # Mengembalikan TRUE jika ada anak perempuan
}
# Simulasi untuk banyak pasangan
n_ulangan <- 30 # Jumlah ulangan
hasil <- replicate(n_ulangan, simulasi_anak())
# Menghitung probabilitas
probabilitas <- mean(hasil)
# Menampilkan hasil
cat("Probabilitas memiliki anak perempuan:", probabilitas, "\n")
## Probabilitas memiliki anak perempuan: 0.8333333
Use R to simulate an experiment of rolling a dice 200 times.
Find the relative frequency of the numbers 1 to 6 in your experiment and fill in the table on the next page.
Repeat 2 for rolling a dice 1000 times (do not print histogram)
# Agar hasil random yang dihasilkan sama
set.seed(123)
# Simulasi pelemparan dadu sebanyak 200 kali
d2 = sample(1:6, 200, replace = TRUE)
d2
## [1] 3 6 3 2 2 6 3 5 4 6 6 1 2 3 5 3 3 1 4 1 1 5 3 2 2 1 6 3 4 6 1 3 5 4 2 5 1
## [38] 1 2 3 4 5 5 3 6 1 2 5 5 4 5 2 1 1 3 1 6 5 1 2 4 4 6 6 3 6 6 1 6 2 1 2 4 5
## [75] 5 6 3 1 4 6 1 6 1 3 6 4 1 6 6 3 6 5 3 6 2 5 5 3 2 2 2 4 2 2 6 4 4 6 1 6 6
## [112] 6 3 6 3 6 1 3 5 2 6 6 3 2 5 6 5 3 4 4 6 4 5 3 1 6 2 1 2 5 3 4 4 1 6 6 4 1
## [149] 6 3 4 3 5 4 4 4 6 1 2 3 4 3 1 6 5 5 2 3 5 6 6 1 4 2 4 5 5 6 5 5 1 2 1 2 5
## [186] 5 1 2 5 4 2 6 2 3 1 1 5 5 3 2
Kita sudah memiliki data pelemparan dadu sebanyak 200 kali. Selanjutnya, kita akan menghitung frekuensi munculnya angka 1 sampai 6, proporsi munculnya angka 1 sampai 6, dan membuat histogram.
# Menghitung frekuensi munculnya angka 1 sampai 6
table(d2)
## d2
## 1 2 3 4 5 6
## 33 31 32 28 34 42
# Menghitung proporsi munculnya angka 1 sampai 6
prop.table(table(d2))
## d2
## 1 2 3 4 5 6
## 0.165 0.155 0.160 0.140 0.170 0.210
# Membuat barplot
barplot(table(d2), main = "Barplot Pelemparan Dadu 200 Kali", xlab = "Angka Dadu", ylab = "Frekuensi", col = "lightblue")
# Agar hasil random yang dihasilkan sama
set.seed(123)
# Simulasi pelemparan dadu sebanyak 1000 kali
d3 = sample(1:6, 1000, replace = TRUE)
d3
## [1] 3 6 3 2 2 6 3 5 4 6 6 1 2 3 5 3 3 1 4 1 1 5 3 2 2 1 6 3 4 6 1 3 5 4 2 5 1
## [38] 1 2 3 4 5 5 3 6 1 2 5 5 4 5 2 1 1 3 1 6 5 1 2 4 4 6 6 3 6 6 1 6 2 1 2 4 5
## [75] 5 6 3 1 4 6 1 6 1 3 6 4 1 6 6 3 6 5 3 6 2 5 5 3 2 2 2 4 2 2 6 4 4 6 1 6 6
## [112] 6 3 6 3 6 1 3 5 2 6 6 3 2 5 6 5 3 4 4 6 4 5 3 1 6 2 1 2 5 3 4 4 1 6 6 4 1
## [149] 6 3 4 3 5 4 4 4 6 1 2 3 4 3 1 6 5 5 2 3 5 6 6 1 4 2 4 5 5 6 5 5 1 2 1 2 5
## [186] 5 1 2 5 4 2 6 2 3 1 1 5 5 3 2 5 6 5 3 3 1 4 2 1 2 4 5 1 1 1 5 6 6 6 3 1 2
## [223] 2 1 2 1 5 2 3 5 4 5 2 1 4 6 2 6 5 1 5 1 4 3 1 6 1 2 4 2 1 5 5 1 1 5 5 2 2
## [260] 6 5 1 1 5 5 4 5 5 4 2 5 1 1 2 1 2 5 1 3 2 2 5 4 1 5 2 5 6 2 2 6 4 3 4 3 3
## [297] 3 5 3 2 3 1 5 6 6 1 4 2 6 2 4 1 4 5 5 3 5 5 3 1 3 4 2 5 1 4 6 3 6 1 2 6 3
## [334] 3 1 2 1 6 2 2 2 5 4 6 4 5 4 6 1 2 1 2 3 2 3 1 4 2 3 5 5 6 3 6 6 2 5 4 2 1
## [371] 4 1 4 5 4 2 2 4 3 5 6 2 3 3 3 6 1 1 3 4 4 5 2 2 4 2 1 4 3 1 5 3 4 2 5 5 2
## [408] 6 2 2 1 3 6 4 3 3 3 6 4 4 3 6 6 4 2 3 6 4 2 1 6 3 4 1 1 4 4 6 5 1 4 5 6 6
## [445] 3 2 5 4 4 6 1 3 3 3 6 5 2 5 2 1 6 6 4 6 6 6 2 2 3 5 1 3 3 2 5 1 6 4 6 4 1
## [482] 3 4 4 1 5 3 4 2 6 6 3 2 3 3 1 5 6 4 4 5 3 2 4 6 5 2 3 3 6 1 6 3 2 3 3 1 6
## [519] 2 2 2 4 6 1 5 5 3 6 3 6 5 1 4 2 5 6 4 6 5 1 2 3 1 1 3 2 4 5 3 4 5 3 1 6 5
## [556] 2 4 2 1 5 6 2 5 6 1 1 6 2 6 4 2 1 1 1 4 1 3 2 1 1 5 5 4 6 4 4 5 4 1 3 5 4
## [593] 2 6 1 4 1 3 1 3 3 2 3 6 4 2 1 5 3 4 5 6 5 6 4 6 1 1 4 6 3 5 2 1 4 4 6 4 3
## [630] 2 2 3 5 6 4 3 3 1 5 5 1 1 1 5 5 4 2 6 2 4 2 6 1 3 5 3 1 2 4 4 1 5 1 4 3 4
## [667] 5 5 6 4 3 3 2 5 5 1 3 2 3 4 2 5 3 3 2 2 4 2 6 1 4 1 5 2 5 2 2 3 2 6 6 3 3
## [704] 1 1 6 5 1 5 1 2 1 3 3 4 2 4 3 6 1 3 4 2 6 5 2 1 2 3 3 2 2 4 5 2 3 6 1 6 5
## [741] 6 3 2 1 4 4 3 1 6 6 2 3 1 1 2 2 4 3 2 2 5 1 3 2 2 4 4 4 5 5 4 4 2 5 2 2 4
## [778] 6 5 3 3 6 2 2 1 3 5 6 3 5 1 2 4 3 5 6 5 5 4 3 3 2 2 2 2 2 3 6 1 1 6 1 1 3
## [815] 1 2 3 4 4 3 4 2 6 6 3 4 3 6 4 5 1 5 4 5 1 1 6 1 2 2 4 1 6 2 1 3 3 6 1 4 3
## [852] 6 5 2 6 4 2 6 2 1 1 3 5 5 1 4 2 3 3 6 2 5 4 1 4 3 5 5 4 6 5 1 5 4 5 5 5 3
## [889] 4 5 5 4 4 6 6 3 6 3 4 1 6 4 2 6 2 4 1 1 6 2 4 5 3 1 3 3 2 4 1 3 5 5 5 6 2
## [926] 5 5 1 5 1 2 1 1 2 4 6 5 2 2 2 6 6 4 5 2 3 6 1 6 4 3 6 3 3 6 2 4 4 2 3 1 4
## [963] 1 1 4 3 5 2 5 6 6 2 4 2 2 4 4 1 3 1 3 3 6 3 6 5 2 6 1 5 3 3 6 3 3 6 1 3 3
## [1000] 6
# Menghitung frekuensi munculnya angka 1 sampai 6
table(d3)
## d3
## 1 2 3 4 5 6
## 170 176 171 157 162 164
# Menghitung proporsi munculnya angka 1 sampai 6
prop.table(table(d3))
## d3
## 1 2 3 4 5 6
## 0.170 0.176 0.171 0.157 0.162 0.164
# Fungsi untuk simulasi pelemparan dadu
SimulasiDadu = function(n, plot = FALSE) {
set.seed(123) # Untuk hasil yang sama setiap kali dijalankan
hasil = sample(1:6, n, replace = TRUE) # Simulasi pelemparan dadu
# Menghitung frekuensi dan proporsi
frekuensi = table(hasil)
proporsi = prop.table(frekuensi)
# Menampilkan hasil
cat("Frekuensi munculnya angka dadu (1-6):\n")
print(frekuensi)
cat("\nProporsi munculnya angka dadu (1-6):\n")
print(proporsi)
# Membuat plot jika diinginkan
if (plot) {
barplot(frekuensi,
main = paste("Barplot Pelemparan Dadu", n, "Kali"),
xlab = "Angka Dadu",
ylab = "Frekuensi",
col = "lightblue")
}
}
# Simulasi 200 kali
SimulasiDadu(200, plot = FALSE) # Jika ingin menampilkan plot, tinggal ganti jadi TRUE saja
## Frekuensi munculnya angka dadu (1-6):
## hasil
## 1 2 3 4 5 6
## 33 31 32 28 34 42
##
## Proporsi munculnya angka dadu (1-6):
## hasil
## 1 2 3 4 5 6
## 0.165 0.155 0.160 0.140 0.170 0.210
# Simulasi 1000 kali tanpa barplot
SimulasiDadu(1000, plot = FALSE)
## Frekuensi munculnya angka dadu (1-6):
## hasil
## 1 2 3 4 5 6
## 170 176 171 157 162 164
##
## Proporsi munculnya angka dadu (1-6):
## hasil
## 1 2 3 4 5 6
## 0.170 0.176 0.171 0.157 0.162 0.164
Dalam sebuah kelompok berisi 10 orang, terdapat 4 orang yang mahir dan 6 orang pemula. Sebuah tim dengan 5 anggota akan dipilih secara acak.
# Fungsi untuk simulasi pemilihan tim
SimulasiTim = function() {
kelompok = c(rep("Mahir", 4), rep("Pemula", 6)) # Mahir = 4, Pemula = 6
tim = sample(kelompok, 5, replace = FALSE)
return(sum(tim == "Mahir")) # Jumlah anggota mahir dalam tim
}
# Jalankan simulasi 1000 kali
set.seed(123)
hasil = replicate(1000, SimulasiTim())
rata_rata_mahir = mean(hasil)
cat("Rata-rata jumlah anggota mahir dalam tim:", rata_rata_mahir, "\n")
## Rata-rata jumlah anggota mahir dalam tim: 2.009
# Membuat Barplot
barplot(table(hasil), main = "Histogram Jumlah Anggota Mahir dalam Tim", xlab = "Jumlah Anggota Mahir", ylab = "Frekuensi", col = "lightblue")
Dalam sebuah lotere, terdapat 100 tiket dengan nomor dari 1 hingga 100. Dari total tiket, hanya 10 tiket yang merupakan tiket pemenang.
# Fungsi untuk simulasi lotere
SimulasiLotere = function() {
tiket = c(rep("Pemenang", 10), rep("Biasa", 90)) # 10 tiket pemenang, 90 tiket biasa
pilihan = sample(tiket, 3, replace = FALSE)
return(any(pilihan == "Pemenang")) # Apakah ada tiket pemenang
}
# Jalankan simulasi 1000 kali
set.seed(123)
hasil = replicate(1000, SimulasiLotere())
peluang_menang = mean(hasil)
cat("Peluang mendapatkan setidaknya 1 tiket pemenang:", peluang_menang, "\n")
## Peluang mendapatkan setidaknya 1 tiket pemenang: 0.261
Sebuah permainan domino menggunakan kartu bernomor 1 hingga 12. Saat kartu pertama diambil, kartu kedua runtuh jika nomor kartu pertama adalah kelipatan dari nomor kartu kedua.
# Fungsi untuk simulasi runtuhnya kartu domino
SimulasiDomino = function() {
kartu = sample(1:12, 2, replace = FALSE)
if (kartu[1] %% kartu[2] == 0) {
return(1) # Kartu kedua runtuh
} else {
return(0) # Kartu kedua tidak runtuh
}
}
# Jalankan simulasi 500 kali
set.seed(123)
hasil = replicate(500, SimulasiDomino())
peluang_runtuh = mean(hasil)
cat("Jumlah runtuhnya kartu kedua:", sum(hasil), "\n")
## Jumlah runtuhnya kartu kedua: 83
cat("Peluang kartu kedua runtuh:", peluang_runtuh, "\n")
## Peluang kartu kedua runtuh: 0.166