# ==============================================================================
# 1. DISTRIBUSI BINOMIAL
# ==============================================================================

# 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 binomial
rbinom(n = 5, size = 10, prob = 0.5)
## [1] 4 6 4 5 7
# ==============================================================================
# 2. DISTRIBUSI POISSON
# ==============================================================================

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

# 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
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] 164.7136 165.0228 153.5690 171.5845 159.3746
# ==============================================================================
# 4. DISTRIBUSI EKSPONENSIAL
# ==============================================================================

# Peluang waktu tunggu <= 3 menit, P(X <= 3)
pexp(q = 3, rate = 0.2)
## [1] 0.4511884
# ==============================================================================
# 5. DISTRIBUSI UNIFORM DAN t-STUDENT
# ==============================================================================

# Membangkitkan 3 angka acak Uniform [10, 50]
runif(n = 3, min = 10, max = 50)
## [1] 47.51696 37.81113 40.55255
# Nilai kritis t ekor kanan (alpha = 0.05, df = 20)
qt(p = 0.05, df = 20, lower.tail = FALSE)
## [1] 1.724718
# ==============================================================================
# 6. SET.SEED (MENGUNCI HASIL ACAK)
# ==============================================================================

# Tanpa set.seed: hasil berubah setiap dijalankan
y <- rpois(n = 10, lambda = 4)
print(y)
##  [1] 8 8 2 4 2 3 2 4 4 7
# Dengan set.seed: hasil selalu sama
set.seed(123)
y <- rpois(n = 10, lambda = 4)
print(y)
##  [1] 3 6 3 6 7 1 4 7 4 4
# Seed berbeda menghasilkan data berbeda
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
# ==============================================================================
# 7. DISTRIBUSI BERNOULLI (BINOMIAL DENGAN size = 1)
# ==============================================================================

# Bernoulli dengan peluang sukses 0.7
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
# Bernoulli dengan peluang sukses 0.5
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
# ==============================================================================
# 8. BARPLOT DATA POISSON
# ==============================================================================

# Data Poisson
set.seed(123)
y <- rpois(n = 10, lambda = 4)
print(y)
##  [1] 3 6 3 6 7 1 4 7 4 4
# Diagram batang (cocok untuk data diskrit)
barplot(
  table(y),
  col = "skyblue",
  border = "black",
  main = "Frekuensi Data Distribusi Poisson (lambda = 4)",
  xlab = "Nilai y",
  ylab = "Frekuensi"
)

# ==============================================================================
# 9. PIE CHART DATA POISSON
# ==============================================================================

# Tabel frekuensi, persen, dan label
frekuensi <- table(y)
persen <- round(100 * frekuensi / sum(frekuensi), 1)
label_pie <- paste(names(frekuensi), "-", persen, "%")

# Warna disimpan di satu variabel agar pie dan legend selalu cocok
warna_pie <- c("lightblue", "mistyrose", "lightcyan", "plum", "cornsilk")

# Diagram lingkaran
pie(
  frekuensi,
  labels = label_pie,
  main = "Proporsi Nilai Data Poisson",
  col = warna_pie
)

# Legend
legend(
  "topright",
  legend = names(frekuensi),
  title = "Nilai y",
  fill = warna_pie
)

# ==============================================================================
# 10. PIE CHART BERNOULLI
# ==============================================================================

# Tabel frekuensi dihitung ulang dari data z
frekuensi <- table(z)
persen <- round(100 * frekuensi / sum(frekuensi), 1)
label_pie <- paste(names(frekuensi), "-", persen, "%")

# Diagram lingkaran
pie(
  frekuensi,
  labels = label_pie,
  main = "Diagram Lingkaran Distribusi Bernoulli",
  col = c("coral", "lightgreen")
)

# Legend
legend(
  "topright",
  legend = c("Nilai 0", "Nilai 1"),
  fill = c("coral", "lightgreen")
)

# ==============================================================================
# 11. DISTRIBUSI MULTINOMIAL (3 KATEGORI) DAN BARPLOT
# ==============================================================================

# Data multinomial: n = 100, peluang 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 ke vektor frekuensi dan beri nama
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, posisi batang disimpan di bp
bp <- 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)
)

# Angka jumlah di atas setiap batang
text(x = bp, y = frekuensi + 3, labels = frekuensi)

# ==============================================================================
# 12. MULTINOMIAL: PENDIDIKAN 10 RESPONDEN (BARPLOT)
# ==============================================================================

# Data: 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))

# Ubah ke vektor frekuensi dan beri nama
frekuensi <- as.vector(data_pendidikan)
names(frekuensi) <- c("SD", "SMP", "SMA")
print(frekuensi)
##  SD SMP SMA 
##   3   3   4
# Diagram 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)
)

# Angka jumlah responden di atas batang
text(x = bp, y = frekuensi + 0.3, labels = frekuensi)

# ==============================================================================
# 13. PIE CHART PENDIDIKAN 10 RESPONDEN
# ==============================================================================

# Persen dan label (dengan baris baru \n)
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")
)

# Legend
legend(
  "topright",
  legend = names(frekuensi),
  fill = c("coral", "khaki", "lightgreen"),
  title = "Tingkat Pendidikan"
)

# ==============================================================================
# 14. STACKED BARPLOT: PENDIDIKAN VS PEKERJAAN
# ==============================================================================

# Matriks data (baris = pekerjaan, kolom = pendidikan)
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
# Warna disimpan di satu variabel agar barplot dan legend cocok
warna_pekerjaan <- c("forestgreen", "orange")

# Diagram batang bertumpuk
bp <- barplot(
  data_gabungan,
  main = "Tingkat Pendidikan dan Pekerjaan 10 Responden",
  xlab = "Tingkat Pendidikan",
  ylab = "Jumlah Responden (Orang)",
  col = warna_pekerjaan,
  border = "black",
  ylim = c(0, max(colSums(data_gabungan)) + 2)
)

# Legend keterangan pekerjaan
legend(
  "topright",
  legend = rownames(data_gabungan),
  fill = warna_pekerjaan,
  title = "Pekerjaan"
)

# Label total responden di atas setiap batang
text(x = bp, y = colSums(data_gabungan) + 0.3, labels = colSums(data_gabungan))