Daftar Anggota :

1 Pendahuluan

Halo!

Di dunia statistik, ada dua tokoh penting yang sering banget kita temui: Distribusi Normal dan Distribusi Eksponensial. Keduanya punya peran besar dalam berbagai analisis dan model.

Distribusi Normal dan Eksponensial adalah dua distribusi kontinu yang paling sering digunakan dalam statistika. Distribusi normal dikenal dengan bentuknya yang seperti lonceng dan simetris, serta digunakan untuk memodelkan data yang cenderung mengumpul di sekitar nilai tengah, seperti tinggi badan atau nilai ujian. Distribusi ini punya dua parameter: rata-rata (mean) dan simpangan baku (standard deviation), yang mengatur pusat dan sebaran datanya.

Sementara itu, distribusi eksponensial digunakan untuk menggambarkan waktu tunggu antar kejadian, misalnya waktu antar kedatangan pelanggan atau kerusakan mesin. Distribusi ini hanya punya satu parameter, yaitu laju kejadian (lambda), dan punya bentuk yang menurun tajam ke kanan. Salah satu ciri khasnya adalah sifat memoryless, artinya peluang suatu kejadian tidak dipengaruhi oleh waktu yang telah berlalu.

Di proyek kali ini, kami bikin sebuah mini-package R bernama DistCont yang isinya fungsi-fungsi kece buat ngitung PDF & CDF dan juga simulasi data semua untuk si Normal dan Eksponensial ini.

2 Fungsi-fungsi Utama

2.1 PDF Distribusi Normal

Rumus :

\[ f(x) = \frac{1}{\sigma \sqrt{2\pi}} \cdot e^{- \frac{(x - \mu)^2}{2\sigma^2} } \]

Fungsi R :

dnorm_manual <- function(x, mean = 0, sd = 1) {
  if (sd <= 0) stop("Standard deviation must be positive")
  constant <- 1 / (sd * sqrt(2 * pi))
  exponent <- exp(-((x - mean)^2) / (2 * sd^2))
  return(constant * exponent)
}

2.2 CDF Distribusi Normal

Rumus :

\[ F(x) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{x} e^{ -\frac{(t - \mu)^2}{2\sigma^2} } \, dt \]

Fungsi R :

pnorm_manual <- function(q, mean = 0, sd = 1) {
  if (sd <= 0) stop("Standard deviation must be positive")
  # Using the Z-score and approximation
  z <- (q - mean) / sd
  t <- 1 / (1 + 0.2316419 * abs(z))
  d <- 0.3989423 * exp(-z * z / 2)
  p <- d * t * (0.3193815 + t * (-0.3565638 + t * (1.781478 + t * (-1.821256 + t * 1.330274))))
  ifelse(z > 0, 1 - p, p)
}

2.3 Studi Kasus PDF dan CDF Distribusi Normal

Dalam penelitian pertumbuhan tinggi badan remaja putri usia 16 tahun, diperoleh data bahwa tinggi badan mengikuti distribusi normal dengan rata-rata mean = 158 cm dan standar deviasi sd = 6 cm.

  1. Berapa nilai fungsi kepadatan peluang (PDF) pada tinggi badan 162 cm?
  2. Berapa peluang seorang remaja putri memiliki tinggi badan ≤ 162 cm (CDF)?
library(DistCont)
## 
## Attaching package: 'DistCont'
## The following objects are masked _by_ '.GlobalEnv':
## 
##     dnorm_manual, pnorm_manual
# PDF pada x = 162 cm
pdf_remaja <- dnorm_manual(162, mean = 158, sd = 6)
pdf_remaja
## [1] 0.05324133
# CDF pada q = 162 cm
cdf_remaja <- pnorm_manual(162, mean = 158, sd = 6)
cdf_remaja
## [1] 0.7475076

2.4 PDF Distribusi Eksponensial

Rumus :

\[ f(x) = \begin{cases} \lambda e^{-\lambda x}, & x \geq 0 \\ 0, & x < 0 \end{cases} \]

Fungsi R :

dexp_manual <- function(x, rate = 1) {
  if (rate <= 0) stop("Rate must be positive")
  ifelse(x >= 0, rate * exp(-rate * x), 0)
}

2.5 CDF Distribusi Eksponensial

Rumus :

\[ F(x) = \begin{cases} 1 - e^{-\lambda x}, & x \geq 0 \\ 0, & x < 0 \end{cases} \]

Fungsi R :

