# Parameter distribusi normal
mu <- 10
sigma <- 2
# Membuat rentang nilai X
x <- seq(mu - 4*sigma, mu + 4*sigma, length.out = 1000)
# Menghitung kepadatan distribusi normal
y <- dnorm(x, mean = mu, sd = sigma)
# Membuat grafik
plot(x, y,
type = "l",
lwd = 2,
main = "Grafik Distribusi Normal",
xlab = "Nilai X",
ylab = "Kepadatan",
col = "blue")

# ============================================================
# Visualisasi: Poisson vs Binomial Negatif & Uniform Diskrit
# ============================================================
# Package yang dibutuhkan:
# install.packages(c("ggplot2", "tidyr"))
library(ggplot2)
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.5.3
# ------------------------------------------------------------
# 1. Poisson vs Binomial Negatif (mean sama = 6, varians beda)
# -> ilustrasi overdispersi
# ------------------------------------------------------------
x <- 0:25
mean_target <- 6
df1 <- data.frame(
x = x,
"Binomial Negatif (r=0.5, mean=6)" = dnbinom(x, size = 0.5, mu = mean_target),
"Binomial Negatif (r=2, mean=6)" = dnbinom(x, size = 2, mu = mean_target),
"Poisson (lambda=6)" = dpois(x, lambda = mean_target),
check.names = FALSE
)
df1_long <- pivot_longer(
df1, cols = -x,
names_to = "Distribusi", values_to = "Probabilitas"
)
p1 <- ggplot(df1_long, aes(x = x, y = Probabilitas,
color = Distribusi, linetype = Distribusi)) +
geom_line(linewidth = 0.9) +
geom_point(size = 1.6) +
scale_color_manual(values = c("#4C72B0", "#55A868", "#333333")) +
labs(
title = "Poisson vs Binomial Negatif",
subtitle = "Mean sama (6), varians berbeda -> overdispersi",
x = "x (count)",
y = "P(X = x)"
) +
theme_minimal(base_size = 12) +
theme(
legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(face = "bold")
)
print(p1)

# ------------------------------------------------------------
# 2. Distribusi Uniform Diskrit — hasil lemparan dadu (1-6)
# ------------------------------------------------------------
df2 <- data.frame(
x = factor(1:6),
Probabilitas = rep(1/6, 6)
)
p2 <- ggplot(df2, aes(x = x, y = Probabilitas)) +
geom_col(fill = "#A9C4D8", width = 0.6) +
geom_hline(yintercept = 1/6, linetype = "dashed", color = "grey40") +
labs(
title = "Distribusi Uniform Diskrit",
subtitle = "Contoh: hasil lemparan dadu (1-6)",
x = "Mata dadu",
y = "P(X = x)"
) +
ylim(0, 0.25) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))
print(p2)

# Simpan sebagai gambar (opsional):
# ggsave("poisson_vs_binomneg.png", p1, width = 7, height = 5, dpi = 300)
# ggsave("uniform_diskrit.png", p2, width = 6, height = 4, dpi = 300)
# ============================================================
# Simulasi Distribusi Normal
# Kurva 1-5 dengan rata-rata (mu) dan simpangan baku (sigma) berbeda
# ============================================================
# install.packages("ggplot2")
library(ggplot2)
# Data dari tabel
df_param <- data.frame(
kurva = 1:5,
mu = c(0, 2, 5, 10, 1.5),
sigma = c(1, 1, 5, 3, 0.1)
)
# Rentang x yang mencakup seluruh kurva (+-4 simpangan baku)
x_min <- min(df_param$mu - 4 * df_param$sigma)
x_max <- max(df_param$mu + 4 * df_param$sigma)
x_seq <- seq(x_min, x_max, length.out = 1000)
# Hitung densitas f(x) untuk tiap kurva
df_dens <- do.call(rbind, lapply(seq_len(nrow(df_param)), function(i) {
data.frame(
kurva = factor(df_param$kurva[i]),
label = sprintf("Kurva %d (mu=%.3g, sigma=%.3g)",
df_param$kurva[i], df_param$mu[i], df_param$sigma[i]),
x = x_seq,
density = dnorm(x_seq, mean = df_param$mu[i], sd = df_param$sigma[i])
)
}))
# ------------------------------------------------------------
# 1. Semua kurva dalam satu grafik (overlay)
# ------------------------------------------------------------
p1 <- ggplot(df_dens, aes(x = x, y = density, color = label)) +
geom_line(linewidth = 1) +
labs(
title = "Simulasi Distribusi Normal",
subtitle = "Perbandingan kurva dengan mu dan sigma berbeda",
x = "x",
y = "Densitas f(x)"
) +
theme_minimal(base_size = 12) +
theme(legend.position = "bottom", legend.title = element_blank())
print(p1)

# ------------------------------------------------------------
# 2. Kurva terpisah per panel (skala bebas)
# -> lebih jelas karena sigma sangat bervariasi (0.1 s.d. 5),
# sehingga di grafik overlay kurva sigma kecil akan
# tampak jauh lebih tinggi/tajam dan menutupi yang lain
# ------------------------------------------------------------
p2 <- ggplot(df_dens, aes(x = x, y = density, color = label)) +
geom_line(linewidth = 1) +
facet_wrap(~label, scales = "free", ncol = 2) +
labs(
title = "Simulasi Distribusi Normal (per kurva)",
x = "x",
y = "Densitas f(x)"
) +
theme_minimal(base_size = 11) +
theme(legend.position = "none")
print(p2)

# Simpan sebagai gambar (opsional):
# ggsave("normal_overlay.png", p1, width = 8, height = 5, dpi = 300)
# ggsave("normal_facet.png", p2, width = 8, height = 6, dpi = 300)