# 1. Menentukan Seed (agar hasil acak bisa direproduksi/sama setiap kali dirun)
set.seed(123)

# 2. Ukuran Sampel Data
n <- 10

# 3. Membangkitkan Data Poisson (x)
# Parameter lambda = rata-rata kejadian (misal lambda = 3)
x <- rpois(n, lambda = 4)

# 4. Membangkitkan Data Binomial (y)
# Parameter size = jumlah percobaan (misal size = 10), prob = peluang sukses (misal prob = 0.5)
y <- rbinom(n, size = 10, prob = 0.5)

# 5. Menggabungkan Data x dan y ke dalam Data Frame
data_diskrit <- data.frame(
  ID = 1:n,
  x_Poisson = x,
  y_Binomial = y
)

# 6. Menampilkan Data x dan y
print(data_diskrit)
##    ID x_Poisson y_Binomial
## 1   1         3          8
## 2   2         6          5
## 3   3         3          6
## 4   4         6          5
## 5   5         7          3
## 6   6         1          7
## 7   7         4          4
## 8   8         7          2
## 9   9         4          4
## 10 10         4          8
set.seed(123)
# Membangkitkan 10 data berdistribusi Poisson dengan lambda = 4
y <- rpois(n = 10, lambda = 4)

# Menampilkan nilai y
print(y)
##  [1] 3 6 3 6 7 1 4 7 4 4
# 1. Set seed biar hasilnya sama terus pas dirun
set.seed(123)

n <- 10
y <- rbinom(n = n, size = 1, prob = 0.6)

# 2. Bagi area grafik jadi 1 baris 2 kolom
par(mfrow = c(1, 2))

# 3. Grafik Kiri: Barplot Frekuensi
barplot(
  table(factor(y, levels = c(0, 1))),
  main = "Frekuensi Hasil Bernoulli",
  xlab = "Hasil (0 = Gagal, 1 = Sukses)",
  ylab = "Frekuensi",
  col = c("#ef5350", "#66bb6a"),
  ylim = c(0, 8)
)

# 4. Grafik Kanan: Plot Hasil per Percobaan (Stem Plot)
plot(
  1:n, y,
  type = "h",          # Garis vertikal
  lwd = 2,
  col = "blue",
  main = "Nilai Data per Percobaan",
  xlab = "Percobaan ke-",
  ylab = "Hasil (0 atau 1)",
  ylim = c(0, 1.1),
  xaxt = "n",
  yaxt = "n"
)
points(1:n, y, pch = 19, col = "blue") # Titik di ujung garis
abline(h = 0, col = "red")            # Garis dasar merah
axis(1, at = 1:n)                      # Scale sumbu X pas 1-10
axis(2, at = c(0, 1))                  # Scale sumbu Y cuma 0 dan 1

# Reset layout grafik ke awal
par(mfrow = c(1, 1))

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
library(patchwork) # Paket buat gabungin 2 plot
## Warning: package 'patchwork' was built under R version 4.5.3
# 1. Generate data Bernoulli
set.seed(123)
n <- 10
y_raw <- rbinom(n = n, size = 1, prob = 0.6)

# Masukkan ke data frame biar gampang diolah ggplot
df <- data.frame(
  percobaan = 1:n,
  hasil = factor(y_raw, levels = c(0, 1), labels = c("Gagal (0)", "Sukses (1)")),
  nilai = y_raw
)

# 2. Grafik 1: Diagram Batang Frekuensi
p1 <- ggplot(df, aes(x = hasil, fill = hasil)) +
  geom_bar(color = "black", show.legend = FALSE) +
  scale_fill_manual(values = c("Gagal (0)" = "#ef5350", "Sukses (1)" = "#66bb6a")) +
  scale_y_continuous(limits = c(0, 8), breaks = seq(0, 8, 2)) +
  labs(title = "Frekuensi Hasil Bernoulli", x = "Hasil", y = "Frekuensi") +
  theme_minimal()

# 3. Grafik 2: Stem Plot Hasil per Percobaan
p2 <- ggplot(df, aes(x = percobaan, y = nilai)) +
  geom_hline(yintercept = 0, color = "red", linewidth = 0.8) +
  geom_segment(aes(xend = percobaan, yend = 0), color = "blue", linewidth = 0.8) +
  geom_point(color = "blue", size = 3) +
  scale_x_continuous(breaks = 1:n) +
  scale_y_continuous(breaks = c(0, 1), limits = c(0, 1.1)) +
  labs(title = "Nilai Data per Percobaan", x = "Percobaan ke-", y = "Hasil (0 atau 1)") +
  theme_minimal()

# 4. Tampilkan berdampingan
p1 + p2

library(ggplot2)

