# 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()
)
