# Parameter (mu dan sd)
params <- list(
  c(mu = 0,   sd = 2,   col = "blue"), # Biru
  c(mu = 2,   sd = 1,   col = "green"), # Hijau
  c(mu = 5,   sd = 5,   col = "red"), # Merah
  c(mu = 10,  sd = 3,   col = "purple"), # Ungu
  c(mu = 1.5, sd = 0.1, col = "orange")  # Oranye
)

# Rentang sumbu X
x <- seq(-11, 20, length.out = 2000)

# Plot Kurva 1 sebagai dasar
y1 <- dnorm(x, mean = 0, sd = 2)
plot(x, y1, type = "l", col = "#1F77B4", lwd = 2,
     main = "Perbandingan 5 Distribusi Normal Bertumpuk",
     xlab = "Nilai X", ylab = "Densitas",
     ylim = c(0, 1.2), # Membatasi sumbu Y agar kurva lain tetap terlihat jelas
     las = 1, bty = "l")

# Menambahkan kurva sisanya dengan perulangan (loop)
for (p in params) {
  m <- as.numeric(p["mu"])
  s <- as.numeric(p["sd"])
  cl <- p["col"]
  
  y <- dnorm(x, mean = m, sd = s)
  lines(x, y, col = cl, lwd = 2)
  polygon(c(x, rev(x)), c(y, rep(0, length(y))), 
          col = adjustcolor(cl, alpha.f = 0.15), border = NA)
}

grid()
legend("topright", 
       legend = c("N(0, sd=2)", "N(2, sd=1)", "N(5, sd=5)", "N(10, sd=3)", "N(1.5, sd=0.1)"),
       col = c("#1F77B4", "#2CA02C", "#D62728", "#9467BD", "#FF7F0E"), 
       lwd = 2, bty = "n")

library(ggplot2)

# ------------------------------------------------------------
# 1. Definisi Fungsi Pareto
# ------------------------------------------------------------
dpareto <- function(x, xm = 1, alpha = 3) {
  ifelse(x >= xm, (alpha * (xm^alpha)) / (x^(alpha + 1)), 0)
}

# ------------------------------------------------------------
# 2. Sumbu X Bersama (-4 sampai 15 agar mencakup semua domain)
# ------------------------------------------------------------
x_vals <- seq(-4, 15, length.out = 1000)

# ------------------------------------------------------------
# 3. Membuat Data Frame Gabungan (Tidy Format)
# ------------------------------------------------------------
df_all <- rbind(
  data.frame(x = x_vals, y = dt(x_vals, df = 5),                   Distribusi = "t-Student (df=5)"),
  data.frame(x = x_vals, y = df(x_vals, df1 = 5, df2 = 10),        Distribusi = "F (df1=5, df2=10)"),
  data.frame(x = x_vals, y = dchisq(x_vals, df = 4),               Distribusi = "Chi-Square (df=4)"),
  data.frame(x = x_vals, y = dgamma(x_vals, shape = 2, rate = 1),  Distribusi = "Gamma (shape=2, rate=1)"),
  data.frame(x = x_vals, y = dweibull(x_vals, shape = 2, scale = 1),Distribusi = "Weibull (shape=2, scale=1)"),
  data.frame(x = x_vals, y = dexp(x_vals, rate = 1),               Distribusi = "Eksponensial (rate=1)"),
  data.frame(x = x_vals, y = dpareto(x_vals, xm = 1, alpha = 3),   Distribusi = "Pareto (xm=1, alpha=3)"),
  data.frame(x = x_vals, y = dunif(x_vals, min = 0, max = 5),       Distribusi = "Uniform (min=0, max=5)")
)

# Mengunci urutan label di legenda sesuai keinginan Anda
dist_levels <- c(
  "t-Student (df=5)", "F (df1=5, df2=10)", "Chi-Square (df=4)", 
  "Gamma (shape=2, rate=1)", "Weibull (shape=2, scale=1)", 
  "Eksponensial (rate=1)", "Pareto (xm=1, alpha=3)", "Uniform (min=0, max=5)"
)
df_all$Distribusi <- factor(df_all$Distribusi, levels = dist_levels)

# ------------------------------------------------------------
# 4. Palet Warna Kustom (Sesuai Hex Code Kode Asli Anda)
# ------------------------------------------------------------
palet_warna <- c(
  "t-Student (df=5)"        = "#4361EE",
  "F (df1=5, df2=10)"       = "#F72585",
  "Chi-Square (df=4)"       = "#4CC9F0",
  "Gamma (shape=2, rate=1)"  = "#7209B7",
  "Weibull (shape=2, scale=1)" = "#3A0CA3",
  "Eksponensial (rate=1)"   = "#4895EF",
  "Pareto (xm=1, alpha=3)"  = "#10B981",
  "Uniform (min=0, max=5)"  = "#F59E0B"
)

