Soal 1

Sebuah kelompok berisi 10 orang, terdapat 4 orang yang mahir dan 6 orang pemula. Kemudian akan dibentuk 5 anggota dengan dipilih secara acak.

  1. Buat simulasi pemilihan tim sebanyak 1000 kali.

  2. Hitung rata-rata jumlah anggota mahir dalam tim berdasarkan simulasi tersebut.

  3. Gambarkan barchart hasil simulasi.

Simulasi pemilihan tim

Membuat Fungsi SimulasiTim yang mendefinisikan aturan dari satu kejadian pengambilan tim.

# 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 Fungsi

  • SimulasiTim = function() {...} membuat fungsi bernama SimulasiTim dengan semua kode di dalam kurung kurawal {...} merupakan tahapan yang akan dilakukan setiap kali fungsi ini dipanggil.

  • kelompok = c(rep("Mahir", 4), rep("Pemula, 6)) membuar populasi data dengan fungsi rep("Mahir, 4) yang mengulang kata “Mahir” sebanyak 4x dan rep("Pemula", 6) sebanyak 6x.

  • tim = sample(kelompok, 5, replace = FALSE) melakukan proses sampling, sample adalah fungsi yang mengambil 5 elemen secara acak dari vektor kelompok. Argumen replace = FALSE melakukan pengambilan tanpa pengembalian.

  • return(sum9tim == "Mahir")) memeriksa hasil dan menampilkan nilai output fungsi

    • tim == Mahir" menghasilkan TRUE jika anggota tersebut “Mahir” dan FALSE jika “Pemula”

    • sum(...) menjumlahkan nilai TRUE (bernilai 1) dan FALSE (bernilai 0)

