# ==============================================================================
# DISTRIBUSI PELUANG DISKRIT & KONTINU DALAM R
# ==============================================================================
# ------------------------------------------------------------------------------
# 1. Distribusi Binomial
# Soal: Dari 10 kali pelemparan koin seimbang (p = 0.5), hitung peluang tepat 3 kali,
# maksimal 3 kali, dan bangkitkan 5 data acak.
# ------------------------------------------------------------------------------
# Peluang tepat 3 kali (P(X = 3))
dbinom(x = 3, size = 10, prob = 0.5)
## [1] 0.1171875
# Peluang maksimal 3 kali (P(X <= 3))
pbinom(q = 3, size = 10, prob = 0.5)
## [1] 0.171875
# Membangkitkan 5 data acak percobaan binomial (n=10, p=0.5)
rbinom(n = 5, size = 10, prob = 0.5)
## [1] 7 6 7 8 7
# 2. Distribusi Poisson
# Soal: Rata-rata kedatangan pembeli adalah 4 orang per jam (lambda = 4).
# Hitung peluang tepat 2 pembeli dan peluang lebih dari 5 pembeli.
# ------------------------------------------------------------------------------
# Peluang tepat 2 pembeli (P(X = 2))
dpois(x = 2, lambda = 4)
## [1] 0.1465251
# Peluang lebih dari 5 pembeli (P(X > 5))
ppois(q = 5, lambda = 4, lower.tail = FALSE)
## [1] 0.2148696
# 3. Distribusi Normal
# Soal: Tinggi badan berdistribusi normal dengan rata-rata mu = 170 cm dan sd = 10 cm.
# Hitung peluang tinggi <= 165 cm dan nilai kuantil untuk persentil ke-95.
# ------------------------------------------------------------------------------
# Peluang tinggi badan <= 165 cm (P(X <= 165))
pnorm(q = 165, mean = 170, sd = 10)
## [1] 0.3085375
# Nilai tinggi badan pada persentil ke-95 (P(X <= x) = 0.95)
qnorm(p = 0.95, mean = 170, sd = 10)
## [1] 186.4485
# Membangkitkan 5 data tinggi badan acak
rnorm(n = 5, mean = 170, sd = 10)
## [1] 191.2144 178.4647 164.1897 166.9868 188.4318
# 4. Distribusi Eksponensial
# Soal: Waktu tunggu layanan berdistribusi eksponensial dengan rate = 0.2 per menit.
# Hitung peluang pelanggan dilayani dalam waktu <= 3 menit.
# ------------------------------------------------------------------------------
# Peluang waktu tunggu <= 3 menit (P(X <= 3))
pexp(q = 3, rate = 0.2)
## [1] 0.4511884
# 5. Distribusi Uniform Kontinu & t-Student
# Soal: Generasi data acak Uniform [10, 50] dan cari nilai kritis t (alpha = 0.05, df = 20).
# ------------------------------------------------------------------------------
# Membangkitkan 3 angka acak Uniform [10, 50]
runif(n = 3, min = 10, max = 50)
## [1] 38.57675 41.08935 25.10674
# Kuantil distribusi-t untuk ekor kanan (P(T > t) = 0.05)
qt(p = 0.05, df = 20, lower.tail = FALSE)
## [1] 1.724718
y=rpois(n=10, lambda=4)
print(y)
## [1] 6 2 3 3 2 3 0 2 3 3
set.seed(123)
y=rpois(n=10, lambda=4)
print(y)
## [1] 3 6 3 6 7 1 4 7 4 4
set.seed(1)
y=rpois(n=10, lambda=4)
print(y)
## [1] 3 3 4 7 2 7 7 5 5 1
set.seed(2)
y=rpois(n=10, lambda=4)
print(y)
## [1] 2 5 4 2 7 7 2 6 4 4
set.seed(0123)
y=rpois(n=10, lambda=4)
print(y)
## [1] 3 6 3 6 7 1 4 7 4 4
set.seed(123)
z = rbinom(n = 10, size = 1, prob = 0.7)
print(z)
## [1] 1 0 1 0 0 1 1 0 1 1
set.seed(123)
z = rbinom(n = 10, size = 1, prob = 0.5)
print(z)
## [1] 0 1 0 1 1 0 1 1 1 0
set.seed(123)
y <- rpois(n = 10, lambda = 4)
print(y)
## [1] 3 6 3 6 7 1 4 7 4 4
# 1. Plot Diagram Batang (Barplot) - Cocok untuk data diskrit
barplot(
table(y),
col = "skyblue",
border = "black",
main = "Frekuensi Data Distribusi Poisson (lambda = 4)",
xlab = "Nilai y",
ylab = "Frekuensi"
)

