# Parameter distribusi
mu <- 10      # Rata-rata (mean)
sigma <- 2   # Deviasi standar (sd)

# Membuat rentang nilai x dari -4 sampai 4
x <- seq(mu - 4 * sigma, mu + 4 * sigma, length.out = 500)
y <- dnorm(x, mean = mu, sd = sigma)

# Garis kurva utama
plot(x, y, type = "l", col = "pink", lwd = 2.5,
     main = "Kurva Distribusi Normal Standar N(0, 1)",
     xlab = "Nilai X", ylab = "Densitas",
     las = 1, bty = "l")

# Menambahkan garis kisi (grid) dan warna di bawah kurva
grid()
polygon(c(x, rev(x)), c(y, rep(0, length(y))), 
        col = rgb(0.12, 0.47, 0.71, 0.2), border = NA)

# Parameter
mu <- 10
varian <- 2
sigma <- sqrt(varian) # Deviasi standar = sqrt(2) ≈ 1.414

# Rentang sumbu x (4 deviasi standar di kiri dan kanan mean)
x <- seq(mu - 4 * sigma, mu + 4 * sigma, length.out = 500)
y <- dnorm(x, mean = mu, sd = sigma)

# Plot kurva
plot(x, y, type = "l", col = "pink", lwd = 2.5,
     main = expression(paste("Distribusi Normal ", N(mu == 10, sigma^2 == 2))),
     xlab = "Nilai X", ylab = "Densitas",
     las = 1, bty = "l")

grid()
polygon(c(x, rev(x)), c(y, rep(0, length(y))), 
        col = rgb(0.12, 0.47, 0.71, 0.2), border = NA)

# Parameter
mu <- 10
var1 <- 1; sd1 <- sqrt(var1)
var2 <- 2; sd2 <- sqrt(var2)

# Rentang sumbu X terfokus di sekitar mu = 10
x <- seq(mu - 4 * sd2, mu + 4 * sd2, length.out = 500)

y1 <- dnorm(x, mean = mu, sd = sd1)
y2 <- dnorm(x, mean = mu, sd = sd2)

# Plot Kurva 1
plot(x, y1, type = "l", col = "#1F77B4", lwd = 2.5,
     main = "Kurva Normal Bertumpuk pada Rata-Rata Sama (mu = 10)",
     xlab = "Nilai X", ylab = "Densitas",
     ylim = c(0, max(y1, y2)), las = 1, bty = "l")

# Area transparan Kurva 1
polygon(c(x, rev(x)), c(y1, rep(0, length(y1))), 
        col = rgb(0.12, 0.47, 0.71, 0.3), border = NA)

# Tambah Kurva 2
lines(x, y2, col = "#FF7F0E", lwd = 2.5)

# Area transparan Kurva 2
polygon(c(x, rev(x)), c(y2, rep(0, length(y2))), 
        col = rgb(1.0, 0.5, 0.05, 0.3), border = NA)

grid()
legend("topright", 
       legend = c(expression(N(10, 1)), expression(N(10, 2))),
       col = c("#1F77B4", "#FF7F0E"), lwd = 2.5, bty = "n")

# Parameter Kurva 1
mu1 <- 8; var1 <- 1; sd1 <- sqrt(var1)

# Parameter Kurva 2
mu2 <- 10; var2 <- 2; sd2 <- sqrt(var2)

# Rentang sumbu X mencakup kedua kurva
x <- seq(4, 15, length.out = 500)

y1 <- dnorm(x, mean = mu1, sd = sd1)
y2 <- dnorm(x, mean = mu2, sd = sd2)

# Plot Kurva 1
plot(x, y1, type = "l", col = "#1F77B4", lwd = 2.5,
     main = "Kurva Normal Bertumpuk dengan Mean Berbeda",
     xlab = "Nilai X", ylab = "Densitas",
     ylim = c(0, max(y1, y2)), las = 1, bty = "l")

# Area transparan Kurva 1
polygon(c(x, rev(x)), c(y1, rep(0, length(y1))), 
        col = rgb(0.12, 0.47, 0.71, 0.3), border = NA)

# Tambah Kurva 2
lines(x, y2, col = "#FF7F0E", lwd = 2.5)