# 1. Generate data Bernoulli
set.seed(123)
n <- 10
y_raw <- rbinom(n = n, size = 1, prob = 0.6)

# 2. Olah data ke data frame & hitung frekuensinya
df_pie <- data.frame(
  hasil = factor(y_raw, levels = c(0, 1), labels = c("Gagal (0)", "Sukses (1)"))
)

# 3. Buat Diagram Lingkaran
ggplot(df_pie, aes(x = "", fill = hasil)) +
  geom_bar(width = 1, color = "white") +
  coord_polar(theta = "y") + # Mengubah koordinat batang menjadi lingkaran
  scale_fill_manual(values = c("Gagal (0)" = "#ef5350", "Sukses (1)" = "#66bb6a")) +
  labs(title = "Proporsi Hasil Bernoulli", fill = "Kategori") +
  theme_void() # Menghapus sumbu dan grid latar belakang

library(ggplot2)

# 1. Generate Data Multinomial
set.seed(123)
y_raw <- rmultinom(n = 1, size = 50, prob = c(0.1, 0.2, 0.3, 0.4))

df_multinomial <- data.frame(
  kategori = c("Kategori A", "Kategori B", "Kategori C", "Kategori D"),
  jumlah = y_raw[, 1]
)

# -------------------------------------------------------------
# OPSI 1: Palet Warna Bawaan (ColorBrewer - Set2)
# -------------------------------------------------------------
ggplot(df_multinomial, aes(x = kategori, y = jumlah, fill = kategori)) +
  geom_col(color = "black", width = 0.6) +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Opsi 1: Palet Set2", x = "Kategori", y = "Frekuensi") +
  theme_minimal()

# -------------------------------------------------------------
# OPSI 2: Palet Warna Custom (Manual Hex Codes)
# -------------------------------------------------------------
warna_custom <- c("#FF5733", "#33FF57", "#3357FF", "#F3FF33")

ggplot(df_multinomial, aes(x = kategori, y = jumlah, fill = kategori)) +
  geom_col(color = "black", width = 0.6) +
  scale_fill_manual(values = warna_custom) +
  labs(title = "Opsi 2: Warna Custom Hex Code", x = "Kategori", y = "Frekuensi") +
  theme_minimal()

# -------------------------------------------------------------
# OPSI 3: Gradasi Warna Otomatis Berdasarkan Nilai Jumlah (Continuous Scale)
# -------------------------------------------------------------
ggplot(df_multinomial, aes(x = kategori, y = jumlah, fill = jumlah)) +
  geom_col(color = "black", width = 0.6) +
  scale_fill_gradient(low = "#90caf9", high = "#0d47a1") +
  labs(title = "Opsi 3: Gradasi Berdasarkan Nilai Jumlah", x = "Kategori", y = "Frekuensi", fill = "Jumlah") +
  theme_minimal()

library(ggplot2)

# 1. Set Seed & Bangkitkan Data Simulasi Responden
set.seed(42)
n <- 200

# Kategori
kat_pendidikan <- c("SD", "SMP", "SMA", "D3", "S1", "S2/S3")
prob_pendidikan <- c(0.10, 0.15, 0.40, 0.10, 0.20, 0.05)

# Cukup 2 Kategori Pekerjaan biar pas dengan kebutuhan "2 warna"
kat_pekerjaan <- c("Bekerja", "Belum Bekerja")
prob_pekerjaan <- c(0.65, 0.35)

# Buat Data Frame
df_responden <- data.frame(
  ID = 1:n,
  Pendidikan = factor(
    sample(kat_pendidikan, size = n, replace = TRUE, prob = prob_pendidikan),
    levels = kat_pendidikan
  ),
  Status_Kerja = factor(
    sample(kat_pekerjaan, size = n, replace = TRUE, prob = prob_pekerjaan)
  )
)

# -------------------------------------------------------------
# OPSI A: Stacked Bar Chart (Batang Menumpuk - 2 Warna)
# -------------------------------------------------------------
ggplot(df_responden, aes(x = Pendidikan, fill = Status_Kerja)) +
  geom_bar(color = "black", width = 0.6) +
  scale_fill_manual(values = c("Bekerja" = "#66bb6a", "Belum Bekerja" = "#ef5350")) +
  labs(
    title = "Distribusi Pendidikan Berdasarkan Status Kerja (Menumpuk)",
    x = "Tingkat Pendidikan",
    y = "Jumlah Responden",
    fill = "Status Kerja"
  ) +
  theme_minimal()