pexp_manual <- function(q, rate = 1) {
  if (rate <= 0) stop("Rate must be positive")
  ifelse(q >= 0, 1 - exp(-rate * q), 0)
}

2.6 Studi Kasus PDF dan CDF Distribusi Eksponensial

Di sebuah ruang pelayanan SIM keliling, rata-rata waktu antar kedatangan pemohon SIM baru adalah 20 menit. Diasumsikan waktu antar kedatangan mengikuti distribusi eksponensial.

  1. Hitung nilai fungsi kepadatan peluang (PDF) untuk waktu antar kedatangan 10 menit.
  2. Hitung peluang ada pemohon datang dalam waktu ≤ 10 menit (CDF).
library(DistCont)
# PDF pada x = 10 menit
pdf_sim <- dexp_manual(10, rate = 0.05)
pdf_sim
## [1] 0.03032653
# CDF pada q = 10 menit
cdf_sim <- pexp_manual(10, rate = 0.05)
cdf_sim
## [1] 0.3934693

3 Ayo Coba Simulasi!

3.1 Load Package

library(DistCont)
ls("package:DistCont")
## [1] "dexp_manual"  "dnorm_manual" "pexp_manual"  "pnorm_manual" "rexp_manual" 
## [6] "rnorm_manual"

3.2 Random Generator Distribusi Normal dan Eksponensial

Distribusi Normal:

rnorm_manual <- function(n, mean = 0, sd = 1) {
  if (sd <= 0) stop("Standard deviation must be positive")
  # Box-Muller transform
  u1 <- runif(n)
  u2 <- runif(n)
  z0 <- sqrt(-2 * log(u1)) * cos(2 * pi * u2)
  return(mean + sd * z0)
}

Distribusi Eksponensial:

rexp_manual <- function(n, rate = 1) {
  if (rate <= 0) stop("Rate must be positive")
  # Inverse transform method
  u <- runif(n)
  return(-log(1 - u) / rate)
}

3.3 Simulasi Distribusi Normal

Seorang peneliti ingin mempelajari kebiasaan tidur mahasiswa Universitas Islam Indonesia. Berdasarkan studi sebelumnya, waktu tidur mahasiswa per malam mengikuti distribusi normal dengan: - Rata-rata (mean) = 6,5 jam - Simpangan baku (sd) = 1 jam Untuk keperluan analisis, peneliti ingin melakukan simulasi data waktu tidur dari 100 mahasiswa kemudian Menghitung proporsi mahasiswa dengan tidur < 6 jam yang di indikasikan sebagai “tidur kurang dari ideal”.

# 1. Simulasi 100 data waktu tidur
set.seed(123)  # Untuk hasil yang bisa direplikasi
tidur <- rnorm_manual(n = 100, mean = 6.5, sd = 1)

# 2. Hitung proporsi tidur < 6 jam
prop_kurang_6 <- mean(tidur < 6)
prop_kurang_6
## [1] 0.35

3.4 Simulasi Distribusi Eksponensial

Sebuah tempat layanan pelanggan mencatat bahwa rata-rata terdapat satu pelanggan yang datang setiap 3 menit, yang dapat dimodelkan dengan distribusi eksponensial dengan laju kedatangan (rate) λ = 1/3. Berdasarkan informasi tersebut, lakukan simulasi sebanyak 50 waktu antar kedatangan pelanggan menggunakan fungsi distribusi eksponensial. Selain itu, hitunglah peluang bahwa seorang pelanggan akan datang dalam waktu kurang dari atau sama dengan 2 menit.

library(DistCont)  # Paket kamu sendiri

set.seed(123)
n <- 50
rate <- 1/3  # 1 pelanggan tiap 3 menit

# Simulasi data waktu antar kedatangan
interarrival <- rexp_manual(n, rate)

# Waktu kedatangan kumulatif
arrival <- cumsum(interarrival)

# Probabilitas pelanggan datang dalam <= 2 menit
prob_2_menit <- pexp_manual(2, rate)
cat("P(Pelanggan datang dalam ≤ 2 menit):", round(prob_2_menit,4),"\n")
## P(Pelanggan datang dalam ≤ 2 menit): 0.4866

4 Kesimpulan

Jadi, lewat package DistCont ini kita bisa dengan mudah:

  1. Menghitung PDF dan CDF untuk distribusi Normal dan Eksponensial
  2. Melakukan simulasi data acak untuk distribusi Normal dan Eksponensial.

Cocok banget buat keperluan belajar, eksplorasi data, sampai penelitian ringan.