# Area transparan Kurva 2
polygon(c(x, rev(x)), c(y2, rep(0, length(y2))), 
        col = rgb(1.0, 0.5, 0.05, 0.3), border = NA)

grid()
legend("topright", 
       legend = c(expression(N(8, 1)), expression(N(10, 2))),
       col = c("#1F77B4", "#FF7F0E"), lwd = 2.5, bty = "n")

# 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 = "blue", lwd = 2,
     main = "Perbandingan 5 Distribusi Normal Bertumpuk",
     xlab = "Nilai X", ylab = "Densitas",
     ylim = c(0, 4), # 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("blue", "green", "red", "purple", "orange"), 
       lwd = 2, bty = "n")

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
# 1. Definisikan parameter
dist_info <- data.frame(
  label = factor(
    c("1. N(0, sd=2)", "2. N(2, sd=1)", "3. N(5, sd=5)", "4. N(10, sd=3)", "5. N(1.5, sd=0.1)"),
    levels = c("1. N(0, sd=2)", "2. N(2, sd=1)", "3. N(5, sd=5)", "4. N(10, sd=3)", "5. N(1.5, sd=0.1)")
  ),
  mu = c(0, 2, 5, 10, 1.5),
  sd = c(2, 1, 5, 3, 0.1)
)

# 2. Bangkitkan titik-titik data untuk setiap panel
df_plot <- dist_info %>%
  rowwise() %>%
  do({
    x_vals <- seq(.$mu - 4 * .$sd, .$mu + 4 * .$sd, length.out = 300)
    y_vals <- dnorm(x_vals, mean = .$mu, sd = .$sd)
    data.frame(label = .$label, x = x_vals, y = y_vals)
  })

# 3. Plot terpisah dengan facet_wrap
ggplot(df_plot, aes(x = x, y = y, fill = label, color = label)) +
  geom_area(alpha = 0.25) +
  geom_line(linewidth = 1) +
  facet_wrap(~ label, scales = "free", ncol = 3) + # 'scales = free' menyesuaikan sumbu X & Y
  labs(title = "Visualisasi Terpisah 5 Distribusi Normal",
       x = "Nilai X", 
       y = "Densitas") +
  theme_minimal() +
  theme(legend.position = "none",
        strip.text = element_text(face = "bold", size = 10))

library(ggplot2)

# Rentang sumbu X
df_plot <- data.frame(x = c(-4, 4))

ggplot(df_plot, aes(x = x)) +
  # t-distribution df = 1 (Tebal di ekor / heavy-tailed)
  stat_function(fun = dt, args = list(df = 1),
                aes(color = "t (df = 1)"), linewidth = 1) +
  
  # t-distribution df = 5
  stat_function(fun = dt, args = list(df = 5),
                aes(color = "t (df = 5)"), linewidth = 1) +
  
  # t-distribution df = 30
  stat_function(fun = dt, args = list(df = 30),
                aes(color = "t (df = 30)"), linewidth = 1) +
  
  # Normal Standar N(0,1) sebagai pembanding (Garis Putus-Putus)
  stat_function(fun = dnorm, args = list(mean = 0, sd = 1),
                aes(color = "Normal Standar N(0,1)"), 
                linewidth = 1.2, linetype = "dashed") +
  
  # Skala Warna & Legenda
  scale_color_manual(name = "Distribusi", 
                     values = c("t (df = 1)" = "#D62728",    # Merah
                                "t (df = 5)" = "#FF7F0E",    # Oranye
                                "t (df = 30)" = "#2CA02C",   # Hijau
                                "Normal Standar N(0,1)" = "#1F77B4")) + # Biru
  
  labs(title = "Perbandingan Simultan Distribusi t-Student & Normal Standar",
       subtitle = "Makin besar df, distribusi t makin mendekati Normal Standar",
       x = "Nilai t / Z", 
       y = "Densitas") +
  theme_minimal() +
  theme(legend.position = "top")

library(ggplot2)
library(dplyr)

# 1. Menyiapkan data untuk masing-masing distribusi
df_norm <- data.frame(dist = "1. Distribusi Normal N(0, 1)", x = seq(-4, 4, length.out = 400)) %>%
  mutate(y = dnorm(x, mean = 0, sd = 1))