# -------------------------------------------------------------
# OPSI B: Grouped Bar Chart (Batang Berdampingan - 2 Warna)
# -------------------------------------------------------------
ggplot(df_responden, aes(x = Pendidikan, fill = Status_Kerja)) +
  geom_bar(position = "dodge", color = "black", width = 0.7) +
  scale_fill_manual(values = c("Bekerja" = "#42a5f5", "Belum Bekerja" = "#ffa726")) +
  labs(
    title = "Distribusi Pendidikan Berdasarkan Status Kerja (Berdampingan)",
    x = "Tingkat Pendidikan",
    y = "Jumlah Responden",
    fill = "Status Kerja"
  ) +
  theme_minimal()

library(ggplot2)

# 1. Set Seed & Bangkitkan Data Simulasi Responden
set.seed(42)
n <- 200

# Kategori
kat_pendidikan <- c("SD", "SMP", "SMA", "D3", "S1", "S2/S3")
prob_pendidikan <- c(0.10, 0.15, 0.40, 0.10, 0.20, 0.05)

kat_pekerjaan <- c("Formal", "Informal")
prob_pekerjaan <- c(0.60, 0.40)

# Buat Data Frame
df_responden <- data.frame(
  ID = 1:n,
  Pendidikan = factor(
    sample(kat_pendidikan, size = n, replace = TRUE, prob = prob_pendidikan),
    levels = kat_pendidikan
  ),
  Jenis_Pekerjaan = factor(
    sample(kat_pekerjaan, size = n, replace = TRUE, prob = prob_pekerjaan)
  )
)

# 2. Membuat Diagram Batang Berdampingan (2 Batang di Setiap Pendidikan)
ggplot(df_responden, aes(x = Pendidikan, fill = Jenis_Pekerjaan)) +
  geom_bar(position = position_dodge(preserve = "single"), color = "black", width = 0.7) +
  geom_text(
    stat = "count", 
    aes(label = after_stat(count)), 
    position = position_dodge(0.7), 
    vjust = -0.5, 
    size = 3.5, 
    fontface = "bold"
  ) +
  scale_fill_manual(values = c("Formal" = "#1f77b4", "Informal" = "#ff7f0e")) +
  scale_y_continuous(limits = c(0, max(table(df_responden$Pendidikan, df_responden$Jenis_Pekerjaan)) + 8)) +
  labs(
    title = "Jumlah Responden Berdasarkan Pendidikan dan Jenis Pekerjaan",
    x = "Tingkat Pendidikan",
    y = "Jumlah Responden",
    fill = "Jenis Pekerjaan"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 13),
    axis.text = element_text(color = "black")
  )

library(ggplot2)

# 1. Set Seed & Bangkitkan Data Simulasi Responden
set.seed(42)
n <- 200

# Kategori
kat_pendidikan <- c("SD", "SMP", "SMA", "D3", "S1", "S2/S3")
prob_pendidikan <- c(0.10, 0.15, 0.40, 0.10, 0.20, 0.05)

kat_pekerjaan <- c("PNS/BUMN", "Swasta") # 2 Pekerjaan
prob_pekerjaan <- c(0.40, 0.60)

# Buat Data Frame
df_responden <- data.frame(
  ID = 1:n,
  Pendidikan = factor(
    sample(kat_pendidikan, size = n, replace = TRUE, prob = prob_pendidikan),
    levels = kat_pendidikan
  ),
  Pekerjaan = factor(
    sample(kat_pekerjaan, size = n, replace = TRUE, prob = prob_pekerjaan)
  )
)

# 2. Membuat Stacked Bar Chart dengan Angka di Dalam Batang
ggplot(df_responden, aes(x = Pendidikan, fill = Pekerjaan)) +
  geom_bar(color = "black", width = 0.6) +
  
  # Angka jumlah di bagian DALAM masing-masing warna
  geom_text(
    stat = "count", 
    aes(label = after_stat(count)), 
    position = position_stack(vjust = 0.5), # Posisi tepat di tengah warna
    color = "white",
    fontface = "bold",
    size = 4
  ) +
  
  # Angka TOTAL keseluruhan di atas puncak setiap batang
  geom_text(
    stat = "count",
    aes(label = after_stat(count), group = Pendidikan),
    position = position_stack(vjust = 1.05),
    color = "black",
    fontface = "bold",
    size = 4
  ) +
  
  scale_fill_manual(values = c("PNS/BUMN" = "#2b5c8f", "Swasta" = "#e07a5f")) +
  scale_y_continuous(limits = c(0, max(table(df_responden$Pendidikan)) + 10)) +
  labs(
    title = "Distribusi Pendidikan Berdasarkan Jenis Pekerjaan",
    x = "Tingkat Pendidikan",
    y = "Jumlah Responden",
    fill = "Jenis Pekerjaan"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 13),
    axis.text = element_text(color = "black")
  )
## Warning: The following aesthetics were dropped during statistical transformation: fill.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?