Eksekusi Simulasi

  • set.seed(123) hasil simulasi dikunci sehingga konsisten dan dapat diproduksi ulang (reproducible).

  • hasil = replicate(1000, SimulasiTim()) melakukan pengulangan atau replikasi dengan fungsi replicate menjalankan SimulasiTim sebanyak 1000x. Hasil dari tiap percobaan dengan jumlah orang “Mahir” di setiap tim disimpan di dalam vektor hasil.

  • rata_rata_mahir = mean(hasil) menghitung rata-rata dari 1000 hasil simulasi, ini merupakan hasil dari estimasi nilai harapan.

  • cat("Rata-rata jumlah anggota mahir di dalam tim:", rata_rata_mahir, "\n" mencetak teks dan menampilkan hasil dari perhitungan rata_rata_mahir.

# Membuat Barplot
barplot(table(hasil), main = "Histogram Jumlah Anggota Mahir dalam Tim", xlab = "Jumlah Anggota Mahir", ylab = "Frekuensi", col = "lightblue")

  • barplot(...) merupakan fungsi utama untuk membuat bar chart.

  • table(hasi) menghitung frekuensi kemunculan tiap angka. Fungsi barplot membutuhkan data yang sudah diringkas, sehingga hasil hitungan berapa kali muncul angka 2, 3, dst yang akan dijadikan tinggi batang.

  • main = "Histogram Jumlah Anggota Mahir dalam Tim" menampilkan judul utama ppada baian atas grafik.

  • xlab = "Jumlah Anggota Mahir" memberikan label pada sumbu x yang menjelaskan kategori data orang mahir.

  • ylab = "Frekuensi" memberikan label pada sumbu y yang menunjukkan berapa kali kejadian tersebut muncul dari total 1000 percobaan.

  • col = "lightblue" memberikan warna lightblue pada batang grafik.

Barplot yang dihasilkan akan merepresentasikan hasil dari proses pengambilan sampel acak.

Soal 2

Dalam sebuah lotere, terdapat 100 tiket dengan nomor dari 1 hingga 100. Dari total tiket, hanya 10 tiket yang merupakan tiket pemenang.

  1. Simulasikan pengambilan tiket secara acak sebanyak 3 kali tanpa pengembalian.

  2. Tentukan apakah salah satu tiket yang diambil adalah tiket pemenang.

  3. Ulangi simulasi sebanyak 1000 kali, hitung peluang mendapatkan setidaknya 1 tiket pemenang.

Simulasi Tiket

set.seed(123)

# Simulasi pengambilan tiket
simulasi_tiket = function() {
  # Mengambil 3 tiket secara acak
  tiket = sample(1:100, 3, replace = FALSE)
  # Menentukan apakah ada tiket pemenang
  ada_pemenang = any(tiket %in% 1:10)
  return(ada_pemenang)
}

# Simulasi untuk banyak pengambilan
n_simulasi = 1000

# Hasil simulasi
hasil_simulasi = replicate(n_simulasi, simulasi_tiket())

# Menghitung peluang mendapatkan setidaknya 1 tiket pemenang
peluang = mean(hasil_simulasi)

# Menampilkan hasil
cat("Peluang mendapatkan setidaknya 1 tiket pemenang:", peluang, "\n")
## Peluang mendapatkan setidaknya 1 tiket pemenang: 0.261

Tiket dinomori dari nomor urut 1-100 dengan pemenang adalah yang memegang nomor urut 1-10

  • simulasi_tiket = function() {..} membbuat fungsi untuk satu kali percobaan pengambilan tiket.

  • tiket = sample(1:100, 3, replace = FALSE) melakukan simulasi mengambil 3 kupon dari dalam kotak dengan mengambil 3 angka acak dari 1-100 tanpa pengembalian.

  • ada-pemenang = any(tiket %in% 1:10)

    • 1:10 = daftar nomor pemenang.

    • %in% = operator untuk memeriksa apakah angka yang terambil ada di dalam daftar 1-10.

    • any(...) menghasilkan TRUE jika minimal satu dari 3 tiket tersebut adalah nomor pemenang. Jika tidak maka FALSE.

  • return(ada_pemenang) mengembalikan hasil TRUE (Menang) atau FALSE (kalah)

  • hasil_simulasi = replice(n_simulasi, simulasi_tiket()) mengulang fungsi tersebut sebanyak 1000x.

  • ppeluang = mean(hasil_simulasi) menghitung proporsi kemenangan dengan nilai 1 untuk TRUE dan nilai 0 untuk FALSE. Rata-rata ini emnunjukkan peluang.

Simulasi Lotere

# Fungsi untuk simulasi lotere
SimulasiLotere = function() {
  tiket = c(rep("Biasa", 90),rep("Pemenang", 10)) # 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.279
  • SimulasiLotere = function() {...} membuat fungsi simulasi

  • tiket = c(rep("Biasa", 90), rep("Pemenang", 10)) membuat populasi dengan rep("Biasa", 90) membuat 90 teks “Biasa”, rep("Pemenang", 10) membuat 10 teks pemenang. c(...) menggabungkan keduanya menjadi vektor yang berisi 100 elemen.

  • pilihan = sample(tiket, 3, replace FALSE) mengambil 3 elemen secara acak dari kumpulan teks yang telah dibuat tanpa ada peengembalian.

  • return(any(pilihan == "Pemenang")) dengan logika pengecekan pilihan == "Pemenang" memeriksa tiket yang terambil bertuliskan “Pemenang” dan any(...) memastikan hasil akhirnya TRUE jika ada setidaknya 1 tiket “Pemenang” yang terambil.

  • set.seed(123) hasil simulasi dikunci sehingga konsisten dan dapat diproduksi ulang (reproducible).

  • peluang_menang = mean(hasil) menghitung rata-rata kemunculan TRUE untuk mendapatkan estimasi peluang.

Soal 3

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.

  1. Buat simulasi mengambil 2 kartu acak dari tumpukan (tanpa pengembalian).

  2. Tentukan apakah kartu kedua akan runtuh.

  3. Ulangi simulasi sebanyak 500 kali, hitung berapa kali kartu kedua runtuh, dan hitung peluang runtuhnya 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

Membuat Fungsi

  • SimulasiDomino membuat fungsi simulasi

  • kartu = sample(1:12, 2, replace = FALSE mengambil 2 angka secara acak sari 1-12 tanpa adanya pengembalian. Angka pertama kartu[1] dianggap sebagai kartu pemicu dan angka kedua kartu[2] sebagai kartu target.

  • if(kartu[1] %% kartu[2] == 0 {...} memeriksa apakah angka kartu pertama habis dibagi oleh angka kartu kedua dengan operator %% sebagai modulo (sisa hasil bagi). Bernilai TRUE jika terambil 6 dan 3 karena 6/3 = 1 (sisa 0). Bernilai FALSE jika 7 dan 3 karena 7/3 = 2 (sisa 1).

  • return(1) dan return(0) mengembalikan angka 1 jika kondisi terpenuhi dan 0 jika tidak.

Eksekusi Simulasi

  • set.seed(123) hasil simulasi dikunci sehingga konsisten dan dapat diproduksi ulang (reproducible).

  • hasil = replicate(500, SimulasiDomino()) mengulang fungsi tersbut sebanyak 500x. Variabel hasil akan berisi deretan 500 angka yang terdiri dari 0 dan 1.

  • pelunag_runtuh = mean(hasil) menghitung rata-rata yang merepresentasikan seberapa besar peluang.

  • cat("Jumlah runtuhnya kartu kedua:" sum(hasil), "\n") menjumlahkan semua angka 1 ini menghitung frekuensi total kejadian runtuh dari 500x percobaan.

cat("Peluang kartu kedua runtuh:", peluang_runtuh, "\n")
## Peluang kartu kedua runtuh: 0.166