df_t <- data.frame(dist = "2. Distribusi t-Student (df = 3)", x = seq(-4, 4, length.out = 400)) %>%
  mutate(y = dt(x, df = 3))

df_ray <- data.frame(dist = "3. Distribusi Rayleigh R (scale = 2)", x = seq(0, 8, length.out = 400)) %>%
  mutate(y = (x / 2^2) * exp(-x^2 / (2 * 2^2)))

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

# 2. Penggabungan data
df_all <- bind_rows(df_norm, df_t, df_ray, df_chisq)

# 3. Plot terpisah dengan facet_wrap (Grid 2x2)
ggplot(df_all, aes(x = x, y = y, fill = dist, color = dist)) +
  geom_area(alpha = 0.25) +
  geom_line(linewidth = 1) +
  facet_wrap(~ dist, scales = "free", ncol = 2) +
  scale_color_manual(values = c("#1F77B4", "#FF7F0E", "#2CA02C", "#D62728")) +
  scale_fill_manual(values = c("#1F77B4", "#FF7F0E", "#2CA02C", "#D62728")) +
  labs(title = "Visualisasi Terpisah 4 Distribusi Statistika",
       x = "Nilai X", 
       y = "Densitas") +
  theme_minimal() +
  theme(legend.position = "none",
        strip.text = element_text(face = "bold", size = 10))

library(ggplot2)
library(dplyr)

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

library(ggplot2)
library(dplyr)
if (!requireNamespace("statmod", quietly = TRUE)) install.packages("statmod")
library(statmod)

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

dpareto_custom <- function(x, shape, scale) {
  ifelse(x < 0, 0, (shape / scale) * (1 + x / scale)^(-(shape + 1)))
}

# 1. Menyiapkan Grid X Seragam [-4, 8] untuk Semua Distribusi
# -------------------------------------------------------------
x_grid <- seq(-4, 8, length.out = 500)

df_all_stacked <- bind_rows(
  data.frame(dist = "t-Student (df = 3)", x = x_grid, y = dt(x_grid, df = 3)),
  data.frame(dist = "Rayleigh (scale = 2)", x = x_grid, y = drayleigh_custom(x_grid, scale = 2)),
  data.frame(dist = "Chi-Square (df = 4)", x = x_grid, y = dchisq(x_grid, df = 4)),
  data.frame(dist = "Gamma (shape = 2, rate = 1)", x = x_grid, y = dgamma(x_grid, shape = 2, rate = 1)),
  data.frame(dist = "Weibull (shape = 1.5, scale = 1)", x = x_grid, y = dweibull(x_grid, shape = 1.5, scale = 1)),
  data.frame(dist = "Eksponensial (rate = 0.8)", x = x_grid, y = dexp(x_grid, rate = 0.8)),
  data.frame(dist = "Pareto (shape = 3, scale = 1)", x = x_grid, y = dpareto_custom(x_grid, shape = 3, scale = 1)),
  data.frame(dist = "Uniform (min = 0, max = 5)", x = x_grid, y = dunif(x_grid, min = 0, max = 5)),
  data.frame(dist = "Inverse Gaussian (mean = 1, shape = 1)", x = x_grid, y = ifelse(x_grid <= 0, 0, dinvgauss(x_grid, mean = 1, shape = 1)))
)

# 2. Plot Menumpuk (Overlay)
# -------------------------------------------------------------
ggplot(df_all_stacked, aes(x = x, y = y, color = dist, fill = dist)) +
  geom_area(alpha = 0.12, position = "identity") +
  geom_line(linewidth = 0.95) +
  scale_x_continuous(breaks = seq(-4, 8, by = 2)) +
  coord_cartesian(ylim = c(0, 0.8)) +
  labs(
    title = "Perbandingan Menumpuk 9 Distribusi Probabilitas Kontinu",
    subtitle = "Diplot pada rentang sumbu X (-4 hingga 8) dan skala Y yang sama",
    x = "Nilai X",
    y = "Densitas",
    color = "Jenis Distribusi",
    fill = "Jenis Distribusi"
  ) +
  theme_minimal() +
  theme(
    legend.position = "right",
    legend.title = element_text(face = "bold", size = 10),
    legend.text = element_text(size = 8.5),
    plot.title = element_text(face = "bold", size = 13),
    panel.grid.minor = element_blank()
  )