# ------------------------------------------------------------
# 5. Visualisasi 1 Frame
# ------------------------------------------------------------
ggplot(df_all, aes(x = x, y = y, color = Distribusi, fill = Distribusi)) +
  
  # Layer 1: Isian area transparan bertumpuk
  geom_area(alpha = 0.12, position = "identity") +
  
  # Layer 2: Garis utama kurva
  geom_line(linewidth = 0.9) +
  
  # Layer 3: Pemetaan Warna Kustom
  scale_color_manual(values = palet_warna) +
  scale_fill_manual(values = palet_warna) +
  
  # Layer 4: Penyesuaian Skala
  # Batasi Y hingga 1.2 agar kurva Pareto (puncak y=3) tidak memipihkan kurva lainnya
  coord_cartesian(ylim = c(0, 1.2)) + 
  scale_x_continuous(breaks = seq(-4, 15, by = 2)) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.05))) +
  
  # Layer 5: Judul dan Label
  labs(
    title = "Perbandingan 8 Distribusi Kontinu",
    subtitle = "Digabungkan dalam Satu Sumbu Koordinat",
    x = "Nilai Variable (x)",
    y = "Kepadatan Probabilitas f(x)",
    color = "Jenis Distribusi",
    fill  = "Jenis Distribusi",
    caption = "Dibuat dengan R & ggplot2"
  ) +
  
  # Layer 6: Styling Tema
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 15, color = "#111827"),
    plot.subtitle = element_text(color = "#4B5563", margin = margin(b = 12)),
    axis.title = element_text(face = "bold", color = "#374151"),
    
    # Pengaturan Legenda di Samping
    legend.position = "right",
    legend.title = element_text(face = "bold", size = 10),
    legend.background = element_rect(fill = "#F9FAFB", color = "#E5E7EB", linewidth = 0.5),
    legend.margin = margin(6, 10, 6, 10),
    
    panel.grid.minor = element_blank(),
    panel.grid.major = element_line(color = "#F3F4F6")
  )

library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Memuat package 'Actuar' untuk fungsi densitas Pareto jika tersedia,
# atau kita definisikan fungsi PDF Pareto (Type II / Lomax) secara manual:
dpareto_custom <- function(x, shape, scale) {
  ifelse(x < 0, 0, (shape / scale) * (1 + x / scale)^(-(shape + 1)))
}

# Fungsi PDF Rayleigh (Distribusi R)
drayleigh_custom <- function(x, scale) {
  ifelse(x < 0, 0, (x / scale^2) * exp(-x^2 / (2 * scale^2)))
}

# 1. Menyiapkan data untuk 9 Distribusi
# -------------------------------------------------------------
df_t <- data.frame(dist = "1. t-Student (df = 3)", x = seq(-4, 4, length.out = 300)) %>%
  mutate(y = dt(x, df = 3))

df_r <- data.frame(dist = "2. Rayleigh / R (scale = 2)", x = seq(0, 8, length.out = 300)) %>%
  mutate(y = drayleigh_custom(x, scale = 2))

df_chisq <- data.frame(dist = "3. Chi-Square (df = 4)", x = seq(0, 14, length.out = 300)) %>%
  mutate(y = dchisq(x, df = 4))

df_gamma <- data.frame(dist = "4. Gamma (shape = 2, rate = 1)", x = seq(0, 10, length.out = 300)) %>%
  mutate(y = dgamma(x, shape = 2, rate = 1))

df_weibull <- data.frame(dist = "5. Weibull (shape = 1.5, scale = 1)", x = seq(0, 5, length.out = 300)) %>%
  mutate(y = dweibull(x, shape = 1.5, scale = 1))

df_exp <- data.frame(dist = "6. Eksponensial (rate = 0.8)", x = seq(0, 6, length.out = 300)) %>%
  mutate(y = dexp(x, rate = 0.8))

df_pareto <- data.frame(dist = "7. Pareto (shape = 3, scale = 1)", x = seq(0, 5, length.out = 300)) %>%
  mutate(y = dpareto_custom(x, shape = 3, scale = 1))

df_unif <- data.frame(dist = "8. Uniform (min = 0, max = 5)", x = seq(-1, 6, length.out = 500)) %>%
  mutate(y = dunif(x, min = 0, max = 5))

# Memerlukan package 'statmod' untuk Inverse Gaussian (dinvgauss)
# Jika belum ada, bisa install.packages("statmod")
if (!requireNamespace("statmod", quietly = TRUE)) install.packages("statmod")
library(statmod)

df_invgauss <- data.frame(dist = "9. Inverse Gaussian (mean = 1, shape = 1)", x = seq(0.01, 4, length.out = 300)) %>%
  mutate(y = dinvgauss(x, mean = 1, shape = 1))

# 2. Penggabungan Seluruh Data
# -------------------------------------------------------------
df_all <- bind_rows(df_t, df_r, df_chisq, df_gamma, df_weibull, 
                    df_exp, df_pareto, df_unif, df_invgauss)

# Menjaga urutan panel sesuai angka
df_all$dist <- factor(df_all$dist, levels = unique(df_all$dist))

# 3. Plot Grid 3x3 Terpisah
# -------------------------------------------------------------
ggplot(df_all, aes(x = x, y = y, fill = dist, color = dist)) +
  geom_area(alpha = 0.25) +
  geom_line(linewidth = 0.9) +
  facet_wrap(~ dist, scales = "free", ncol = 3) +
  labs(title = "Visualisasi Terpisah 9 Distribusi Probabilitas Kontinu",
       subtitle = "Skala sumbu X dan Y disesuaikan independen di setiap panel",
       x = "Nilai X", 
       y = "Densitas") +
  theme_minimal() +
  theme(
    legend.position = "none",
    strip.text = element_text(face = "bold", size = 9),
    panel.grid.minor = element_blank()
  )