frekuensi <- table(y)
persen <- round(100 * frekuensi / sum(frekuensi), 1)
label_pie <- paste(names(frekuensi), "-", persen, "%")
pie(
frekuensi,
labels = label_pie,
main = "Proporsi Nilai Data Poisson",
col = c("lightblue", "mistyrose", "lightcyan", "magenta", "cornsilk")
)
legend("topright", legend = names(frekuensi), title = "Nilai y", fill = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"))

# Diagram Lingkaran
pie(
frekuensi,
labels = label_pie,
main = "Diagram Lingkaran Distribusi Binomial (Bernoulli)",
col = c("coral", "lightgreen")
)
# Tambahkan legend
legend(
"topright",
legend = c("Nilai 0", "Nilai 1"),
fill = c("coral", "lightgreen")
)

# Data Multinomial (3 Kategori)
# n = 100 percobaan, probabilitas 3 kategori = c(0.2, 0.5, 0.3)
set.seed(123)
data_mult <- rmultinom(n = 1, size = 100, prob = c(0.2, 0.5, 0.3))
# Ubah menjadi matriks 1D/vektor frekuensi
frekuensi <- as.vector(data_mult)
names(frekuensi) <- c("Kategori A", "Kategori B", "Kategori C")
print(frekuensi)
## Kategori A Kategori B Kategori C
## 18 45 37
# Diagram Batang (3 Batang)
barplot(
frekuensi,
main = "Diagram Batang Distribusi Multinomial (3 Kategori)",
xlab = "Kategori",
ylab = "Frekuensi",
col = c("skyblue", "lightgreen", "coral"),
border = "black",
ylim = c(0, max(frekuensi) + 10)
)
# Menambahkan angka jumlah di atas setiap batang
text(
x = barplot(frekuensi, plot = FALSE),
y = frekuensi + 3,
labels = frekuensi
)

# Data Multinomial: Pendidikan 10 Responden di Kampung
# 3 Kategori: SD, SMP, SMA
# Probabilitas populasi diset: SD = 0.4, SMP = 0.35, SMA = 0.25
set.seed(123)
data_pendidikan <- rmultinom(n = 1, size = 10, prob = c(0.4, 0.35, 0.25))
# Konversi ke vektor frekuensi dan beri nama kategori
frekuensi <- as.vector(data_pendidikan)
names(frekuensi) <- c("SD", "SMP", "SMA")
print(frekuensi)
## SD SMP SMA
## 3 3 4
# Diagram Batang (3 Batang)
bp <- barplot(
frekuensi,
main = "Tingkat Pendidikan 10 Responden Kampung",
xlab = "Tingkat Pendidikan",
ylab = "Jumlah Responden (Orang)",
col = c("coral", "khaki", "lightgreen"),
border = "black",
ylim = c(0, max(frekuensi) + 2)
)
# Menambahkan angka jumlah responden di atas setiap batang
text(
x = bp,
y = frekuensi + 0.3,
labels = frekuensi
)

# Data Multinomial: Pendidikan 10 Responden di Kampung
# 3 Kategori: SD, SMP, SMA
set.seed(123)
data_pendidikan <- rmultinom(n = 1, size = 10, prob = c(0.4, 0.35, 0.25))
# Konversi ke vektor frekuensi
frekuensi <- as.vector(data_pendidikan)
names(frekuensi) <- c("SD", "SMP", "SMA")
# Hitung persen untuk label
persen <- round(100 * frekuensi / sum(frekuensi), 1)
label_pie <- paste(names(frekuensi), "\n", frekuensi, "orang (", persen, "%)", sep = "")
# Diagram Lingkaran
pie(
frekuensi,
labels = label_pie,
main = "Persentase Tingkat Pendidikan 10 Responden Kampung",
col = c("coral", "khaki", "lightgreen")
)
# Tambahkan legend
legend(
"topright",
legend = names(frekuensi),
fill = c("coral", "khaki", "lightgreen"),
title = "Tingkat Pendidikan"
)

# ------------------------------------------------------------------------------
# STACKED BARPLOT: Pendidikan vs Pekerjaan (10 Responden)
# ------------------------------------------------------------------------------
# 1. Membuat Matriks Data (Baris = Pekerjaan, Kolom = Pendidikan)
# Kategori Pekerjaan: Petani & Buruh
# Kategori Pendidikan: SD, SMP, SMA
data_gabungan <- matrix(
c(2, 1, # SD : 2 Petani, 1 Buruh
1, 3, # SMP : 1 Petani, 3 Buruh
2, 1), # SMA : 2 Petani, 1 Buruh
nrow = 2,
byrow = FALSE,
dimnames = list(
Pekerjaan = c("Petani", "Buruh"),
Pendidikan = c("SD", "SMP", "SMA")
)
)
print(data_gabungan)
## Pendidikan
## Pekerjaan SD SMP SMA
## Petani 2 1 2
## Buruh 1 3 1
# 2. Membuat Diagram Batang Bertumpuk (Stacked Barplot)
bp <- barplot(
data_gabungan,
main = "Tingkat Pendidikan dan Pekerjaan 10 Responden",
xlab = "Tingkat Pendidikan",
ylab = "Jumlah Responden (Orang)",
col = c("forestgreen", "orange"), # Warna untuk Petani & Buruh
border = "black",
ylim = c(0, max(colSums(data_gabungan)) + 2)
)
# 3. Menambahkan Legend (Keterangan Warna Pekerjaan)
legend(
"topright",
legend = rownames(data_gabungan),
fill = c("saddlebrown", "burlywood3"),
title = "Pekerjaan"
)
# 4. Menambahkan Label Total Responden di Atas Setiap Batang
text(
x = bp,
y = colSums(data_gabungan) + 0.3,
labels = colSums(data_gabungan)
)
